【发布时间】:2016-02-29 22:05:15
【问题描述】:
test.h
#ifndef TEST_H
#define TEST_H
int i;
int i = 1; // why no redefinition error issued?
#endif /* TEST_H */
test.c
#include "test.h"
int main() {
int x;
int x = i; // obviously, a redefinition
return 0;
}
我真的很好奇头文件中未初始化的全局变量的行为。据我所知,两个“int i;”和 "int i = 1" 是 i 的有效定义,但在实践中,clang 和 gcc 都不会针对这种情况发出错误。谁能详细解释一下?
【问题讨论】:
-
int I;是声明和暂定定义,而不是“正常”定义. -
闻起来像未定义的行为。
-
这看起来像是一种描述而不是解释。如果我们删除尾随的“int i = 1;” i 的定义,每次对 i 的访问都可以看到由编译器自动分配的值 0。你能进一步详细解释一下吗?谢谢~
标签: c