我正在尝试创建 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
宏,但编译器会这样看待它。g++ 是否隐式尝试将宏参数转换为字符串?size_t
char*
如何解决?我的意思是,我正在使用 gnu LOG_MAKEPRI 宏进行系统日志记录,是这个宏可能会造成麻烦吗?另外,有没有办法查看宏扩展的代码?