以下 C++ 代码可以使用 MSVC 正常编译,但不能使用 CLang 编译。
void Test()
{
auto str = __FUNCTION__ "." "Description";
}
为什么这仅适用于 MSVC?我怎样才能让这个对 clang 有用? (
.
和 Description
可以在两个编译器中附加而不会出现任何问题)
clang error: expected ';' at end of declaration
请注意,
"Test . Description"
不是一个解决方案,我想在宏中使用它并根据宏所使用的函数来创建静态字符串。
如果 clang 与
-E
一起运行,可以看出 __FUNCTION__
不是宏。在带有链接的answer的评论中也注意到了这一点。
# 1 "/app/example.cpp"
# 1 "<built-in>" 1
# 1 "<built-in>" 3
# 468 "<built-in>" 3
# 1 "<command line>" 1
# 1 "<built-in>" 2
# 1 "/app/example.cpp" 2
void Test()
{
auto str = __FUNCTION__ ".Description";
}
你可以做这样的
#include <string>
using namespace std::string_literals;
void Test() {
const auto str = __FUNCTION__ + ".Description"s;
}