Concat 用于预定义的宏

Concat for predefined macros

我想从 __FILE____FUNCTION____LINE__ 预定义宏创建单个字符串。

#define LOG_LINE __FILE__ " " __FUNCTION__ " " __LINE__

这可能行不通,因为编译器 concat 不适用于整数,而 __LINE__ 是。
#define LOG_LINE __FILE__ __FUNCTION__
也不行,因为:
error: expected ';' before '__FUNCTION__'

如何实现 std::cout << LOG_LINE 这将扩展为例如main.cpp main 8

解决方法: #define LOG_LINE __FILE__ << " " << __FUNCTION__ 不满足我,因为有时我想将它用作字符串(带有 sstream 的大宏也不是有效的解决方案;)。

您可以使用以下内容:

#define LOG_LINE (std::string(__FILE__ " ") +  __FUNCTION__ + " " + std::to_string(__LINE__))

Live example