为什么extern int a;初始化在本地给出错误但不是全局?

时间:2017-01-05 10:55:58

标签: c

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;

1 个答案:

答案 0 :(得分:1)

参考C11(N1570)6.7.9 / 5 初始化

  

如果标识符的声明具有块范围,则   标识符有外部或内部链接,声明应该   标识符没有初始化程序

规则放在约束部分,因此任何符合规范的编译器都应该拒绝违反它的代码。

块范围内extern关键字的要点是从外部范围声明某些现有对象。声明一个对象并在声明时给它一些其他值没有多大意义。

声明外部对象的推荐方法是将其声明放在文件范围内(位于源代码的顶部),因此维护程序员很容易发现和管理它们。