Играех си с extern
ключова дума в C, когато срещнах това странно поведение. Имам два файла:
file1.c
#include<stdio.h>
int main()
{
extern int a;
a=10;
printf("%d",a);
return 0;
}
file2.c
const int a=100;
Когато компилирам тези файлове заедно, няма грешка или предупреждение и когато ги стартирам, резултатът става 10
. Очаквах, че компилаторът трябва да докладва грешка на ред a=10;
.
Освен това, ако променя съдържанието на file2.c на
const int a;
тоест, ако премахна инициализацията на глобалната константна променлива a
и след това компилирам файловете, все още няма грешка или предупреждение, но когато ги стартирам, се появява Segmentation Fault.
Защо се случва това явление? Класифицирано ли е като недефинирано поведение? Това зависи ли от компилатора или машината?
PS: Виждал съм много въпроси, свързани с този, но или са за C++, или обсъждат само extern
.