Использование clang-tidy для проверки кода C ++ 17

Я установил clang-tidy в Ubuntu, используя:

sudo apt install clang-tidy

Я запустил его на простом C ++ 17 файле и получил предупреждение и ошибки:

/home/erelsgl/Dropbox/ariel/CPLUSPLUS/intro/01-single-file/ptr.cpp:17:3: warning: 'auto' type specifier is a C++11 extension [clang-diagnostic-c++11-extensions]
auto i = make_unique<int>();
^
/home/erelsgl/Dropbox/ariel/CPLUSPLUS/intro/01-single-file/ptr.cpp:17:12: error: use of undeclared identifier 'make_unique' [clang-diagnostic-error]
auto i = make_unique<int>();

Как я могу сказать clang-tidy проверить этот файл в соответствии со стандартами c ++ 17?

ПРИМЕЧАНИЕ. Для сборки программы я запускаю:

clang++-5.0 --std=c++17 ptr.cpp

0

Решение

В зависимости от версии вашего компилятора / clang-tidy стандартная версия C ++ по умолчанию, используемая для компиляции исходных файлов, может отличаться. Стандартной версией Clang по умолчанию является gnu++-98 (или же gnu++-14 начиная с clang 6.0), и обычно clang-tidy имеет те же значения по умолчанию, что и clang.

Я предполагаю, что -std=c++17 (или же -std=c++1z) не указывается в флагах компилятора C ++, используемых для компиляции ptr.cpp, поэтому clang-tidy возвращается к значениям по умолчанию -std=gnu++98и, следовательно, выдает предупреждения для кода C ++ 11.

Для запроса clang-tidy для обработки C ++ 17, вы должны указать -std помечать как предложено @ n.m., как параметр для -extra-arg вариант, например:

clang-tidy -p . ptr.cpp -extra-arg=-std=c++17

Редактировать:

поскольку clang++-5.0 используется для компиляции ptr.cpp, может быть хорошей идеей будет использовать соответствующую версию clang-tidy 5.0 (в Ubuntu 16.04 версия clang-tidy по умолчанию, установленная через apt — 3.8), то есть:

clang-tidy-5.0 -p . ptr.cpp -extra-arg=-std=c++17

Если он еще не установлен, вы можете получить его с:
https://www.ubuntuupdates.org/package/xorg-edgers/xenial/main/base/clang-tidy-5.0

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]