电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

C与C++函数的头文件兼容宏定义

C与C++函数的头文件兼容宏定义_第1页
1/6
C与C++函数的头文件兼容宏定义_第2页
2/6
C与C++函数的头文件兼容宏定义_第3页
3/6
关于“#ifdef __cplusplus” 和 " extern "C" " 看一些程序的时候老是有 “#ifdef __cplusplus extern "C" { #endif”的定义,搞搞清楚是怎么回事: Microsoft-Specific Predefined Macros __cplusplus Defined for C++ programs only. 意思是说,如果是 C++程序,就使用 extern "C"{ 而这个东东,是指在下面的函数不使用的 C++的名字修饰,而是用 C的 The following code shows a header file which can be used by C and C++ client applications: // MyCFuncs.h #ifdef __cplusplus extern "C" { //only need to export C interface if // used by C++ source code #endif __declspec( dllimport ) void MyCFunc(); __declspec( dllimport ) void AnotherCFunc(); #ifdef __cplusplus } #endif 当我们想从 C++中调用 C的库时,(注,驱动是用 C写的,连 new、delete也不能用,郁闷)不能仅仅说明 一个外部函数,因为调用 C函数的编译代码和调用C++函数的编译代码是不同的。如果你仅说明一个外部函数, C++编译器假定它是 C++的函数编译成功了,但当你连接时会发现很可爱的错误。 解决的方法就是指定它为 C函数: extern "c" 函数描述 指定一群函数的话: extern "C"{ n 个函数描述 } 如果想 C和 C++混用的话: #ifdef _cplusplus extern "C"{ #endif n 个函数描述 #ifdef _cplusplus } #endif extern "C"表示编译生成的内部符号名使用C约定。 C++支持函数重载,而C不支持,两者的编译规则也不一样。函数被C++编译后在符号库中的名字与C语言的不同。例如,假设某个函数的原型为: void foo( int x, int y ); 该函数被C编译器编译后在符号库中的名字可能为_foo,而C++编译器则会产生像_foo_int_int之类的名字(不同的编译器可能生成的名字不同,但是都采用了相同的机制,生成的新名字称为“mangled name”)。_foo_int_int这样的名字包含了函数名、函数参数数量及类型信息,C++就是靠这种机制来实现函数重载的。下面以例子说明,如何在C++中使用C的函数, 或者在C中使用C++的函数。 //C++引用C函数的例子 //test.c #include void mytest() { printf("mytest in .c file ok\n"); } //main.cpp extern "C" { void mytest(); } int main() { mytest(); return 0; } //在C中...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

C与C++函数的头文件兼容宏定义

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部