реклама на сайте
подробности

 
 
> Интересный глюк в CodeVisionAVR
DMD
сообщение Apr 17 2008, 09:02
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 120
Регистрация: 19-02-08
Пользователь №: 35 166



Обнаружил интересный глюк в CodeVision, целый день вчера просидел - думал во мне дело, оказалось, что нет.
Если мы делаем сдвиг и результирующее число выходит из размера 1 байта, то, почему-то, компилятор не преобразует его к int (хотя обязан по стандарту). То есть вот такой код работает непрявильно:
Код
unisigned char s = 243;
//...
unsigned int d = (unsigned int)(s << 4);  // d != 3888


а надо так делать, что глупо...

Код
unisigned char s = 243;
//...
unsigned int d = (unsigned int)(((unsigned int)s) << 4);  // d = 3888


Интересно, зачем это надо или это просто баг??..


--------------------
Все будет хорошо! Я проверял!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Apr 17 2008, 09:17
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Да, выходит, это еще одно несоответствие стандарту этого компилятора.
Можно написать проще:
Код
unsigned int d = (unsigned int)s << 4;


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
defunct
сообщение Dec 3 2008, 00:15
Сообщение #3


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Сергей Борщ @ Apr 17 2008, 11:17) *
Можно написать проще:
Код
unsigned int d = (unsigned int)s << 4;

Можно написать еще проще
Код
unsigned int d = s << 4;

зачем делать приведение типа в правой части, если в левой части и так unsigned int.

к тому же
Цитата
Все операнды типа unsigned char или unsigned short преобразуются в тип unsigned int.



Цитата(zhevak @ Dec 2 2008, 17:52) *
разумеется, такой:

Неочевидно, потому что ваш пример вообще неоткомилируется, неизвестно что такое rus smile.gif

Очень странно как вы использовали этот код и не наткнулись на проблему раньше, ведь 3/4 символов, в т.ч. и цифры, были недоступными!

По теме CV согласен - фтопку этот недоинструмент.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 3 2008, 01:58
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(defunct @ Dec 3 2008, 02:15) *
Можно написать еще проще
Код
unsigned int d = s << 4;

зачем делать приведение типа в правой части, если в левой части и так unsigned int.
Если опустить integer promotion rules, которые CV не соблюдает, то в остальном в этом выражении он действует по стандарту: сначала вычисляется правая часть, потом ее результат приводится к левой части. То, что вы написали другими словами можно представить примерно так:
Цитата
Код
unsigned int s = 0x1234;
unsigned long d = s << 4;

зачем делать приведение типа в правой части, если в левой части и так unsigned long.


Цитата(zhevak @ Dec 2 2008, 17:52) *
Но меня другое плющит -- Codevision эту ошибку в упор не видит. Пф-ф!
gcc без -Wall тоже пропускает такое. В свое время тоже был удивлен, когда старые проекты, писаные в оболочке Dev-C++ стал собирать со своим рукописным makefile. Тоже решил тогда для себя "нафиг оболочку, теперь makefiles только руками".
А с -Wall gcc выдает не ошибку, а предупреждение.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- DMD   Интересный глюк в CodeVisionAVR   Apr 17 2008, 09:02
|- - zhevak   Цитатаdefunct[/b]' date='Dec 3 2008, 05:15...   Dec 3 2008, 21:26
|- - defunct   zhevak за подробнейшие ответы.   Dec 3 2008, 22:47
|- - LordVader   Цитата(zhevak @ Dec 4 2008, 01:26) Если L...   Dec 4 2008, 10:26
|- - zhevak   Цитата(LordVader @ Dec 4 2008, 15:26) Сущ...   Dec 4 2008, 10:47
|- - LordVader   Цитата(zhevak @ Dec 4 2008, 13:47) Я вам ...   Dec 4 2008, 18:22
|- - zhevak   Цитата(LordVader @ Dec 4 2008, 23:22) Ну ...   Dec 4 2008, 19:15
- - prottoss   Цитата(DMD @ Apr 17 2008, 16:02) Обнаружи...   Apr 17 2008, 10:31
|- - Сергей Борщ   Цитата(prottoss @ Apr 17 2008, 13:31) А п...   Apr 17 2008, 11:20
|- - prottoss   Цитата(Сергей Борщ @ Apr 17 2008, 18:20) ...   Apr 18 2008, 00:42
|- - Andrew O. Shadoura   Цитата(Сергей Борщ @ Apr 17 2008, 14:20) ...   Apr 18 2008, 02:01
- - WHALE   Цитата(DMD @ Apr 17 2008, 13:02) Обнаружи...   Apr 17 2008, 12:33
- - DMD   Ворнинги не генерились, что и странно. А насчет то...   Apr 18 2008, 09:41
- - ReAl   Цитата(DMD @ Apr 17 2008, 12:02) Обнаружи...   Apr 18 2008, 14:50
|- - zhevak   Выбрось каку Прошу не пинать -- прошелся поиском...   Dec 2 2008, 15:52
||- - Nick_Shl   Цитата(zhevak @ Dec 2 2008, 17:52) Вопрос...   Dec 3 2008, 06:15
|- - delamoure   Цитата(ReAl @ Apr 18 2008, 16:50) Уже обс...   Dec 3 2008, 11:48
|- - Сергей Борщ   Цитата(delamoure @ Dec 3 2008, 13:48) Но ...   Dec 3 2008, 13:35
|- - SasaVitebsk   Цитата(Сергей Борщ @ Dec 3 2008, 17:35) Т...   Dec 3 2008, 23:53
|- - Qwertty   Цитата(SasaVitebsk @ Dec 4 2008, 02:53) В...   Dec 4 2008, 04:57
|- - Сергей Борщ   Цитата(SasaVitebsk @ Dec 4 2008, 01:53) А...   Dec 4 2008, 09:36
- - _Pasha   Интересно, какие грабельки еще подкинет 16-битная ...   Dec 3 2008, 14:22
|- - Serj78   Цитата(_Pasha @ Dec 3 2008, 17:22) Интере...   Dec 4 2008, 08:20
- - delamoure   Впрочем, IAR для меня не новость "Многостроч...   Dec 4 2008, 00:52
- - ARV   а как можно преобразовать строки для вывода на LCD...   Dec 4 2008, 09:51
|- - Сергей Борщ   Цитата(ARV @ Dec 4 2008, 11:51) понимаю, ...   Dec 4 2008, 10:16
||- - ARV   Цитата(Сергей Борщ @ Dec 4 2008, 13:16) Н...   Dec 4 2008, 10:19
||- - ReAl   Цитата(ARV @ Dec 4 2008, 12:19) это очеви...   Dec 5 2008, 11:06
|- - zhevak   Цитата(ARV @ Dec 4 2008, 14:51) а как мож...   Dec 4 2008, 10:25
|- - _Pasha   Цитата(ARV @ Dec 4 2008, 13:51) а как мож...   Dec 4 2008, 10:38
- - SasaVitebsk   Стоимость LCD от 3.5$ за 2х16 до 11 за 4х20. ...   Dec 4 2008, 20:56
- - delamoure   Цитата(SasaVitebsk @ Dec 4 2008, 22:56) П...   Dec 4 2008, 21:25
|- - SasaVitebsk   Цитата(delamoure @ Dec 5 2008, 01:25) В C...   Dec 4 2008, 23:39
- - Сергей Борщ   Цитата(SasaVitebsk @ Dec 4 2008, 22:56) П...   Dec 5 2008, 02:41


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 08:58
Рейтинг@Mail.ru


Страница сгенерированна за 0.05764 секунд с 7
ELECTRONIX ©2004-2016