【发布时间】:2016-08-25 15:12:33
【问题描述】:
我已阅读 C99 标准 6.9.3 中的以下规则
对于在翻译单元中使用内部链接声明的每个标识符,不应有多个外部定义。此外,如果在表达式中使用了用内部链接声明的标识符(而不是作为结果为整数常量的 sizeof 运算符的操作数的一部分),则翻译单元中的标识符应该只有一个外部定义。
我的问题:
(1) 究竟什么是外部定义?
(2)为什么下面的代码没有违反这条规则?
static int a = 1;
int main()
{
a += 1;
return 0;
}
【问题讨论】:
-
注意:C 标准自 ca. 5 年是 C11,而不是 C99。除非您必须维护一些旧代码,否则您应该使用当前(也是唯一的)标准。关于你的问题:任何一本好的 C 书都会回答这个问题。你试图找出自己的什么?你为什么认为/你有哪些论点是否违反了规则?您是否阅读了
static存储类说明符 的含义?没有显示外部定义,main除外。 -
@Olaf 如果您实际上已经阅读了这两个标准,那么对于这个问题,它们在同一部分中具有相同的词。那么为什么要麻烦它是C99或C11呢? “除了 main 之外,没有显示外部定义。”如果您认真阅读,这正是我的问题。
-
@Olaf 关于我自己为找出答案所做的工作。我不太明白外部定义和外部链接之间的区别,我用谷歌搜索了这个术语,没有任何有用的结果。我实际上已经阅读了一些不错的 C 书籍。我只是不明白标准中使用的术语和语言。满意吗?
-
@Olaf 您的评论充满敌意、无关紧要和错误。你斥责某人在这里发帖而不是读书,但随后表明你对这个话题缺乏了解。 (
static int a = 1;是外部定义)。你现在看起来很傻。以后请客气点,考虑一下你的评论是否真的有用。