将处理器宏 __FUNCTION__ 与字符串连接起来
Concatenating proprocessor macro __FUNCTION__ with a string
这应该是微不足道的,但我似乎无法弄清楚如何将 __FUNCTION__
与字符串连接起来,尤其是在 GCC 上——尽管它适用于 VC++(我正在将一些代码移植到Linux)
#include <iostream>
#include <string>
#define KLASS_NAME "Global"
int main()
{
std::string msg = KLASS_NAME "::" __FUNCTION__;
std::cout << msg << std::endl;
}
GCC 错误信息
Test.cpp:9:36: error: expected ‘,’ or ‘;’ before ‘__FUNCTION__’
std::string msg = KLASS_NAME "::" __FUNCTION__;
更新
感谢克里斯,显然相邻的字符串文字被连接起来 [reference]。所以 VC++ 在这种情况下可能是正确的,直到你认为 __FUNCTION__
是非标准的。
您需要一个连接运算符并显式构造字符串,以便找到正确的连接运算符:
#include <iostream>
#include <string>
#define KLASS_NAME "Global"
int main()
{
std::string msg = std::string(KLASS_NAME) + "::" + __FUNCTION__;
std::cout << msg << std::endl;
}
这应该是微不足道的,但我似乎无法弄清楚如何将 __FUNCTION__
与字符串连接起来,尤其是在 GCC 上——尽管它适用于 VC++(我正在将一些代码移植到Linux)
#include <iostream>
#include <string>
#define KLASS_NAME "Global"
int main()
{
std::string msg = KLASS_NAME "::" __FUNCTION__;
std::cout << msg << std::endl;
}
GCC 错误信息
Test.cpp:9:36: error: expected ‘,’ or ‘;’ before ‘__FUNCTION__’
std::string msg = KLASS_NAME "::" __FUNCTION__;
更新
感谢克里斯,显然相邻的字符串文字被连接起来 [reference]。所以 VC++ 在这种情况下可能是正确的,直到你认为 __FUNCTION__
是非标准的。
您需要一个连接运算符并显式构造字符串,以便找到正确的连接运算符:
#include <iostream>
#include <string>
#define KLASS_NAME "Global"
int main()
{
std::string msg = std::string(KLASS_NAME) + "::" + __FUNCTION__;
std::cout << msg << std::endl;
}