extern-c相关内容
..
我在 Boost 代码中找到了这样的例子. 命名空间提升{命名空间{extern "C" void *thread_proxy(void *f){....}}//匿名的void thread::thread_start(...){...pthread_create(something,0,&thread_proxy,something_else);...}}//促进 为什么你真的需要这个ext
..
我有一个 C 函数,我想从 C++ 调用它.我不能使用 "extern "C" void foo()" 这种方法,因为 C 函数无法使用 g++ 编译.但它使用 gcc 编译得很好.任何想法如何从 C++ 调用函数? 解决方案 像这样编译 C 代码: gcc -c -o somecode.o somecode.c 然后是这样的C++代码: g++ -c -o othercode.o
..
这个我知道. 从 C++ 调用 C 函数: 如果我的应用程序是用 C++ 编写的,而我必须从用 C 编写的库中调用函数.那么我会使用 //main.cppextern "C" void C_library_function(int x, int y);//原型C_library_function(2,4);//直接使用. 这不会破坏名称 C_library_function 并且链
..
我正在处理一个包含大量遗留 C 代码的项目.我们已经开始用 C++ 编写,目的是最终也转换遗留代码.我对 C 和 C++ 如何交互有点困惑.我知道通过用 extern "C" 包装 C 代码,C++ 编译器不会破坏 C 代码的名称,但我不是完全确定如何实现这一点. 因此,在每个 C 头文件的顶部(在包含守卫之后),我们有 #ifdef __cplusplus外部“C"{#万一 在底部,我
..
将 extern "C" 放入 C++ 代码中究竟有什么作用? 例如: extern "C" {无效的 foo();} 解决方案 extern "C" 使 C++ 中的函数名具有 C 链接(编译器不会破坏名称)以便客户端C 代码可以使用仅包含函数声明的 C 兼容头文件链接到(使用)您的函数.您的函数定义包含在二进制格式中(由您的 C++ 编译器编译),然后客户端 C 链接器将使用 C
..
环境是Microsoft Visual C ++ 2015和Windows 7. 在标头中定义的inline extern "C"函数是否有特殊之处?我正在使用其中其中一个标头包含此类野兽的SDK.在我的应用程序中,我有一个单独的TU(转换单元),其唯一的工作就是包含上述标头.就这样.没什么其他的了.如果我深入研究生成的目标文件,则会看到引入了extern "C"函数.这使我产生了一些不必要
..
我有一个cpp代码,我想在其中调用c函数. 两者都可以很好地编译为.o文件,但是当执行clang ++进行编译时,我收到以下错误: file.cpp:74:12: error: expected unqualified-id extern "C" ^ cpp文件中的代码如下: void parseExtern(QString str) { #ifdef
..
给出以下代码: A2.H _declspec(dllimport) void SomeFunc(); struct Foo { Foo(); ~Foo(); }; inline Foo::Foo() { } inline Foo::~Foo() { SomeFunc(); } A1.H #include "A2.h" extern "C" void Tri
..
我在文件的开头看到使用C2的C ++代码,如下所示: #ifdef __cplusplus extern "C" {} #endif 这是什么意思?如何运作? 解决方案 可能不是这样,而更像是: #ifdef __cplusplus extern "C" { #endif //some includes or declarations #ifdef __cplus
..
为了在C文件中使用C ++代码,我读到我们可以做extern "C" { (where the c++ code goes here)},但是当我尝试使用cout打印出某些内容时,由于它无法识别库,我一直遇到错误.我想我对extern"C"如何允许您在C中使用C ++代码感到困惑. 解决方案 反之亦然.您可以使用extern C使用C ++编译器添加要编译为C代码的代码. 除非我缺少
..
我有要使用extern "C"声明的C ++函数,即使它们仅在C ++代码中调用.是的,我知道这很奇怪,但是我想这样做是为了保持一致性,因为我们混合使用了C和C ++声明.我只想确保将C ++函数声明为extern "C"不会影响抛出的行为. 它看起来像这样: extern "C" void foo() {throw exception;} int bar() { try
..
我有一个C库,该库使用函数指针的结构进行回调.回调将从C代码中调用. extern "C" { typedef struct callbacks_t { void (*foo) (const char*); int (*bar) (int); } callbacks_t; }// extern C 我可以安全将哪些类型的C ++函数放在要从C库中调用的那些函数指针中
..
我正在编写一个供C程序使用的C ++共享库.但是,我对extern和extern "C"有疑问. 考虑以下代码 我的头文件是这样的: #ifdef __cplusplus extern "C" int global; extern "C" int addnumbers(int a, int b); #else extern int
..
将extern "C"放入C ++代码中究竟能做什么? 例如: extern "C" { void foo(); } 解决方案 外部"C"使C ++中的函数名称具有'C'链接(编译器不会更改名称),以便客户端C代码可以链接到(即使用)您的函数,使用仅包含函数声明的"C"兼容头文件.您的函数定义包含在二进制格式(由C ++编译器编译)中,客户端'C'链接程序随后将使用'C'名
..
我在C ++代码中使用 Lapack 。我很困惑如何正确链接到图书馆。这是一个与我的代码调用Lapack函数相对应的小例子: #include namespace lapack {extern“C”{ void ilaver(int * major,int * minor,int * patch); }} int main() { int maj
..
为需要定义为C函数的函数,为什么不应该指定 extern“C”?如果对C编译器没有影响,那么对编译器在编译C源文件时会产生什么影响? 在下面的头文件中删除 #ifdef __cplusplus 检查? extern“C”{ int MyFunc(); } 对另一个问题的回答说需要 #ifdef ,但我不明白为什么: 关于#2:将为通过C ++
..
静态成员函数和外部“C”链接函数之间有什么区别?例如,当在C ++中使用“makecontext”时,我需要传递一个指向函数的指针。谷歌建议使用extern“C”链接,因为“makecontext”是C.但我发现使用静态工作以及。我只是幸运或... class X { public: static void proxy i){} } makecontext(...,(void(*
..
为什么我们需要使用: extern“C”{ #include
..
我已经看到了使用的extern“C”的函数签名中声明,也同时包括C头成CPP文件C / C ++ code。 但有些功能只是他们的签名之前声明的extern(不带“C”)。 QN1: 是定义的函数,这些方法都具有同样的效果还是他们意味着不同的事情呢? 对不起,如果我很愚蠢,但我没能找到通过谷歌这种差异。 例如: 的extern INT someFunction(void *的RET_V
..