extern
отмечает объявление переменной, которое определено позже. Определение, часть int num = 3;
, является тем, что фактически распределяет память для переменной и устанавливает ее значение (она также удваивается как объявление). C/C++ объявляются перед использованием, если вы этого не сделали extern int num;
, то num
не будет объявлен в том месте, в котором вы его используете. Разумеется, вы также можете отказаться от линии extern
и переместить определение num
до main()
.
Здесь есть две вещи. Во время компиляции num
должен быть объявлен в точке исходного файла перед любым использованием. Что касается того, когда он получает свое значение, это происходит во время загрузки программы.Все переменные в области файлов (вне любых функций), такие как num
, имеют выделенную память и их значения, если вызывается инициализация до main()
. Если им не дано значение в их определении, они могут содержать что угодно, поэтому не делайте никаких предположений о значении неинициализированных переменных. Вы также не можете делать какие-либо предположения о том порядке, в котором они инициализированы, поэтому не обращайтесь к другим переменным области видимости файла при инициализации такой переменной.
Если я удалю 'extern', в чем проблема? –
Вы когда-нибудь использовали 'extern' для использования переменной в нескольких файлах? Это работает одинаково, но в одном файле. – immibis
@SouravGhosh код не компилируется – Nemmy