【咨询】extern 变量

在之前的学习中了解到 extern 就是开放给全项目使用的变量,但是现在我产生了数个疑问

  1. 应该在头文件中声明并定义 extern 还是说只在头文件中声明,然后到对应的源代码模块中实现?
  2. 如果 extern 重名会怎么样?

复习 《C程序设计语言的时候》没有太搞明白

不一定很准确的回答你的问题,提几个我常遇到的场景或用法:

  1. 自己写模块给别人用,把公开的函数在 .h 中定义,在 .c 中实现,编译成静态库或动态库后,.h 提供给别人 include。这种场景,.h 中的函数不用加 extern。对于全局变量,如果你的模块只会被 include 一次,可以在 .h 中定义无需 extern,如果会被 include 多次,那应该把全局变量定位在 .c 中,.h 中只提供 extern。
  2. 自己用别人提供的模块,有时候不想 include 该模块的完整 .h,但想调用该模块的部分函数或变量,可以在自己的调用代码前通过 extern 引用它们,即可通过编译。
1 个赞

符号重名link是通不过的

1 个赞