Почему Borland компилирует с несколькими определениями одного и того же объекта в разных файлах C, а GCC - нет?
Я изучаю поведение глобальных переменных.
До сих пор я думал, что множественное определение глобальных переменных является недопустимым способом и должно получить ошибку. Но я получил неожиданный результат от компилятора Borland C / C ++, в то время как GCC дал мне ожидаемый результат.
Код:test1.c
:
#include<stdio.h>
void func(void);
int num=1;
void main(){
func();
return;
}
test2.c
:
#include<stdio.h>
int num=2;
void func(){
printf("%d",num);
return;
}
На MS-DOS подскажитеBorland C / C ++:
c:\test>bcc32 test1.c test2.c
GCC:
c:\test>gcc test1.c test2.c
РезультатыBorland C / C ++:Там нет ошибки и компиляции и ссылки успешно (это неожиданно для меня). После выполненияtest1.exe
2 было напечатано на консоли. Этоnum
значение, определенное вtest2.c
.
GCC дал мне ошибку множественного определенияnum
, Конечно ,a.exe
не было сделано. (Это то, что я ожидал)
Почему это происходит? Пожалуйста, дайте мне знать. Спасибо!