Cl flag W flag order

Я заметил забавное поведение с clang (я использую 3.6.0), и я не нашел никаких ссылок об этом в документации или где-либо еще. Вот небольшой пример:

int main(){
    int a;
    return 0;
}

Я скомпилирую его с clang++ -Wall -W -Werror -Wno-error=unused-variable main.cpp, и у меня есть ожидаемое предупреждение:

main.cpp:2:9: warning: unused variable 'a' [-Wunused-variable]
    int a;
1 warning generated.

Теперь попробуйте clang++ -Werror -Wno-error=unused-variable -Wall -W main.cpp

main.cpp:2:9: error: unused variable 'a' [-Werror,-Wunused-variable]
    int a;
1 error generated.

Я что-то пропустил? Ожидается? В этом случае gcc компилирует обе строки.

Ответы

Ответ 1

Вот что я ответил:

Я думаю, что лучшим заголовком будет то, что -Wno-error зависит от позиции в командной строке, а -Werror - нет. Важная часть заключается в том, является ли диагностика ошибкой или предупреждением. Пример:

int main() {
  int a;
  return 0;
}

$ clang main.cpp -Wunused-variable

Это дает предупреждение о неиспользуемой переменной.

$ clang main.cpp -Werror -Wunused-variable
$ clang main.cpp -Wunused-variable -Werror

Оба из них дают неиспользуемую переменную ошибку. -Werror не изменяется поведение, основанное на позиции.

$ clang main.cpp -Werror -Wno-error=unused-variable -Wunused-variable
$ clang main.cpp -Werror -Wunused-variable -Wno-error=unused-variable

Первая дает ошибку, а вторая дает предупреждение. Эта означает, что -Wno-error = * зависит от положения. (GCC выдает предупреждения для обеих этих строк.)

-Werror не взаимодействует или не зависит от предупреждений в командной строке. -Wno-error = предупреждение зависит от его относительного положения к -Wwarning.

С кем я в порядке. Это просто должно быть где-то написано (возможно, я пропустил это!)