Продолжаем изучать файлы исходников и на этот раз рассмотрим файл "INTERN.h". Вот его содержимое:
Как можно увидеть структура файла почти полностью идентична файлу "EXTERN.h", и подробнее о принципе их работ можно прочитать в предыдущей статье. Мы же заострим внимание на ключевых различиях в объявляемых макросах. Их значения для каждого файла указаны в таблице (пример для linux):
Пояснение: пустые клетки обозначают, что макрос объявлен, но значения у него нет.
Особого внимания заслуживает макрос INIT(x), так как он отличается от остальных тем, что может принимать один параметр и производить следующий код:
с использованием "INTERN.h":
ну а с использованием "EXTERN.h" просто объявляется переменная, без инициализации:
#undef EXT #undef dEXT #undef EXTCONST #undef dEXTCONST # if (defined(WIN32) && defined(__MINGW32__)) || defined(__SYMBIAN32__) # ifdef __cplusplus # define EXT __declspec(dllexport) # define dEXT # define EXTCONST __declspec(dllexport) extern const # define dEXTCONST const # else # define EXT __declspec(dllexport) # define dEXT # define EXTCONST __declspec(dllexport) const # define dEXTCONST const # endif # else # ifdef __cplusplus # define EXT # define dEXT # define EXTCONST EXTERN_C const # define dEXTCONST const # else # define EXT # define dEXT # define EXTCONST const # define dEXTCONST const # endif # endif #undef INIT #define INIT(x) = x #define DOINIT
Как можно увидеть структура файла почти полностью идентична файлу "EXTERN.h", и подробнее о принципе их работ можно прочитать в предыдущей статье. Мы же заострим внимание на ключевых различиях в объявляемых макросах. Их значения для каждого файла указаны в таблице (пример для linux):
INTERN.h | EXTERN.h | |
---|---|---|
DOINIT | не задан | |
dEXT | ||
EXTCONST | const | extern const |
dEXTCONST | const | const |
EXT | extern | |
INIT(x) | = x |
Пояснение: пустые клетки обозначают, что макрос объявлен, но значения у него нет.
Особого внимания заслуживает макрос INIT(x), так как он отличается от остальных тем, что может принимать один параметр и производить следующий код:
с использованием "INTERN.h":
#include "INTERN.h" int a INIT(8); // int a = 8;
ну а с использованием "EXTERN.h" просто объявляется переменная, без инициализации:
#include "EXTERN.h" int a INIT(8); // int a;
Комментариев нет:
Отправить комментарий