我希望我的异常消息包含有关异常位置的信息。
所以我想要一些类似的东西。
#define LOCATION __FILE__ " : " __LINE__
throw std::exception(std::string("ABCD. ") + LOCATION);
这个定义显然是不正确的。如何做到这一点?
我希望我的异常消息包含有关异常位置的信息。
所以我想要一些类似的东西。
#define LOCATION __FILE__ " : " __LINE__
throw std::exception(std::string("ABCD. ") + LOCATION);
这个定义显然是不正确的。如何做到这一点?
您需要将该宏扩展为两个级别:
#define S1(x) #x
#define S2(x) S1(x)
#define LOCATION __FILE__ " : " S2(__LINE__)
原因如下:
在将__LINE__
其传递给#x
.
首先,#
在类函数宏中使用运算符,它必须后跟一个宏参数但__LINE__
不是参数,因此编译器抱怨它是一个流浪运算符。
另一方面,__LINE__
它本身是一个宏并且包含当前行号,在使用它之前应该将它扩展为数字#
,否则你将得到字符串"__LINE__"
而不是数字。
宏S2(__LINE__)
扩展__LINE__
为行号,然后我们将行号传递给#x
.