После некоторого поиска по различным статьям я наконец-то пришел к этому решению, которое работает в 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 )