【发布时间】:2017-03-30 11:14:36
【问题描述】:
这应该是微不足道的,但我似乎无法弄清楚如何将 __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__;
更新
感谢 Chris,显然相邻的字符串文字是连接的 [reference]。所以VC++在这种情况下可能是正确的,直到你认为__FUNCTION__是非标准的。
【问题讨论】:
-
gcc 有什么错误?
-
值得注意的是,
__FUNCTION__不是标准的,__func__不是字符串文字。 -
使用字符串化操作符 '##' #define cocat(a,b) a##b
-
@AliAkberFaiz,这是连接运算符,需要生成有效的令牌。
-
如果
KLASS_NAME "::" __FUNCTION__无效,为什么VC++ 甚至接受它?我假设它不是。
标签: c++ c-preprocessor c++03