4

我正在使用 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);

看起来像以二进制操作命名的函数(如与、非或或和 xor)在编译器中触发了错误行为。使用 Visual Studio 编译器没有显示错误,并且程序按预期工作。

我能做些什么来防止这种情况发生吗?或者这是 Clang 中的错误?将 NOLINT 添加到该行并没有帮助,因为它是引发错误的编译器......

您可以在这里测试案例:https ://rextester.com/TXU19618

谢谢 !

4

1 回答 1

5

and是 C++ 中的保留关键字,这意味着它不能用于函数名。这是标准的 C++ 行为,而不是错误。

https://en.cppreference.com/w/cpp/keyword

于 2020-02-20T10:40:21.740 回答