Я прочитал существующие вопросы о внешней/внутренней связи здесь, на SO. Мой вопрос другой: что произойдет, если у меня есть несколько определений одной и той же переменной с внешней связью в разных единицах перевода в C
и C++
?
Например:
/*file1.c*/
typedef struct foo {
int a;
int b;
int c;
} foo;
foo xyz;
/*file2.c*/
typedef struct abc {
double x;
} foo;
foo xyz;
Используя Dev-С++ и как программу C, вышеуказанная программа компилирует и связывает отлично; тогда как он дает множественную ошибку переопределения, если она скомпилирована как программа на С++. Почему это должно работать под C и какая разница с С++? Это поведение undefined и зависит от компилятора? Как "плохо" это код и что мне делать, если я хочу его реорганизовать (я столкнулся с большим количеством старого кода, написанного так)?