extern终于搞懂了:1同一个工程一个c文件函数调用另一个c文件函数 2 c调用c++函数
来源:互联网 发布:佳能相机镜头 知乎 编辑:程序博客网 时间:2024/05/19 11:48
1 #include头文件了,不就行了吗.如 c库函数??? why用extern呢.
如PowerSetDemo.cpp 调用powerSet1.cpp中的GetPowerSet,
有两种方法,方法1:#include powerSet1.h
方法2:extern void GetPowerSet. 不用#include powerSet1.h.这样就不会引入大量的无关函数.
这是在编译的时候。在link时候,在makefile中需要PowerSetDemo.o和powerSet1.o在一起
2
extern include引用函数的头文件。同时保证工程中,这个函数是唯一一个。工程中的其他文件,引用同一个工程中的这个文件的函数,用extern.
c库函数应该做了特殊处理。理论上讲 #include c 库函数,也应该extern。工程内保证唯一,变成的函数放到自己,h文件对应.o 中.谁调用谁都在这个.o中找.
当gcc assert.c b.c 将两个文件一起编译,这样两个文件看成一个工程。
这样在b.c中定义的a变成全局变量,在assert.c 中用extern 表示引用全局*.o中global a这个变量,哪个.o中有a的定义,用哪个。即在b.o中调用。gcc 编译后,a.out会从b.o,assert.o 中自动查找。不用user care。
njcgpc:felixzh/temp/ctest >> cat assert.c
#include <assert.h>
extern int a;
main ()
{
printf("line6:a=%d\n",a);
assert(a==1);
printf("line10:a=%d\n",a);
}
njcgpc:felixzh/temp/ctest >> cat b.c
int a=0;
njcgpc:felixzh/temp/ctest >> cat a.c
int a=1;
当gcc assert.c b.c a.c 将三个文件一起编译,这样三个文件看成一个工程。
这样在b.c中定义的a变成全局变量,同样也在a.c中定义的a变成全局变量。
这样造成整个工程的全局变量冲突错误.
njcgpc:felixzh/temp/ctest >127> gcc assert.c a.c b.c
/var/tmp//ccg3SW15.o:(.bss+0x0): multiple definition of `a'
/var/tmp//ccOJUg1q.o:(.data+0x0): first defined here
collect2: ld returned 1 exit status
3 cscdMtMgrProc.cc 在c++中定义,实现. 用extern告诉编译器这个用函数用c函数的方式编译,不用c++的方式 。如不用fun1_int_long.这样c函数可以调用
extern "C" bool isMtMother(void);
bool isMtMother(void)
{
return (CscdMtMgr::getInstance()->getMtMgrMode() == MT_MGR_MOTHER);
}
在extLfCmdProc.cc 中将调用这个函数
extern bool isMtChild(void);
if (isMtChild()){
......
}
- extern终于搞懂了:1同一个工程一个c文件函数调用另一个c文件函数 2 c调用c++函数
- 同一个C语言工程不同C文件之间的函数互相调用问题(一)
- 同一个C语言工程不同C文件之间的函数互相调用问题(二)
- 同一个C语言工程不同C文件之间的函数互相调用问题(三)
- C++调用C函数与Extern "C"
- C++调用C文件或者 C函数
- Expr.c:文件中的emit_call_insn()函数调用了gen_call()函数
- C++ 文件里面调用C文件里面的函数——extern "C" 用法解析
- extern C配合__cplusplus实现CPP文件和C文件的函数互相调用
- c++如何一个文件如何调用在同一个工程下的另一个文件的函数
- C语言extern调用外部函数
- c头文件和函数调用
- C++调用C文件函数简单应用
- C/C++文件中函数互相调用
- 在.c文件中调用cuda函数
- C/C++文件中函数互相调用
- c++调用c文件的函数
- 在.c文件中调用cuda函数
- 基于XMPP协议的手机多方多端即时通讯方案
- 每天学点java性能优化之字符串处理优化
- extern使用方法总结
- hdu2563——统计问题
- 3.struts架构剖析
- extern终于搞懂了:1同一个工程一个c文件函数调用另一个c文件函数 2 c调用c++函数
- openGl超级宝典学习笔记 (1)第一个三角形
- 各种音视频编解码学习详解
- js 实现的 打字效果(参考网络)
- RabbitMQ 菜鸟安装、RabbitMQ初接触 AMQP 安装、配置指南
- 使用java自带md5加密(转载)
- 6.28 周末 ATM 学生管理系统项目
- linux下c常用debug
- 强连通分量与双连通分量