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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> volatile uint16_t* и volatile unsigned chort*, какие-то странности в avr-gcc (WinAVR 20090313) 4.3.2
zltigo
сообщение Jul 14 2009, 11:16
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Petka @ Jul 14 2009, 09:46) *
Примеры в студию. Желательно с комментариями "хотел того-то, получил то и то, а в стандарте так-то".

Хотел одно, получил другое, а в стандарте, по этому поводу ПРОСТО НИЧЕГО - все на откуп разработчикам компиляторов. Посему и пользую "свои".



Цитата(Сергей Борщ @ Jul 14 2009, 11:36) *
Если уж заложился на least, то при написании нельзя полагаться на какое-либо конкретное поведение 255->256.....

Угу на это нельзя полагаться, на занимаемый размер в памяти нельзя полагаться..... Если я знаю, что творю, то лучше, чуть-чуть потратив времении я буду писать то, на что могу полагаться на конкретной платформе (и поменяв typedef портировать на другую). Тем более, что всегда можно "свои" типы и в C99 переопределить легким движением пальцев.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
alx2
сообщение Jul 17 2009, 14:37
Сообщение #17


Местный
***

Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091



Цитата(zltigo @ Jul 14 2009, 16:16) *
Хотел одно, получил другое, а в стандарте, по этому поводу ПРОСТО НИЧЕГО - все на откуп разработчикам компиляторов.
Ну уж это неправда.
Цитата
7.18.1.1 Exact-width integer types
1 The typedef name intN_t designates a signed integer type with width N, no padding
bits, and a two’s complement representation. Thus, int8_t denotes a signed integer
type with a width of exactly 8 bits.

7.18.1.2 Minimum-width integer types
2
The typedef name uint_leastN_t designates an unsigned integer type with a width
of at least N , such that no unsigned integer type with lesser size has at least the specified
width. Thus, uint_least16_t denotes an unsigned integer type with a width of at
least 16 bits.

Цитата(zltigo @ Jul 14 2009, 16:16) *
Угу на это нельзя полагаться, на занимаемый размер в памяти нельзя полагаться.....
Совершенно спокойно можно полагаться на то, что написано в спецификации языка. В случае того же uint_least8_t можно быть уверенным, что его размер будет не меньше 8 бит, а в случае uint8_t - что размер будет точно 8 бит.


--------------------
Всего наилучшего,
Alex Mogilnikov
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 17 2009, 15:01
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(alx2 @ Jul 17 2009, 17:37) *
Ну уж это неправда.

Да ну smile.gif. Вы полагаете, что Вам издалека сейчас типа "виднее" smile.gif.
Цитата
Совершенно спокойно можно полагаться на то, что написано в спецификации языка.

Повторяю - в стандарте написано столь МАЛО и это настолько НИЧТОЖНО регламентирует поведение компиляторов, что лично меня это не очень устраивает.
Цитата
В случае того же uint_least8_t можно быть уверенным, что его размер будет не меньше 8 бит....

Потрасающее "уточнение" smile.gif стандарнта - неужели кто-то мог подумать, что размер такого типа будет меньше 8bit??? Нет? Так чего там такого в стандарте написано? Ничего sad.gif на самом деле НИЧЕГО вразумительного кроме абсолютной банальности не написано. Посему в подавляющем большинстве случаев я предпочитаю четко выражать свои требования через менее размыто определенные для конкретной платформы типы.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Petka
сообщение Jul 17 2009, 16:30
Сообщение #19


Профессионал
*****

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Цитата(zltigo @ Jul 17 2009, 19:01) *
Потрасающее "уточнение" smile.gif стандарнта - неужели кто-то мог подумать, что размер такого типа будет меньше 8bit??? Нет? Так чего там такого в стандарте написано? Ничего sad.gif на самом деле НИЧЕГО вразумительного кроме абсолютной банальности не написано. Посему в подавляющем большинстве случаев я предпочитаю четко выражать свои требования через менее размыто определенные для конкретной платформы типы.

Одного понять не могу: откуда такая неприязнь к с99 типам? Я вижу только одну причину - очень длинное написание.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 17 2009, 17:54
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Petka @ Jul 17 2009, 19:30) *
Одного понять не могу: откуда такая неприязнь к с99 типам?

