Подтвердить что ты не робот

-Wextra, насколько это полезно?

В настоящий момент я читаю руководство gcc, особенно часть предупреждений/ошибок. После прочтения части о -Wextra flag, мне интересно, полезен ли он вообще. Кажется, что он жалуется на вещи, которые кажутся скорее субъективными или деликатными. Я не так разбираюсь в gcc, я время от времени использую его для небольших проектов в университете, поэтому для всех опытных C/С++ (или для любого языка, который вы используете gcc), что такое сделка с -Wextra?

4b9b3361

Ответ 1

-Wextra, среди других вещей подразумевает -Wtype-limits:

Предупреждать, если сравнение всегда верно или всегда ложно из-за ограниченного диапазона типа данных, но не предупреждать о постоянные выражения. Например, предупреждать, если неподписанная переменная по сравнению с нулем с '<' или ' > ='. Это предупреждение также включено в -Wextra.

Я считаю, что это действительно полезно.

Ответ 2

Я обычно добавляю -Wno-sign-compare и -Wno-unused-parameter для удаления шума.

Подразумеваемая -Wuninitialized (с опцией -O2) была очень полезной для меня, но добавление ее изначально на вашу базу кода может быть немного сложной задачей. Один из способов борьбы с этим - добавить два макроса (которые выглядят немного странно: знак равенства преднамерен):

#define ELIMINATE_GCC_WARNING = 0 // used to remove nuisance warnings
#define UNCHECKED_GCC_WARNING = 0 // not yet verified

Затем вы можете быстро устранить gcc-предупреждения и получить чистую компиляцию, используя, например:

int foo UNCHECKED_GCC_WARNING;

Затем в качестве необязательного шага вернитесь назад и проверьте эти дополнения и измените их один за другим до ELIMINATE_GCC_WARNING. Это может быть медленным. Но я был бы удивлен, если бы вы не обнаружили некоторые существующие ошибки.

Ответ 3

См. http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html.

Поэтому он не только полезен для сравнения "всегда верно" (-Wsign-compare), но и для выявления других проблем компиляции. Я нахожу это полезным часто.