我想通过在其后使用std :: setw()将以下3个字符串连接起来以产生良好的调试输出。
__ FILENAME__,“:”和 LINE
#define __FILENAME__ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__)
#define AT __FILENAME__ ":" __LINE__
#ifdef DEBUG
#ifdef VERBOSE
#define printDebug(x) std::cout << AT << x << std::flush
#else
#define printDebug(x) std::cout << x << std::flush
#endif
#else
#define printDebug(x)
#endif
但是实际上我收到错误消息,说“;” “:”之前缺少该字段。有人有主意吗?
我实际上这样调用printDebug()函数:
printDebug("[SUCCESS] Receiving Message");
答案 0 :(得分:2)
您可以将字符串文字并置在一起。
":"
是字符串文字。
__LINE__
扩展为数字文字,而不是字符串1。
__FILENAME__
根本不会扩展为文字。它扩展为一个表达式。
有一种方法可以从__LINE__
中获取字符串文字,但是不能将__FILENAME__
用作字符串文字。
这里根本不需要使用文字连接。您可以简单地做到这一点:
#ifdef VERBOSE
#define printDebug(x) std::cout << __FILENAME__ << ":" << __LINE__ << x << std::flush