для чего используется vextern в этом коде? - PullRequest
0 голосов
/ 16 февраля 2012

У меня есть некоторый код на c, который использует vextern, как показано ниже, и хотел бы знать, какова цель этого:

file1.c:

#define FILE1_G_

file1.h:

#ifdef FILE1_G_
# define vextern
#else
# define vextern extern
#endif

Ответы [ 2 ]

5 голосов
/ 16 февраля 2012

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

2 голосов
/ 16 февраля 2012

Это макрос препроцессора .

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

Редактировать, чтобы уточнить, основываясь на комментариях ниже:

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...