#gcc #llvm #clang
#gcc #llvm #лязг
Вопрос:
В GCC, когда -Wall -Wextra
флаги включены, есть возможность отключить предупреждения, такие как следующие с помощью -Wno-ignored-qualifiers
:
warning: 'const' type qualifier on return type has no effect
Есть ли какой-либо способ добиться такого же поведения с LLVM / Clang? Я погуглил, но нашел только несколько страниц, связанных с исправлением, о том, как была добавлена эта функция сообщения об ошибках. Ничего о том, как это отключить.
Я использую LLVM amp; Clang версии 3.0 (сборка из исходных текстов SVN).
Примечание: Я собирался опубликовать это в SuperUser, но там нет ни одного вопроса о Clang, и тега LLVM тоже нет, так что это меня немного обескуражило. Если этот вопрос все равно должен быть там, не стесняйтесь переместить его.
[Редактировать]Кажется, опция распознается, когда я запускаю свой Makefile из терминала. Однако при запуске из Eclipse (Helios) он не распознается.
[Решение] Найдено. По-видимому, проблема заключалась в том, что Eclipse (под Ubuntu) запускается root. Почему это так, я понятия не имею, но эффект заключается в том, что переменная $ PATH содержит то, что было бы у root, вместо того, что было бы у пользователя, запускающего Eclipse. Таким образом, Eclipse использовала более старую общесистемную версию Clang (2.80). Добавление правильной переменной PATH в свойства проекта -> Сборка C / C -> Среда исправило это.
Комментарии:
1. Я думаю, что это подходящий сайт S. E. для такого типа вопросов.
Ответ №1:
Какую версию Clang вы используете? -Wno-ignored-qualifiers
работает для меня:
% clang -Wall -Wextra -c foo.c
foo.c:1:1: warning: 'const' type qualifier on return type has no effect
[-Wignored-qualifiers]
const int foo();
^~~~~
1 warning generated.
% clang -Wall -Wextra -Wno-ignored-qualifiers -c foo.c
%
В общем, вы можете посмотреть на .td
файлы, которые выполняют довольно приятную работу по сбору всех диагностических данных. (В документах Clang есть задача по автоматической генерации документации с помощью tblgen, но это еще не было сделано.)
В этом случае, например, вы видите в DiagnosticSemaKinds.td
:
def warn_qual_return_type : Warning<
"'%0' type qualifier%s1 on return type %plural{1:has|:have}1 no effect">,
InGroup<IgnoredQualifiers>, DefaultIgnore;
который показывает, в какой диагностической группе он находится ( IgnoredQualifiers
). Затем вы можете заглянуть в, DiagnosticGroups.td
чтобы увидеть, что IgnoredQualifiers
вызывается в командной строке:
def IgnoredQualifiers : DiagGroup<"ignored-qualifiers">;
Так -Wno-ignored-qualifiers
и есть. Clang пытается быть совместимым с GCC везде, где это возможно, поэтому использование имени GCC для чего-либо обычно, скорее всего, сработает.
Комментарии:
1. @николас-райли клэнг версии 3.0 (магистраль 127980). Только что заметил кое-что очень странное, в терминале опция работает, в Eclipse — нет.
2. Тогда звучит как ошибка в Eclipse.
3. Да, я искал, но ничего не могу найти об этом. Довольно раздражает, теперь мне приходится отключать -Wall, иначе я получаю около 120 предупреждений, и из-за этого я не вижу интересных ошибок. Ну что ж…
4. что касается ЗАДАЧИ, я над ней работаю 🙂 Первая часть завершена (улучшение диагностики), и я скоро начну работать над второй частью… Я делаю это в свободное время, так что вам, возможно, придется подождать месяц или два.
5. @Matthieu: Приятно знать. Удачи 🙂