Почему я получаю ошибки, когда пытаюсь выполнить макрос, определенный компилятором, используя прагматическое сообщение? - PullRequest
0 голосов
/ 17 марта 2010

Я хотел бы знать, почему компилятор Visual C ++ выдает мне предупреждение / ошибку, если я использую следующий код:

#pragma message( "You have " _MSC_FULL_VER )

Вот что я получаю:

error C2220: warning treated as error - no 'object' file generated
warning C4081: expected ':'; found ')'

Проблема воспроизводится для _MSC_FULL_VER или _MSV_VER, но нет, если я пытаюсь использовать другие, такие как __FILE__ или __DATE__.

Эти макросы определены, они задокументированы в msdn

1 Ответ

3 голосов
/ 17 марта 2010

Я думаю, #pragma message нужны только строки C. IIRC, _MSC_FULL_VER - это число, а __FILE__ и __DATE__ - строки C. Попробуйте это

// BEWARE! Untested macro hackery ahead!
#define STRINGIFY( L )       #L
#define MAKESTRING( M, L )   M(L)
#define STRINGIZE(X)         MAKESTRING( STRINGIFY, X )
#pragma message( "You have " STRINGIZE(_MSC_FULL_VER) )

(На примечании стороны это позволяет

#define SHOWORIGIN            __FILE__ "(" STRINGIZE(__LINE__) "): "
#pragma message( SHOWORIGIN "your message here" )

, который позволяет дважды щелкнуть сообщение в области вывода VS и перейти к его файлу / строке.)

...