C++ C++;连接_文件_和_行_宏?

C++ C++;连接_文件_和_行_宏?,c++,C++,我希望我的异常消息包含有关异常位置的信息 所以我想要一些类似的东西 #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__) 在

我希望我的异常消息包含有关异常位置的信息

所以我想要一些类似的东西

#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__)
在将其传递给
#x
之前,需要将
uu行
展开为两个级别。首先,在像宏这样的函数中使用运算符
,它后面必须跟一个宏参数,但
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
不是参数,所以编译器抱怨它是一个错误的运算符。另一方面,
\uuuuuuuuuuuuuuuuuuuuuuu本身是一个宏,包含当前行号,在将其与
一起使用之前,应将其扩展为数字,否则,您将获得字符串
“\uuuuuuuuuuuuuuuuuu”


S2(\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu?提前谢谢!Boost会这样做,以防您不想创建自己的宏S1和S2。@sree:#定义位置std::string(PRETTY_FUNCTION)+“::”+std::string(FILE)+“:“+std::string(S2(LINE))@adiog当要为异常(即在函数中使用)请求字符串时,您的建议在此处出错:
char foo[]=LOCATION在文件范围和函数中。