Почему я получаю ошибки, когда пытаюсь вывести макрос, определенный компилятором, с помощью прагматического сообщения?
-
20-09-2019 - |
Вопрос
Я хотел бы знать, почему компилятор 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 и перейти к его файлу/строке.)
Не связан с StackOverflow