| warning: operation on ‘i’ may be undefined | |
| От: | wils0n | ||
| Дата: | 27.05.08 14:34 |
| Доброго времени суток! У меня простой вопрос. Есть код (см. ниже). Компилятор выдаёт warning: operation on ‘i’ may be undefined. Почему? Компилятор gcc version 4.1.2 20070925 (Red Hat 4.1.2-33) Спасибо.
gcc 4.2 |
| Re: warning: operation on ‘i’ may be undefined | |
| От: | Аноним 446 | ||
| Дата: | 27.05.08 14:43 |
| Здравствуйте, wils0n, Вы писали: W>Доброго времени суток! W>У меня простой вопрос. Есть код (см. ниже). Компилятор выдаёт warning: operation on ‘i’ may be undefined. Почему? W>Компилятор gcc version 4.1.2 20070925 (Red Hat 4.1.2-33) W>Спасибо. W>
А если массив а[] не будет содержать НИ ОДНОГО элемента ? |
| Re[2]: warning: operation on ‘i’ may be undefined | |
| От: | wils0n | ||
| Дата: | 27.05.08 14:52 |
| Здравствуйте, Аноним, Вы писали: А>Здравствуйте, wils0n, Вы писали: W>>Доброго времени суток! W>>У меня простой вопрос. Есть код (см. ниже). Компилятор выдаёт warning: operation on ‘i’ may be undefined. Почему? W>>Компилятор gcc version 4.1.2 20070925 (Red Hat 4.1.2-33) W>>Спасибо. W>>
А>А если массив а[] не будет содержать НИ ОДНОГО элемента ? Забыл сказать, warning выдаётся на втором while. 2Аноним: думаю тогда б warning был в каждой строке gcc 4.2 |
| Re[3]: warning: operation on ‘i’ may be undefined | |
| От: | Roman Odaisky | ||
| Дата: | 27.05.08 15:00 | ||
| Оценка: | 1 (1) | ||
| Здравствуйте, wils0n, Вы писали: W>>> while (i>0) b[i]=a[i--]; W>Забыл сказать, warning выдаётся на втором while. Это вежливый пинок под зад на тему того, что while нужно писать на отдельной строке! Теперь нам (в первую очередь тебе) еще разбираться, к чему именно относится предупреждение. Впрочем, и без того всё ясно. У тебя должны выполниться вот какие операции: 1. Определить адрес исходного элемента; 2. Определить адрес конечного элемента; 3. Уменьшить i; 4. Скопировать. Вопрос в пунктах 2 и 3. Как по-твоему, какой из них должен выполниться первым? status=sent (delivered to file: /dev/null) |
| Re: warning: operation on ‘i’ may be undefined | |
| От: | EyeOfHell | ||
| Дата: | 27.05.08 15:01 | ||
| Оценка: | 3 (1) +1 | ||
предупреждение о том, что в зависимости от версии и настроек компилятора b[i] может получить i как до --, так и после. Лекарство:
|
| Re[4]: warning: operation on ‘i’ may be undefined | |
| От: | wils0n | ||
| Дата: | 27.05.08 15:09 |
| Здравствуйте, Roman Odaisky, Вы писали: RO>Здравствуйте, wils0n, Вы писали: W>>>> while (i>0) b[i]=a[i--]; W>>Забыл сказать, warning выдаётся на втором while. RO>Это вежливый пинок под зад на тему того, что while нужно писать на отдельной строке! Теперь нам (в первую очередь тебе) еще разбираться, к чему именно относится предупреждение. RO>Впрочем, и без того всё ясно. У тебя должны выполниться вот какие операции: RO>1. Определить адрес исходного элемента; RO>2. Определить адрес конечного элемента; RO>3. Уменьшить i; RO>4. Скопировать. RO>Вопрос в пунктах 2 и 3. Как по-твоему, какой из них должен выполниться первым? Полагаю 2. Но учитывая пост EyeOfHell походу невсегда. gcc 4.2 |
| Re: warning: operation on ‘i’ may be undefined | |
| От: | Кодт модератор | ||
| Дата: | 27.05.08 15:29 | ||
| Оценка: | 1 (1) | ||
| Здравствуйте, wils0n, Вы писали: W>У меня простой вопрос. Есть код (см. ниже). Компилятор выдаёт warning: operation on ‘i’ may be undefined. Почему? А на какой строчке он выдаёт этот варнинг, слабо было посмотреть? W>
Жирным выделено UB. Неупорядоченное чтение и модификация одной переменной, не разделённые точкой следования. ... << RSDN@Home 1.2.0 alpha rev. 655>> Перекуём баги на фичи! |