【发布时间】:2016-07-19 19:06:28
【问题描述】:
所以我有这个sn-p的代码
wchar_t funcName[] = __FUNCTIONW__;
但是__FUNCTIONW__ 的问题是它的名称中包含类信息,而我想要的只是函数名称。 Now__FUNCTIONW__ 只是调用 _CRT_WIDE(__FUNCTION__) 这让我觉得我可以调用 _CRT_WIDE(__func__) 但这会给出错误“标识符 L__func__ 未定义”
__func__ 是一个隐式声明的标识符,当它在函数内部使用时,它会扩展为包含函数名称的字符数组变量。它在 C99 中被添加到 C 中。来自C99 §6.4.2.2/1:
标识符
__func__由翻译器隐式声明,就好像紧跟在每个函数定义的左大括号之后,声明static const char __func__[] = "function-name";出现,其中 function-name 是词法封闭函数的名称。此名称是函数的朴素名称。
我认为这意味着 __func_ 不是宏,它与预处理无关?
还有其他方法可以在编译时获取 wchar_t 数组吗?
【问题讨论】:
-
正确,
__func__不是宏,所以在它前面加上一个L,因为_CRT_WIDE宏确实会导致错误。 -
出于同样的原因,您不能进行字符串连接 à la
"Hello, my name is " __func__ "."...
标签: c++ visual-c++