0
宏擴展我試圖創建LOGDEBUG宏:內宏
#ifdef DEBUG
#define DEBUG_TEST 1
#else
#define DEBUG_TEST 0
#endif
#define LOGDEBUG(...) do { if (DEBUG_TEST) syslog(LOG_MAKEPRI(LOG_SYSLOG, LOG_DEBUG), __VA_ARGS__); } while (0)
...
size_t haystack_len = fminl(max_haystack_len, strlen(haystack_start));
LOGDEBUG(("haystack_len %ld\n", haystack_len));
我不使用#或##參數字符串化的爭論,然而G ++顯然試圖字符串化他們:
numexpr/interpreter.cpp:534:5: error: invalid conversion from ‘size_t {aka long unsigned int}’ to ‘const char*’ [-fpermissive]
請注意,haystack_len
是size_t
,我沒有將它轉換爲宏中的char*
,但編譯器認爲它是這樣的。 g ++是否會隱式地嘗試將宏參數轉換爲字符串?
如何解決這個問題?我的意思是,我正在使用gnu LOG_MAKEPRI宏進行syslogging,難道這個宏可能會造成麻煩嗎?另外,有沒有辦法看到宏擴展的代碼?
我想你在LOGDEBUG調用中有2個額外的括號。 (你只傳遞1個參數) – Jarod42