这是文件“1.c”
#include <stdio.h>
char foo;
int bar(){
}
int main(){
printf("%d",foo);
return 0;
}
//--------------------------
这是文件'2.c'
void foo(){
}
编译器调用为gcc 1.c 2.c
以上是否给出了未定义的行为?我的猜测是,是的。否则几乎不可能进行优化。
同一实体的多个不同定义(类、模板、枚举、内联函数、静态成员函数等) [C++ 程序员应该了解哪些常见的未定义行为?
但据我所知,char foo
只产生一个弱符号,可以在链接时被void foo(){}覆盖。此外,如果我char foo
变成extern char foo
,那仍然是一个定义吗?