Это preprocessor macro.
Если определено FILE1_G_
, то все происшествия vextern
заменяются на extern
. Если нет, то они удалены (заменены ничем)
Edit для уточнения на основе комментариев ниже:
Это означает, что он либо объявлен как extern
или нет; затрагивается только слово vextern
.
Что касается прецедента ... он позволяет файлу .c
определить вещи, помеченные vextern
, путем определения FILE1_G_
, прежде чем включать этот заголовок.
по умолчанию (FILE1_G_
не определено) означает, что .c
файл, который в настоящее время в том числе file1.h
не определяло FILE1_G_
и не является определяющим вещи, которые были помечены vextern
, но может использовать их, потому что они были объявлены в этот заголовок и определяется где-то еще.
Я не уверен, какой из них правильный. Другой ответ предполагает, что будет затронуто только слово vextern. Значит, это означает, что int a всегда будет определяться? – SSS
Он не будет определен. Он будет объявлен. (Когда вы пишете программу с некоторыми файлами, вам нужно определить переменную только один раз, но вы должны объявить ее в каждом файле, который ее использует.) – asaelr