Tag: extern c

一个名字或types是否意味着某种语言的联系是什么意思?

根据(c)ANSI ISO / IEC 14882:2003,第127页: 联动规格嵌套。 当联动规范嵌套时,最内层的决定语言。 联动规范不build立范围。 链接规范只能在命名空间范围(3.3)中出现。 在一个链接规范中,指定的语言链接适用于由声明引入的所有函数声明符,函数名称和variables名称的函数types。 extern "C" void f1(void(*pf)(int)); // the name f1 and its function type have C language // linkage; pf is a pointer to a C function extern "C" typedef void FUNC(); FUNC f2; // the name f2 has C++ language linkage and the // function's type […]

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

我知道这个。 从C ++调用C函数: 如果我的应用程序是用C ++编写的,而且我不得不从C编写的库中调用函数,那么我会使用它 //main.cpp extern "C" void C_library_function(int x, int y);//prototype C_library_function(2,4);// directly using it. 这不会C_library_function名称C_library_function和链接器将在其input* .lib文件中find相同的名称,并解决问题。 从C调用C ++函数? 但是在这里我扩展了一个用C编写的大型应用程序,我需要使用一个用C ++编写的库。 C ++的名字在这里引起麻烦。 链接器抱怨未解决的符号。 那么我不能在我的C项目上使用C ++编译器,因为那会破坏很多其他的东西。 什么是出路? 顺便说一下我使用MSVC

从C ++代码调用C函数

我有一个C函数,我想从C ++调用。 我不能使用“ extern "C" void foo() ”方法,因为C函数无法使用g ++编译。 但它使用gcc编译得很好。 任何想法如何从C ++调用函数?

为什么C函数不能被名字打乱?

我最近接受了一个采访,有一个问题是在C ++代码中使用了extern "C" 。 我回答说在C ++代码中使用C函数是因为C不使用名称修饰。 有人问我为什么C不使用名称修改,老实说我无法回答。 我明白,当C ++编译器编译函数时,会给函数一个特殊的名字,主要是因为我们可以在C ++中重载相同名称的函数,而这些函数必须在编译时parsing。 在C中,函数的名称将保持不变,或者在_之前。 我的查询是:允许C ++编译器破坏C函数还有什么错? 我会假定编译器赋予它们的名称并不重要。 我们在C和C ++中以相同的方式调用函数。

为什么我们需要在C ++中使用extern“C”{#include <foo.h>}?

为什么我们需要使用: extern "C" { #include <foo.h> } 特别: 我们应该什么时候使用它? 在编译器/链接器级别发生什么事情需要我们使用它? 如何在编译/链接方面解决需要我们使用它的问题?

在C ++源代码中,extern“C”有什么作用?

究竟把extern "C"放到C ++代码中呢? 例如: extern "C" { void foo(); }

结合C ++和C – #ifdef __cplusplus如何工作?

我正在做一个有很多遗留C代码的项目。 我们已经开始用C ++编写,并且最终还要转换遗留代码。 我对C和C ++如何交互有点困惑。 我明白,通过用extern "C"包装C代码,C ++编译器不会破坏C代码的名称,但我不完全确定如何实现这一点。 所以,在每个C头文件的顶部(包括后卫),我们有 #ifdef __cplusplus extern "C" { #endif 在底部,我们写 #ifdef __cplusplus } #endif 在这两者之间,我们拥有所有的包含,typedef和函数原型。 我有几个问题,看看我是否正确理解这一点: 如果我有一个包含C头文件Bh的C ++文件A.hh,包含另一个C头文件Ch,这是如何工作的? 我认为,当编译器进入Bh时, __cplusplus将被定义,所以它会用extern "C"来包装代码(并且__cplusplus不会在这个块内部被定义)。 所以,当它进入Ch时, __cplusplus将不会被定义,代码也不会被包装在extern "C" 。 它是否正确? 用extern "C" { extern "C" { .. } }包装一段代码有什么不对吗? 第二个extern "C"做什么? 我们不把这个包装在.c文件,只是.h文件。 那么,如果一个函数没有原型,会发生什么? 编译器是否认为它是一个C ++函数? 我们也使用了一些用C编写的第三方代码,并没有这种包装。 任何时候我从这个库中包含一个头文件,我一直在#include周围放置一个extern "C" 。 这是对付这个问题的正确方法吗? 最后,这是一个好主意吗? 还有什么我们该做的? 我们将在可预见的未来混合使用C和C […]