Я играл с ключевым словом extern
в C, когда столкнулся с этим странным поведением. У меня есть два файла:
файл1.с
#include<stdio.h>
int main()
{
extern int a;
a=10;
printf("%d",a);
return 0;
}
файл2.с
const int a=100;
Когда я компилирую эти файлы вместе, ошибок или предупреждений нет, и когда я их запускаю, вывод становится 10
. Я ожидал, что компилятор сообщит об ошибке в строке a=10;
.
Более того, если я изменю содержимое файла file2.c на
const int a;
то есть, если я удалю инициализацию глобальной константной переменной a
, а затем скомпилирую файлы, ошибки или предупреждения по-прежнему не будет, но когда я их запускаю, возникает ошибка сегментации.
Почему происходит это явление? Классифицируется ли это как неопределенное поведение? Это зависит от компилятора или машины?
PS: я видел много вопросов, связанных с этим, но они либо для C++, либо обсуждают только extern
.