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

StackOverflow https://stackoverflow.com/questions/2465298

Вопрос

Я хотел бы знать, почему компилятор 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

Это было полезно?

Решение

Я думаю #pragma message нужны только строки C.МИРК, _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 и перейти к его файлу/строке.)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top