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