使用字符串连接预处理器宏__FUNCTION__

时间:2017-03-30 11:14:36

标签: c++ c-preprocessor c++03

这应该是微不足道的,但我似乎无法弄清楚如何将__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;
}

Online VC++ version

GCC错误消息

Test.cpp:9:36: error: expected ‘,’ or ‘;’ before ‘__FUNCTION__’
  std::string msg = KLASS_NAME "::" __FUNCTION__;

更新

感谢Chris,显然相邻的字符串文字是连接的 [reference]。因此,在这种情况下VC ++可能是正确的,直到您认为__FUNCTION__是非标准的。

1 个答案:

答案 0 :(得分:2)

您需要一个连接运算符并显式构造字符串,以便找到右连接运算符:

#include <iostream>
#include <string>

#define KLASS_NAME  "Global"

int main()
{
    std::string msg = std::string(KLASS_NAME) + "::" + __FUNCTION__;
    std::cout << msg << std::endl;
}

实例:http://ideone.com/vn4yra