The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Раздел полезных советов: Как указать GCC выводить предупрежд..."
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Раздел полезных советов: Как указать GCC выводить предупрежд..."  +/
Сообщение от auto_tips on 23-Окт-09, 12:15 
При сборке ниже представленного некорректного кода, gcc не выдает никаких предупреждений даже с -Wall, при этом указатель он приводит к unsigned, поэтому результат сравнения всегда ложен.

   if ((fp = fopen(file, "w")) < 0)

Если написать:

   unsigned int a;
   if (a < 0)
   return 1;
   return 0;


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

Для того, чтобы gcc начал выводить предупреждения нужно указать -Wextra, тогда буде выведено:

   warning: comparison of unsigned expression < 0 is always false


URL: http://k001.livejournal.com/725123.html
Обсуждается: http://www.opennet.ru/tips/info/2200.shtml

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Как указать GCC выводить предупреждения для бессмысленных ср..."  +/
Сообщение от anon on 23-Окт-09, 12:15 
СТОП! А как мне заставить ГЦЦ скомпилить такое "бессмысленное сравнение" там, где это надо???
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Как указать GCC выводить предупреждения для бессмысленных ср..."  +/
Сообщение от анон on 23-Окт-09, 12:19 
Иногда бывает нужно при написании антиотладки, анти-аверов и т.д.
Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Как указать GCC выводить предупреждения для бессмысленных ср..."  +/
Сообщение от Аноним (??) on 23-Окт-09, 12:23 
При -fno-delete-null-pointer-checks такое сработает ?
Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

4. "Как указать GCC выводить предупреждения для бессмысленных ср..."  +/
Сообщение от pavlinux (ok) on 23-Окт-09, 19:32 
Из серии - плохой компилятор знает больше, чем хороший программист.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

5. "Как указать GCC выводить предупреждения для бессмысленных ср..."  +/
Сообщение от Дима (??) on 24-Окт-09, 15:26 
идиотизм какой-то . В Java сделано лучше. Такой код просто не скомпилируется, т.к. по спецификации запрещено применять непроинициализированные локальные переменные
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

6. "Как указать GCC выводить предупреждения для бессмысленных ср..."  +/
Сообщение от Карбофос (ok) on 24-Окт-09, 15:56 
прежде, чем заявлять, что "в ява сделано лучше", нужно знать, какой код генерирует gcc
кто тебе сказал, что бессмысленные выражения будут в бинарнике?
Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

7. "Как указать GCC выводить предупреждения для бессмысленных ср..."  +/
Сообщение от pavlinux (ok) on 24-Окт-09, 18:50 
>идиотизм какой-то . В Java сделано лучше. Такой код просто не скомпилируется,
>т.к. по спецификации запрещено применять непроинициализированные локальные переменные

s/непроинициализированные/не инициализированные/\g;

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

11. "Как указать GCC выводить предупреждения для бессмысленных ср..."  +/
Сообщение от Аноним (??) on 05-Сен-15, 21:43 
Алё, Дима, ты где здесь "непроинициализированные локальные переменные" увидел? Иди портфель собирай, критик юный.
Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

8. "Раздел полезных советов: Как указать GCC выводить предупрежд..."  +/
Сообщение от pavlinux (ok) on 24-Окт-09, 19:29 
>[оверквотинг удален]
>   return 1;
>   return 0;
>
>
>gcc опять не ругается и даже с -O0 генерирует код, который не
>делает никаких сравнений, а сразу возвращает результат. То есть знает, что
>сравнение бессмысленное, но молчит.
>
>Для того, чтобы gcc начал выводить предупреждения нужно указать -Wextra, тогда буде
>выведено:

ISO/ICE9899  стр. 44 на предмет разницы unsigned в K&R, C89 и С99

Так что

# gcc -std=c99 -W -Werror test.c

И будет вам счастье, специально для программеров на Жаве, добавляем -Werror.
За Вас, жавероф, Sun Microsystem уже подумал, тут надо самим. :)

  

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

9. "Как указать GCC выводить предупреждения для бессмысленных ср..."  +/
Сообщение от Саша (??) on 26-Окт-09, 21:25 
как с меня прикольная заметка :)
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2020 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру