принудительное предупреждение / ошибка - PullRequest
9 голосов
/ 22 июня 2011

Я хочу добавить предупреждение или ошибку в мой код.Я использую Visual Studio 2010.

Я использовал #error и #warning в XCode, но Visual Studio не знает эти директивы.

Ответы [ 7 ]

6 голосов
/ 28 сентября 2012

После некоторого поиска по различным статьям я наконец-то пришел к этому решению, которое работает в Visual Studio 2010:

#define STRINGIZE_HELPER(x) #x
#define STRINGIZE(x) STRINGIZE_HELPER(x)
#define __MESSAGE(text) __pragma( message(__FILE__ "(" STRINGIZE(__LINE__) ")" text) ) 
#define WARNING(text) __MESSAGE( " : Warning: " #text )
#define ERROR(text) __MESSAGE( " : Error: " #text )
#define MESSAGE(text) __MESSAGE( ": " #text )
#define TODO(text) WARNING( TODO: text )

, и вы можете использовать его как:

WARNING( This will be a compiler warning );
ERROR( This will be a compiler error );
MESSAGE( Well this is what I have to say about this code );
TODO( Still have to fix 3D rendering );

Обратите внимание,TODO () также генерирует предупреждение компилятора;если вы не хотите регистрировать свои TODO в качестве предупреждений, просто используйте вместо этого:

#define TODO(text) MESSAGE( TODO: text )

Если вы хотите отобразить имя функции внутри предупреждений / ошибок / TODO, используйте вместо этого:

#define WARNING(text) __MESSAGE( " : Warning: (" __FUNCTION__ "): " #text )
#define ERROR(text) __MESSAGE( " : Error: (" __FUNCTION__ "): " #text )
#define MESSAGE(text) __MESSAGE( ": (" __FUNCTION__ "): " #text )
#define TODO(text) __MESSAGE( " : Warning: TODO: (" __FUNCTION__ ") " #text )
5 голосов
/ 05 октября 2011

Это предложение немного запоздало, я знаю, но ...

Вы можете добиться того, чего хотите, с помощью следующего трюка:

// stringised version of line number (must be done in two steps)
#define STRINGISE(N) #N
#define EXPAND_THEN_STRINGISE(N) STRINGISE(N)
#define __LINE_STR__ EXPAND_THEN_STRINGISE(__LINE__)

// MSVC-suitable routines for formatting <#pragma message>
#define __LOC__ __FILE__ "(" __LINE_STR__ ")"
#define __OUTPUT_FORMAT__(type) __LOC__ " : " type " : "

// specific message types for <#pragma message>
#define __WARN__ __OUTPUT_FORMAT__("warning")
#define __ERR__ __OUTPUT_FORMAT__("error")
#define __MSG__ __OUTPUT_FORMAT__("programmer's message")
#define __TODO__ __OUTPUT_FORMAT__("to do")

Затем, чтобы сгенерировать сообщение, сделайте, например,:

#pragma message ( __MSG__ "my message" )

(от http://rhubbarb.wordpress.com/2009/04/08/user-compilation-messages-c-or-c/)

2 голосов
/ 22 июня 2011

ничего не нашел о предупреждающем сообщении, но MSVC создает ошибки компиляции, как xcode '#error message` согласно msdn page

0 голосов
/ 08 сентября 2016

Как у меня работает:

#define _message_ "Warning Msg: "
#pragma message(_message_"Need to do something")
0 голосов
/ 16 марта 2012

почему вы не используете

#warning WarningMessage

или может быть

#error ErrorMessage
0 голосов
/ 22 июня 2011

MSVC использует директивы

#pragma error( "message" )

и

#pragma warning( "message" )

, тогда как GCC не учитывает pragma s.

0 голосов
/ 22 июня 2011

Вы можете использовать #pragma warning ...

Обязательно для чтения

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