在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
——C++编译器完全兼容C语言的编译方式。(但是得有源代码) ——C++编译器会优先使用C++的编译方式进行编译 ——extern "C" 关键字能够强制C++编译器进行C方式的编译 学习目标:实现C语言与C++之间的互相调用 学习 extern "C" {} 关键字 学习 __cplusplus标准宏 实验一、通过C++调用C编译器编译出来的 .o 文件 (extern "C" 关键字使用) 1、创建文件:add.c int add(int a,int b) { return a+b; } 2、创建:add.h int add(int a,int b);//对函数进行声明 3、使用C编译进行add.c 进行编译 gcc -c add.c -o add.o 生成.o文件 nm add.o //add.o中的符号表信息 0000000000000000 T add
4、创建:main.cpp #include <stadio.h> #include "add.h" int main(int argc, char *argv[]) { printf("Begin...\n"); int c = 0; c = add(10,20) printf("c = %d\n",c); printf("End...\n"); return 0; } 5、编译:g++ main.cpp add.o 输出错误信息:
/tmp/cc6HoeKB.o: In function `main': main.cpp:(.text+0x2d): undefined reference to `add(int, int)' collect2: error: ld returned 1 exit status 从上面错误可以看出 add 这个函数是没有定义的。 6、修改main.cpp 使用关键字 extern "C" {需要编译器进行C方式编译的部分} #include <stadio.h> extern "C" { #include "add.h" } int main(int argc, char *argv[]) { printf("Begin...\n"); int c = 0; c = add(10,20) printf("c = %d\n",c); printf("End...\n"); return 0; }
编译:g++ main.cpp add.o Begin... c = 30 End...
实验2 _Cplusplus关键字使用,__cplusplus关键字 是C++编译器内置的标准宏定义 确保C代码能够以统一的方式被编译成目标文件。 #include <stdio.h> #ifdef __cplusplus //如果 __cplusplus被定义 ,__cplusplus只有C++中才有 成立则表示为C++编译器 //使用__cplusplus来判定是否需要将 extern "C"{}加入到编译中来。实现同一段代可以使用C、C++编译器编译 extern "C" { #endif #include "add.h" #ifdef __cplusplus } #endif int main(int argc, char *argv[]) { printf("Begin...\n"); int c = 0; c = add(10,20); printf("c = %d\n",c); printf("End...\n"); return 0; } 注意:C++编译器不能以C的方式来编译重载函数。 编译方式决定函数名被编译后的目标名(C 目标名.o C++ .oo) C++编译方式将 函数名 参数列表 编译成 目标名 C编译方式只将 函数名 作为目标 (所以对应上了C++编译器不能以C的方式来编译重载函数。这句话)
实验三、使用C来调用C++编译的目标文件(.oo) 1、创建add.cpp #include "add.h" int add(int a,int b) { return a+b; } 2、创建add.h头文件 #ifdef __cplusplus//如果是C++编译器 extern "C"{//下面部分使用C语言的编译方式进行编译 #endif int add(int a,int b); #ifdef __cplusplus } #endif 3、编译add.cpp 目标文件 g++ -c add.c -o add.oo 4、创建main.c #include <stdio.h> #include "add.h" int main(int argc, char *argv[]) { int c = 0; printf("Begin...\n"); c = add(10,20); printf("c = %d\n",c); printf("End...\n"); return 0; } 5、编译C程序生成.out 文件 gcc main.c add.oo 6、运行结果: Begin... c = 30 End... 小结: 使用C语言来调用C++关键还是在 extern "C" {} 关键字。强制C++编译器使用C语言的方式来编译{}内的代码。 只有C++编译出来的文件支持C语言调用才行。 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论