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

Gcc: Использует -Werror и -pedantic считается хорошей практикой?

Я просто копаю в руководстве gcc, и некоторые вещи до сих пор не ясны:

  • При указании std, должен ли я всегда использовать -патентную связь?
  • При использовании -g это стандартный уровень, достаточный или я должен указать уровень 3, т.е. -g3?
  • Хорошо ли использовать -Werror для распространения всех предупреждений об ошибках и -антенциальных ошибках для продвижения всех предупреждений о педантах к ошибкам?
4b9b3361

Ответ 1

Если вы пишете библиотеку, сделать убедитесь, что простая программа, например

#include <yourlib.h>
int main() {
    return 0;
}

компилируется без каких-либо предупреждений даже в том случае, когда компилятор работает в самом педантичном режиме со всеми необязательными предупреждениями.

Если вы пишете приложение, ваш код, бросающий предупреждения влево и вправо, - это ваша проблема с вашим приложением. Однако с открытым файлом заголовка библиотеки все, кто позже использует эту библиотеку, будут вынуждены игнорировать или переносить предупреждения, вызываемые вашим кодом.

Поэтому, пожалуйста, проверьте, чтобы заголовки вашей библиотеки компилировались без предупреждений, если это возможно, в нескольких режимах компилятора:

$ gcc -Wall -Wextra -Werror -std=c99   -pedantic
$ gcc -Wall -Wextra -Werror -std=gnu99 -pedantic
$ gcc -Wall -Wextra -Werror -std=c89   -pedantic
$ gcc -Wall -Wextra -Werror -std=gnu89 -pedantic

Ответ 2

Все это вопросы мнения и/или зависят от вашей кодовой базы и практики программирования. Я всегда компилирую с -Wall и -pedantic, мне все равно, помечены ли вещи как ошибки или предупреждения, поэтому я никогда не использую -Werror, и я очень редко отлаживаю код с помощью отладчика - когда я это делаю, -g достаточно. Кто-то может придумать совершенно другой ответ.

Ответ 3

Все они очень субъективны. Вот мои мнения:

  • Использование -pedantic не должно быть связано с использованием -std=foo. Используйте -pedantic, если вам нужны сообщения о педантичных ошибках; если вы используете -pedantic, вам, вероятно, также захочется -Wall и -Wextra, так как ваша цель, как правило, ловить все возможные ошибки, независимо от того, насколько незначительна. Обратите внимание, что -pedantic не будет распознавать все возможные предупреждения, только предупреждения, которые стандарт ISO C требует диагностики для.

  • Я всегда находил уровень 2 (по умолчанию с -g), чтобы быть хорошим для моих целей. Уровень 3 также включает информацию обо всех макроопределениях в вашей программе, но это полезно только в том случае, если ваш отладчик поддерживает макрорасширения; у меня нет (GNU gdb 6.3.50-20050815 (версия для Apple gdb-696)). Я не знаю, что еще третий уровень включает в себя тот уровень 2 не делает.

  • Это зависит. Если ваша цель - сделать самый портативный, самый соответствующий стандартам код, то да, я бы очень рекомендовал всегда использовать -Werror и -pedantic-error (наряду с -Wall и -Wextra), особенно при запуске новых проектов, Однако, если вы начинаете с большой базы кода, включение этих параметров, скорее всего, даст вам массу безобидных ложных ошибок, особенно для таких вещей, как несоответствие подписанных/неподписанных и неявных преобразований между различными типами. Вам понадобится очень много времени, чтобы исправить код, чтобы удалить эти ошибки, поэтому я бы не рекомендовал его.

    Если вы делаете быстрый проект, не беспокойтесь, так как это только замедлит вас.

    Если вы работаете над библиотекой или чем-то, что получит открытый источник, то, пожалуйста, включите их. Ваши пользователи будут очень благодарны за то, что ваш код не вызывает ошибок или предупреждений. Также учитывайте ndim advice.

Ответ 4

Мне нравится использовать -Wall -Wextra для С++. Однако, если -Wextra сообщает о предупреждениях в заголовках библиотек, которые я использую, я обычно бросаю их.