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

121
10

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


#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

спросил(а) 2010-03-17T22:38:00+03:00 10 лет, 7 месяцев назад
1
Решение
81

Я думаю, что #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 и перейти к его файлу/строке.)

ответил(а) 2010-03-17T23:03:00+03:00 10 лет, 7 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема