Почему 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:

GCC дал мне ошибку множественного определенияnum, Конечно ,a.exe не было сделано. (Это то, что я ожидал)

Почему это происходит? Пожалуйста, дайте мне знать. Спасибо!

Ответы на вопрос(1)

Ваш ответ на вопрос