变量、函数声明与定义

来源:互联网 发布:厄舍府的倒塌 知乎 编辑:程序博客网 时间:2024/06/05 06:59


在看了C语言参考手册这本书之后,发现声明和定义是很深奥的。

extern int  i ;

extern void write(void)


首先说明下extern的作用:

基本上都是两个作用:

①:放在变量或函数之前,表示在这里只是一个声明,该变量或函数已经在别处定义了;

比如test.h   在该头文件中声明 

extern int i;

void write(void);


然后在test.cpp中包含test.h头文件

int i;      //声明全局变量

void write(void)

{

...........................................

}

这样任何包含test.h头文件的都可以使用全局变量 i 了,


②:extern "C"

与"C" 一起用,主要在C++代码中调用C编译的动态库,或者再C++代码中要以C风格编译C++方法:

如果C调用C++编译的动态库(没有添加extern "C"),在链接的时候会提示函数找不到,

为什么是这样呢?

原因:C++支持函数重载,在编译的时候会根据函数名和参数生成一个中间名字;但是在C中不会生成中间名字的;

例如C++代码中要调用ffmpeg的代码(ffmpeg是由C实现的),如果在调用时没有添加extern "C",编译的时候是正常的,

但是到链接时就会提示找不到函数名称,这是只要加上extern "C"就解决了该问题。


#ifdef __cplusplus

extern "C"

{

#endif

>>>>>>>>>>>>>>

>>>>>>>>>>>>>>

#ifdef __cplusplus

}

#endif



接下来介绍将声明和定义分开有什么好处:在项目中一般都是将声明放在.h文件;定义放在.cpp或.c文件,这样的好处不仅仅逻辑清晰,

同时对用户只暴露接口,实现部分很好的隐藏起来了。





0 0
原创粉丝点击