gcc: использует-Werror и - педантичная продуманная хорошая практика?

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

  1. При определении станд. я должен всегда использовать - педантичный в соединении?
  2. При использовании-g, это достаточный стандартный уровень или я должен указать уровень 3, т.е.-g3?
  3. Это - хорошая практика для использования-Werror для продвижения всех предупреждений ошибкам и - педантичные ошибки способствовать всем педантичным предупреждениям ошибкам?
17
задан N 1.1 4 April 2010 в 13:12
поделиться

4 ответа

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

#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
24
ответ дан 30 November 2019 в 11:17
поделиться

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

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

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

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

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

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

7
ответ дан 30 November 2019 в 11:17
поделиться

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

8
ответ дан 30 November 2019 в 11:17
поделиться

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

3
ответ дан 30 November 2019 в 11:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: