Concat用于预定义的宏

Concat for predefined macros

本文关键字:预定义 用于 Concat      更新时间:2023-10-16

我想从__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__))

实例