为什么 Clang 不允许 "and" 作为函数名?
Why does Clang not allow "and" as function name?
我正在开发一个程序有一段时间了,使用 Visual Studio 2017。最近我安装了 Clang Power Tool 扩展以检查我的代码的质量。
我的部分程序包括模拟 cpu 的操作码。我在下面创建了一个精简示例。
以下示例运行良好:
class C{};
inline void andi(C& s);
int main()
{
std::cout << "Hello, world!\n";
}
这个没有:
class C{};
inline void and(C& s);
int main()
{
std::cout << "Hello, world!\n";
}
我在 Clang 3.8.0 上遇到了这些错误(我在我的程序中使用的是版本 9.0.1,错误是相似的):
source_file.cpp:9:18: error: expected ')'
inline void and(C& s);
^
source_file.cpp:9:16: note: to match this '('
inline void and(C& s);
^
source_file.cpp:9:13: error: cannot form a reference to 'void'
inline void and(C& s);
^
source_file.cpp:9:1: error: 'inline' can only appear on functions
inline void and(C& s);
看起来以二元运算(如 and、not、or 和 xor)命名的函数会在编译器中触发错误行为。
使用 Visual Studio 编译器未显示任何错误,程序按预期工作。
我能做些什么来防止这种情况发生吗?或者这是 Clang 中的错误?
将 NOLINT 添加到该行没有帮助,因为它是引发错误的编译器 ...
你可以在这里测试案例:https://rextester.com/TXU19618
谢谢!
and
是 C++ 中的保留关键字,这意味着它不能用于函数名。这是标准的 C++ 行为,不是错误。
我正在开发一个程序有一段时间了,使用 Visual Studio 2017。最近我安装了 Clang Power Tool 扩展以检查我的代码的质量。 我的部分程序包括模拟 cpu 的操作码。我在下面创建了一个精简示例。
以下示例运行良好:
class C{};
inline void andi(C& s);
int main()
{
std::cout << "Hello, world!\n";
}
这个没有:
class C{};
inline void and(C& s);
int main()
{
std::cout << "Hello, world!\n";
}
我在 Clang 3.8.0 上遇到了这些错误(我在我的程序中使用的是版本 9.0.1,错误是相似的):
source_file.cpp:9:18: error: expected ')'
inline void and(C& s);
^
source_file.cpp:9:16: note: to match this '('
inline void and(C& s);
^
source_file.cpp:9:13: error: cannot form a reference to 'void'
inline void and(C& s);
^
source_file.cpp:9:1: error: 'inline' can only appear on functions
inline void and(C& s);
看起来以二元运算(如 and、not、or 和 xor)命名的函数会在编译器中触发错误行为。 使用 Visual Studio 编译器未显示任何错误,程序按预期工作。
我能做些什么来防止这种情况发生吗?或者这是 Clang 中的错误? 将 NOLINT 添加到该行没有帮助,因为它是引发错误的编译器 ...
你可以在这里测试案例:https://rextester.com/TXU19618
谢谢!
and
是 C++ 中的保留关键字,这意味着它不能用于函数名。这是标准的 C++ 行为,不是错误。