वहाँ जबकि संकलन चेतावनी और त्रुटियों के लिए मजबूर करने मैक्रो के लिए एक रास्ता है?#warning और #Error के रूप में मैक्रो
#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")
}
विजुअल स्टूडियो 2013 के रूप में चेतावनी/त्रुटियों इन मैक्रो व्यवहार करेगा और इस उदाहरण संकलन नहीं होगा:
मैं वर्तमान में कुछ इस तरह की है। क्या जीसीसी और क्लैंग के बराबर है?
#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
प्रलेखन, आदमी पढ़ें। –
मैं वास्तव में चाहता हूं कि लोग #pragma todo के आदि का उपयोग नहीं करेंगे। वे बिल्ड आउटपुट को अव्यवस्थित करते हैं और कभी भी – paulm