为什么extern int a; 初始化在本地给出错误但不是全局?
extern int a = 10; // it is not giving error int main () { extern int b = 10; //it is giving error return 0; }
错误:’b’同时具有’extern’和初始化程序extern int b = 10;
参考C11(N1570)6.7.9 / 5 初始化 :
如果标识符的声明具有块范围,并且标识符具有外部或内部链接,则声明不应具有标识符的初始化器 。
规则放在约束部分中,因此任何符合规范的编译器都应该拒绝违反它的代码。
块范围内的extern
关键字是从外部范围声明一些现有对象。 声明一个对象并在声明点给它一些其他值是没有多大意义的。
声明外部对象的推荐方法是将其声明放在文件范围(源代码的顶部),因此维护程序员很容易发现和管理它们。