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

 
 
5 страниц V  « < 3 4 5  
Reply to this topicStart new topic
> "Оптимизация" в WinAVR и как с этим бороться
Палыч
сообщение Oct 17 2012, 06:15
Сообщение #61


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(MaxiMuz @ Oct 16 2012, 22:35) *
здесь игнорирование (unsigned char) перед Mask это особенности GCC компилятора ?

Это - не "игнорирование", а "integer promotion" прописанное в стандарте ISO/IEC 9899:1999
Go to the top of the page
 
+Quote Post
MaxiMuz
сообщение Oct 17 2012, 12:11
Сообщение #62


Местный
***

Группа: Участник
Сообщений: 253
Регистрация: 15-04-10
Из: Волгоград
Пользователь №: 56 658



Цитата(Палыч @ Oct 17 2012, 09:15) *
Это - не "игнорирование", а "integer promotion" прописанное в стандарте ISO/IEC 9899:1999

т.е. этому стандарту не важно что в выражении стоит операция приведение типов ?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 17 2012, 12:59
Сообщение #63


Гуру
******

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



В этом стандарте операция "&" выполняется над операндами не ниже (unsigned) int. Все, что меньшего размера приводится к этим типам. После вашего явного приведения к unsigned char. Затем оптимизатор может выкинуть не влияющие на результат операции, такие как сравнение заведомо нулевых старших байтов. Ваш компилятор действует строго по стандарту, но его оптимизатор недостаточно проработан - обновите компилятор.


--------------------
На любой вопрос даю любой ответ
"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
Палыч
сообщение Oct 17 2012, 13:04
Сообщение #64


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(MaxiMuz @ Oct 17 2012, 16:11) *
стандарту не важно что в выражении стоит операция приведение типов ?
Почему одна операция (в данном случае - приведение типов) должна быть "важнее" других операций (например, & или + или др.) ? Транслятор генерирует код в соответствии с написаной Вами программой на языке С и положениями стандарта. В п.5.1.2.3 "Program execution" стандарта в абзаце 10 приведен пример, иллюстрирующий Ваш случай:
Цитата
EXAMPLE 2 In executing the fragment
char c1, c2;
/* ... */
c1 = c1 + c2;
the ‘‘integer promotions’’ require that the abstract machine promote the value of each variable to int size
and then add the two ints and truncate the sum.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 29th August 2025 - 18:17
Рейтинг@Mail.ru


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