- 声明变量和函数 #C
只声明,不定义,不分配内存空间
变量/函数定义在其他文件中(非头文件) - extern “C”
让编译器以 C 语言的命名规则来查找函数
C++支持函数重载,编译器会将函数参数类型添加到编译代码中,而C不支持函数重载,编译后仅包含函数名 - 疑问
- extern 和 static 可以同时修饰一个变量吗?
extern和static是一对矛盾的修饰符, 二者不能同时修饰一个变量, 因为static表明变量的链接性是内部的, 而extern恰好相反. - 当函数提供方单方面修改函数原型时, 使用方却没有修改, 这时候编译会怎么样? 链接时会怎么样? 如何解决?
在编译时, 由于 extern 说明该函数是在别处定义的, 所以编译器不会报错. 但是在链接时, 由于找不到对应的链接对应, 所以无法链接.
目前业界针对这种情况的处理没有一个很完美的方案, 通常的做法是人提供方自己在xxx_pub.h中提供对外部接口的声明, 然后调用方直接include该文件, 从而省去extern这一步, 以避免这种错误. - 一个源文件定义了char a[6], 在另一个文件使用extern char *a进行声明, 可以吗?
不可以, 因为指向类型 T 的指针并不等价与类型 T 数组, 提示我们声明和定义要严格一样的格式. - 如何令 const 对象可以在多个文件中共享
默认情况下, const 对象仅在本文件内有效, 我们可以通过 extern 关键字来使得 const 对象在多个文件中共享.
第2种:在头文件中定义const对象,源文件使用时include
- extern 和 static 可以同时修饰一个变量吗?