Gau*_*ier 26 c linker static extern
我想知道使用static关键字作为文件中变量的范围限制,用C.
我认为构建C程序的标准方法是:
static.static如果变量未在h文件中发布,我认为声明gobal的原因有两个:
extern.我认为链接器不喜欢变量是extern和static.(我不喜欢重新声明其他人拥有的变量的文件的想法,这extern是可以的做法吗?)还有其他原因吗?
也是一样的static功能.如果原型未在h文件中发布,其他文件可能无法使用该函数,那么为什么要定义它static呢?我可以看到同样的两个原因,但没有更多.
cra*_*cot 26
当您谈论通知其他读者时,请将编译器本身视为读者.如果声明了变量,则static可能会影响优化的启动程度.
重新定义static变量extern是不可能的,但编译器会(像往常一样)给你足够的绳索来挂起自己.
如果我static int foo;在一个文件和int foo;另一个文件中写入,它们被认为是不同的变量,尽管它们具有相同的名称和类型 - 编译器不会抱怨但是在稍后尝试读取和/或调试代码时可能会非常困惑.(如果我extern int foo;在第二种情况下写,那将无法链接,除非我在int foo;其他地方声明非静态.)
全局变量很少出现在头文件中,但是当它们出现时,应该声明它们extern.如果不是,根据您的编译器,您冒着包含该标头的每个源文件将声明其自己的变量副本的风险:最多这将导致链路故障(乘法定义的符号),最坏的情况是几个令人困惑的情况.
通过static在文件级别声明变量(static在函数内具有不同的含义),您禁止其他单元访问它,例如,如果您尝试在另一个单元内使用变量(声明为extern),链接器将找不到此符号.