Проблема с пространствами расширения макроса Microsoft Compiler - PullRequest
0 голосов
/ 02 апреля 2011

У меня есть эта проблема в расширении макроса заголовка под препроцессором Microsoft C Compiler:

custom.h

.
.

# define _OTHER_INCLUDE_DIR C:\3rdparty\usr\include

# define _3RD_PARTY_HEADERS(headername) <_OTHER_INCLUDE_DIR\headername>
.
.

С проверкой заголовка:

headertest.h

.
.

#include _3RD_PARTY_HEADERS(stdint.h)
.

Microsoft препроцессор C развернуть вторую строку, как (custom.h):

#include  <C:\3rdparty\usr\include\headername>

Если я установлю:

# define _3RD_PARTY_HEADERS(headername) <_OTHER_INCLUDE_DIR\ headername>

Результат:

#include  <C:\3rdparty\usr\include\ stdint.h>

Как я могу это исправить?

Ответы [ 3 ]

1 голос
/ 02 апреля 2011

Похоже, вы хотите сопоставить каталог и имя заголовка.Вы используете ##, вот так:

# define _3RD_PARTY_HEADERS(headername) <_OTHER_INCLUDE_DIR\\##headername> 
0 голосов
/ 03 апреля 2011

Знаете, у большинства компиляторов есть аргумент командной строки для добавления к пути включения ... -I или / I, скорее всего, для Microsoft.Обычно никто не делает то, что вы делаете здесь, неважно, можете ли вы заставить это работать.

0 голосов
/ 02 апреля 2011

Нет ли способа, чтобы последовательности символов \ были представлены по-разному?Проблема в том, что это escape-символ для C и C ++.C99 явно заявляет

Если символы ', \, ", // или / * встречаются в последовательности между разделителями <и>, поведение не определено.

(есть похожая фраза для "..." includes.)

, и я предполагаю, что для C ++ должно быть что-то похожее. Поэтому, возможно, вы просто можете использовать /, и компилятор заменит их внутренне дляобратитесь к правильному файлу в вашей системе.

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