Я достаточно подробно объяснял. Если это находится за пределами Вашего понимания, то.... это не мои проблемы. Кроме того, никакой неприязни нет - это много много много лучшее решение нежели использование, напимер, где ни попадя всяких byte. Просто есть еще лучшие, решения, если подумать smile.gif.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aesok
сообщение Jul 17 2009, 19:16
Сообщение #21


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Цитата(zltigo @ Jul 17 2009, 19:01) *
>> В случае того же uint_least8_t можно быть уверенным, что его размер будет не меньше 8 бит....

Потрасающее "уточнение" smile.gif стандарнта - неужели кто-то мог подумать, что размер такого типа будет меньше 8bit??? Нет? Так чего там такого в стандарте написано? Ничего sad.gif на самом деле НИЧЕГО вразумительного кроме абсолютной банальности не написано. Посему в подавляющем большинстве случаев я предпочитаю четко выражать свои требования через менее размыто определенные для конкретной платформы типы.


Да в стандарте написана потрясающая банальность - "что размер будет uint_least16_t не меньше 16 бит" и это значит что размер этого типа может быть 16, 32, 64 бита, но не может быть 8 бит. Банальность.

Так для чего нужны типы uint_leastXX_t?, для написания переносимых програм. Например некоторые DSP не поддерживают 8-битные данные, и тип uint8_t для этого процессора не будет определен. Если надо написать программу (библиотеку) которая будет должна компилировать для процессора который поддерживае 8-битные данные и для такого который не поддерживает, и в этой пограмме нужно использовать переменную для которой известно что достаточно если ее размер 8-бит, и надо добиться макимально возможной эффективности, то эта переменая объявляеться uint_least8_t типа. Когда програма будет компилироваться для процесора без поддержки 8-битных данных то переменая будет 16-битной, а когра например для AVR то 8-битной.

Анатолий.

Сообщение отредактировал aesok - Jul 17 2009, 19:20
Go to the top of the page
 
+Quote Post
Petka
сообщение Jul 17 2009, 20:47
Сообщение #22


Профессионал
*****

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Цитата(zltigo @ Jul 17 2009, 21:54) *
Я достаточно подробно объяснял. Если это находится за пределами Вашего понимания, то.... это не мои проблемы. Кроме того, никакой неприязни нет - это много много много лучшее решение нежели использование, например, где ни попадя всяких byte. Просто есть еще лучшие, решения, если подумать smile.gif.

Никаких подробных объяснений не было. (Если я их проглядел, киньте ссылочку на них)
Если есть решения лучше, подумайте и огласите их. Мне, например, будет очень интересно.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 18 2009, 05:13
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Petka @ Jul 17 2009, 23:47) *
Никаких....
Если...

Перечитайте топик.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
alx2
сообщение Jul 20 2009, 13:17
Сообщение #24


Местный
***

Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091



Цитата(zltigo @ Jul 17 2009, 20:01) *
Да ну smile.gif. Вы полагаете, что Вам издалека сейчас типа "виднее" smile.gif.
По крайней мере, я с расстояния 30 см увидел. И привел цитату. smile.gif
Цитата(zltigo @ Jul 17 2009, 20:01) *
Повторяю - в стандарте написано столь МАЛО и это настолько НИЧТОЖНО регламентирует поведение компиляторов, что лично меня это не очень устраивает.
"Мало" - это уже другое дело. Это Ваша количественная оценка, и возражать я тут не буду. Я возразил на "Просто ничего".
Цитата(zltigo @ Jul 17 2009, 20:01) *
Потрасающее "уточнение" smile.gif стандарнта - неужели кто-то мог подумать, что размер такого типа будет меньше 8bit??? Нет? Так чего там такого в стандарте написано? Ничего sad.gif
Во-первых, 8 бит - не единственный размер, определенный в стандарте. Есть, к примеру, int_least32_t.
Во-вторых, кроме требования "не меньше" в стандарте говорится, что это должен быть тип минимального размера, не меньшего заданного, то есть, например, тот же int_least8_t не может быть 64-битным, если существуют типы меньшего размера. По-моему, вполне существенное уточнение. Непонятно, почему Вы это игнорируете.
Если у компилятора есть 8-битный тип, то int_least8_t будет именно 8-битным и никаким другим. Если же у компилятора 8-битного целого нет (см. что написал aesok) - тогда да, int_least8_t будет иметь размер больше 8 бит, но в этом случае Вы можете сколько угодно писать свои собственные макросы, 8-битный тип у компилятора от этого не появится...

Сообщение отредактировал alx2 - Jul 20 2009, 14:09


--------------------
Всего наилучшего,
Alex Mogilnikov
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 21:36
Рейтинг@Mail.ru


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