有沒有辦法讓宏在編譯時強制警告和錯誤?#警告和#錯誤作爲宏
我現在有這樣的事情:
#if defined(__clang__)
# define PRAGMA(x) _Pragma(#x)
#elif defined(__GNUC__)
# define PRAGMA(x) _Pragma(#x)
#elif defined(_MSC_VER)
# define PRAGMA(x) __pragma(x)
#endif
#define STRINGISIZE(str) #str
#define STR(str) STRINGISIZE(str)
#define LINE STR(__LINE__)
#define FILE __FILE__
#define FILE_LINE __FILE__ "(" LINE ")"
#define INFO(info , msg) \
PRAGMA(message(FILE_LINE ": " #info ": " msg))
#define MESSAGE(m) INFO(msg , m)
#define WARNING(w) INFO(warning , w)
#define ERROR(e) INFO(error , e)
#define TODO(t) INFO(TODO , t)
int main()
{
MESSAGE("MSG")
TODO("TODO")
WARNING("WARN")
ERROR("ERROR")
}
的Visual Studio 2013將會把這些宏的警告/錯誤,這個例子不會編譯。 GCC和Clang是否有相應的版本?
#if defined(_MSC_VER)
#define INFO(info , msg) \
PRAGMA(message(FILE_LINE ": " #info ": " msg))
#define MESSAGE(m) INFO(info , m)
#define WARNING(w) INFO(warning , w)
#define ERROR(e) INFO(error , e)
#define TODO(t) INFO(todo t)
#elif defined(__GNUC__) || defined(__clang__)
#define INFO(info , msg) \
PRAGMA(#info " : " #msg))
#define MESSAGE(m) INFO(info , m)
#define WARNING(w) INFO(GCC warning , w)
#define ERROR(e) INFO(GCC error , e)
#define TODO(t) INFO(, "todo" t)
#endif
閱讀文檔,man。 –
我真的希望人們不會使用#pragma todo's等他們混亂編譯輸出,永遠不會得到修復 – paulm