2012-02-15 3 views

ответ

5

Я предполагаю, что define используется для определения переменных только в одном файле, но объявляйте их во всех файлах, которые включают этот заголовок.

Если в file1.h, у вас есть vextern int a;, и включить этот файл в некоторых .c файлов, переменная a будет определяться только в файле, который имеет линию #define FILE1_G_. (В вашем примере file1.c)

+0

Я не уверен, какой из них правильный. Другой ответ предполагает, что будет затронуто только слово vextern. Значит, это означает, что int a всегда будет определяться? – SSS

+0

Он не будет определен. Он будет объявлен. (Когда вы пишете программу с некоторыми файлами, вам нужно определить переменную только один раз, но вы должны объявить ее в каждом файле, который ее использует.) – asaelr

2

Это preprocessor macro.

Если определено FILE1_G_, то все происшествия vextern заменяются на extern. Если нет, то они удалены (заменены ничем)

Edit для уточнения на основе комментариев ниже:

Это означает, что он либо объявлен как extern или нет; затрагивается только слово vextern.

Что касается прецедента ... он позволяет файлу .c определить вещи, помеченные vextern, путем определения FILE1_G_, прежде чем включать этот заголовок.

по умолчанию (FILE1_G_ не определено) означает, что .c файл, который в настоящее время в том числе file1.h не определяло FILE1_G_ и не является определяющим вещи, которые были помечены vextern, но может использовать их, потому что они были объявлены в этот заголовок и определяется где-то еще.

+0

Итак, в случае наличия файла .h: vextern void func (int Икс); Это будет в основном либо определяться как extern void func (int x); или void func (int x). В любом случае, поскольку по умолчанию это extern, это считало бы ненужным в этой ситуации правильно? Или это означает, что вся линия заменена ничем? – SSS

+0

Я очистил свой ответ и разместил его как отредактировать для моего ответа. –

Смежные вопросы