问题标签 [extern-c]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
11 回答
88286 浏览

c++ - 为什么我们需要 extern "C"{ #include在 C++ 中?

为什么我们需要使用:

具体来说:

  • 我们应该什么时候使用它?

  • 在需要我们使用它的编译器/链接器级别发生了什么?

  • 这在编译/链接方面如何解决需要我们使用它的问题?

0 投票
10 回答
12603 浏览

c++ - 是否可以在 C++ 中对 C 结构进行子类化并在 C 代码中使用指向该结构的指针?

这样做是否有副作用:

C代码:

C++ 代码:

extern "C"C++ 代码周围有一个,每个代码都在它自己的编译单元内。

这可以跨编译器移植吗?

0 投票
5 回答
23513 浏览

c++ - 静态与外部“C”/“C++”

静态成员函数和外部“C”链接函数有什么区别?例如,在 C++ 中使用“makecontext”时,我需要传递一个指向函数的指针。Google 建议使用外部“C”链接,因为“makecontext”是 C。但我发现使用静态也可以。我只是幸运还是...

对比

编辑:您能否展示静态成员版本不起作用的编译器或体系结构(并且它不是编译器中的错误)?

0 投票
3 回答
3289 浏览

c++ - extern "C" 在 C 中是否有任何影响?

我刚刚得到一些使用 extern "C" 来声明外部函数的 C 代码,如下所示:

这是有效的C吗?我在这一行遇到错误,但我不确定是因为这个还是其他原因。

0 投票
16 回答
996254 浏览

c++ - C++中extern "C" 的作用是什么?

放入 C++ 代码到底有什么作用extern "C"

例如:

0 投票
2 回答
44328 浏览

c++ - 何时在 C++ 中使用外部“C”?

可能重复:
为什么我们在 C++ 中需要 extern “C”{ #include <foo.h> }?

我经常看到编码如下的程序:

为什么我们要使用extern "C"块?我们可以用 C++ 中的东西替换它吗?使用有什么好处extern "C"吗?

我确实看到了一个解释这一点的链接,但是当我们已经有了 C++ 时,为什么我们需要用 C 编译一些东西?

0 投票
6 回答
22422 浏览

c++ - 仅在函数声明中需要 extern "C" 吗?

我编写了一个需要从 C 程序调用的 C++ 函数。为了使它可以从 C 中调用,我extern "C"在函数声明中指定了。然后我编译了 C++ 代码,但是编译器 (Dignus Systems/C++) 为函数生成了一个错误的名称。所以,它显然没有兑现extern "C".

为了解决这个问题,我添加extern "C"了函数定义。在此之后,编译器生成了一个可从 C 调用的函数名。

从技术上讲,extern "C"唯一需要在函数声明中指定。这是正确的吗?(C++ FAQ有一个很好的例子。)你是否也应该在函数定义中指定它?

下面是一个例子来证明这一点:

我的问题可能是错误编码的结果,或者我可能发现了编译器错误。无论如何,我想咨询 stackoverflow 以确保我知道在技术上哪个是“正确”的方式。

0 投票
9 回答
59329 浏览

c++ - 外部“C”声明如何工作?

我正在学习编程语言课程,我们正在讨论extern "C"声明。

除了“它接口 C 和 C++”之外,这个声明如何在更深层次上工作?这又如何影响程序中发生的绑定?

0 投票
6 回答
4825 浏览

c++ - 为什么 C++ 回调 C 函数需要“extern C”?

我在 Boost 代码中找到了这样的例子。

为什么你真的需要这个extern "C"

很明显,该thread_proxy函数是私有的内部函数,我不希望它被修改为“thread_proxy”,因为我实际上根本不需要它。

事实上,在我编写并在许多平台上运行的所有代码中,我从未使用过extern "C",而且这与正常功能一样工作。

为什么要extern "C"添加?


我的问题是extern "C"函数污染了全局命名空间,它们实际上并没有像作者期望的那样隐藏。

这不是重复的! 我不是在谈论修饰和外部链接。在这段代码中很明显不需要外部链接!

答: C 和 C++ 函数的调用约定不一定相同,所以需要创建一个具有 C 调用约定的。请参阅 C++ 标准的 7.5 (p4)。

0 投票
7 回答
120515 浏览

c++ - 如何从 C 调用 C++ 函数?

我知道这个。

从 C++ 调用 C 函数:

如果我的应用程序是用 C++ 编写的,并且我必须从用 C 编写的库中调用函数。那么我会使用

这不会破坏名称C_library_function,链接器会在其输入 *.lib 文件中找到相同的名称,问题就解决了。

从 C 调用 C++ 函数???

但是在这里我扩展了一个用 C 编写的大型应用程序,我需要使用一个用 C++ 编写的库。C++ 的名称修改在这里造成了麻烦。链接器正在抱怨未解析的符号。好吧,我不能在我的 C 项目上使用 C++ 编译器,因为那会破坏很多其他东西。出路是什么?

顺便说一句,我正在使用 MSVC