我希望我的异常消息包含有关异常位置的信息.
所以我想有一些类似的东西.
#define LOCATION __FILE__ " : " __LINE__
throw std::exception(std::string("ABCD. ") + LOCATION);
Run Code Online (Sandbox Code Playgroud)
这个定义显然是不正确的.怎么做到这一点?
mas*_*oud 58
您需要在两个级别中扩展该宏:
#define S1(x) #x
#define S2(x) S1(x)
#define LOCATION __FILE__ " : " S2(__LINE__)
Run Code Online (Sandbox Code Playgroud)
为什么?
简短回答:__LINE__在传递之前,您需要扩展两个级别#x.
长答案:首先,#在类似函数的宏中使用运算符,它必须后跟一个宏参数但__LINE__不是参数,因此编译器会抱怨它是一个迷路运算符.
其次,__LINE__它本身是一个宏并包含当前行号,它应该在使用之前扩展到数字#,否则,你将得到字符串"__LINE__"而不是数字.
宏S2(__LINE__)扩展__LINE__为行号,然后我们将行号传递给#x.
| 归档时间: |
|
| 查看次数: |
11289 次 |
| 最近记录: |