Это файл "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
, останется ли это определение?