Czy istnieje sposób na użycie makr do wymuszania ostrzeżeń i błędów podczas kompilowania?#warning i #error jako makro
Obecnie mam coś takiego:
#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 będzie traktować te makra jako ostrzeżeń/błędów i ten przykład nie będzie skompilować. Czy istnieje odpowiednik GCC i 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
Przeczytaj dokumentację, człowiek. –
Naprawdę żałuję, że ludzie nie używają plików #pragma todo itp. Zajmują się kompilacją i nigdy nie są naprawieni – paulm