590 / 413 / 135
Регистрация: 02.10.2008
Сообщений: 1,745
Записей в блоге: 1
1

Важность включения предупреждений (-Wall) в gcc

09.06.2022, 21:35. Показов 1182. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Имеется занятный код:
C
1
2
3
4
5
6
7
8
9
10
11
12
#include    <stdio.h>
#include    <math.h>
#include    <stdlib.h>
 
int main(void)
{
    printf("\nABS(1.1) == %i",abs(1.1));
    printf("\n_ABS(1.1) == %g",abs(1.1));        
    printf("\nFABS(1.1) == %g",fabs(1.1));    
 
    return 1;
}
При обычной компиляции получаем так же занятный результат:
Bash
1
2
3
4
5
6
faust@Rizen53600 ~/П/C/РАзная всячина> gcc 5.c -lm -o 5
faust@Rizen53600 ~/П/C/РАзная всячина> ./5
 
ABS(1.1) == 1
_ABS(1.1) == 3.16202e-322
FABS(1.1) == 1.1⏎                                                                                                                                                                             faust@Rizen53600 ~/П/C/РАзная всячина>
Как видим gcc молчит как партизан, в отличие от clang`а (там простыня на пол экрана - не буду приводить)
Но с -Wall gcc наконец-то прозревает:
Bash
1
2
3
4
5
6
7
8
9
10
faust@Rizen53600 ~/П/C/РАзная всячина> gcc 5.c -lm -o 5 -Wall
5.c: В функции «main»:
5.c:8:29: предупреждение: формат «%g» ожидает аргумент типа «double», но аргумент 2 имеет тип «int» [-Wformat=]
    8 |     printf("\n_ABS(1.1) == %g",abs(1.1));
      |                            ~^  ~~~~~~~~
      |                             |  |
      |                             |  int
      |                             double
      |                            %d
faust@Rizen53600 ~/П/C/РАзная всячина>
Но что самое интересное, если поменять местами строки 8 и 9 - результат получается ожидаемым Вот так на ровном месте можно выстрелить себе в ногу. И это простенький пример, а в сложной программе может просто непропечататься буковка 'f' в сложных вычислениях, и придётся долго лазить в дебагере вылавливая этот косяк.
Кроме этого примера можно ещё туеву хучу таких подводных камней насобирать.

Так что, ребята, не забывайте про -Wall , так же, более строго можно воткнуть и -Wextra . Если не требуются к-либо расширения стандартов ISO ANSI-C/ANSI-C++ , советую врубать так же и -Wpedantic .
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.06.2022, 21:35
Ответы с готовыми решениями:

Включение предупреждений gcc
Здравствуйте, нужно включить все предупреждения и вывод всех ошибок в компиляторе gcc. Как это...

Причина предупреждений GCC
Всем привет! Пишу программу для stm32 в CooIDE. В программе имеется функция: uint8_t...

GCC Сборка 32 разрядной версии GCC 64 разрядным GCC
Доброго времени суток. Возникла необходимость под 32х разрядный Linux, собрать 32 разрядный GCC. Но...

задачи :wall::wall
:wall::wall:1) Нужно просто нарисовать луну ( месяц) без заливки !!! 2)Нужно составить прогрумму...

Как установить gcc-4.6.3 параллельно с gcc-4.4?
На debian-6.0.7 нужно установить gcc-4.6.3 (или очень близкий по версии). Через apt-get, насколько...

0
09.06.2022, 21:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.06.2022, 21:35
Помогаю со студенческими работами здесь

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

Важность книг
Всем привет) У меня есть вопрос, хотя некоторым он может показаться странным, но всё же:...

важность изображений в контенте
Вот, собственно, сабж. Интересует, насколько важно использование изображений в контенте. То, что...

Указатели. Важность указателей
Здарова! Я хорошо понимаю (относительно хорошо, конечно), что такое указатели. Я слышал, что...

Важность уникальности изображений
Подскажите, пожалуйста, новичку. 1. Насколько важна уникальность изображений на сайте? Также...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru