использование #define в .pch - PullRequest
       11

использование #define в .pch

0 голосов
/ 06 апреля 2010

Если я определю что-то в предварительно скомпилированном заголовке, например:

#define __BUILD_MAC__

и затем в заголовочном файле:

#ifdef __BUILD_MAC__
    typedef void*   HINSTANCE;
#endif

Это должно работать. Но по какой-то причине это не так. Я знаю, потому что, когда я компилирую, я получаю ошибки о HINSTANCE не называя тип.

Нужно ли что-то еще делать, чтобы эти определения были доступны?

Ответы [ 2 ]

1 голос
/ 06 апреля 2010

Любые определения до того, как предварительно скомпилированный заголовок будет игнорироваться. Рассмотрите возможность определения через переключатель уровня компилятора или через:

Свойства конфигурации -> C / C ++ -> Препроцессор -> Определения препроцессора

Вы можете узнать больше на MSDN :

Когда вы используете предварительно скомпилированный заголовок, компилятор игнорирует весь препроцессор директивы (включая прагмы), которые появляются перед hdrstoppragma. указанная компиляция директивы препроцессора должны быть так же, как компиляция, использованная для создания файл скомпилированного заголовка.

Что касается предварительно скомпилированных заголовков GCC, то они отличаются:

Прекомпилированный заголовок не может быть использован как только первый токен C виден. Вы может иметь директивы препроцессора перед предварительно скомпилированным заголовком; вы можете даже включить предварительно скомпилированный заголовок из внутри другого заголовка, пока токенов С до #include.

0 голосов
/ 06 апреля 2010

Убедитесь, что __BUILD_MAC__ равно #define d в файле, который фактически используется для построения .pch, и до того, как последний заголовок будет включен в .pch.

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