在我的.h文件中,我有
extern int a[4];
Run Code Online (Sandbox Code Playgroud)
在我的.c文件中
int a[10];
Run Code Online (Sandbox Code Playgroud)
这有什么问题吗?
声明和定义大小很重要?不对?
如果我写入sizeof(a)其中一个文件,那么输出是什么?这是未定义的行为吗?
如果在源文件中包含头文件,则两个声明a必须与C表示的类型相同:
(C11,6.7p4)"同一范围内涉及同一对象或功能的所有声明均应指定兼容类型."
即使两个声明都在两个翻译单元中,它们也需要具有相同的类型:
(C11,6.2.7p2)"所有引用相同对象或函数的声明都应具有兼容类型;否则,行为未定义."
看起来像这样:
extern int a[4];
int a[10];
int main()
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
gcc报告a的冲突类型:
cc -Wall -g -ggdb -pipe -pedantic -std=gnu99 test.c -o test
test.c:2:5: error: conflicting types for ‘a’
int a[10];
^
test.c:1:12: note: previous declaration of ‘a’ was here
extern int a[4];
^
Run Code Online (Sandbox Code Playgroud)