Почему Clang не допускает "и" в качестве имени функции? - PullRequest
4 голосов
/ 20 февраля 2020

Я уже некоторое время занимаюсь разработкой программы с использованием Visual Studio 2017. В последнее время я установил расширение Clang Power Tool, чтобы проверить качество своего кода. Часть моей программы состоит в эмуляции операционных кодов процессора. Я создал урезанный пример ниже.

Следующий пример работает нормально:

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

Спасибо!

1 Ответ

5 голосов
/ 20 февраля 2020

and - зарезервированное ключевое слово в C ++, что означает, что его нельзя использовать для имени функции. Это стандартное поведение C ++, а не ошибка.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...