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

 
 
> Можно ли в WinAVR обозначить максимальное беззнаковое число как нибудь однообразно для переменных разного размера?
Laksus
сообщение Jan 23 2011, 00:40
Сообщение #1


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

Группа: Участник
Сообщений: 146
Регистрация: 16-05-05
Пользователь №: 5 069



Можно ли в WinAVR обозначить максимальное беззнаковое число как нибудь однообразно для переменных разного размера?
Например если
Код
uint8_t      cnt1;
uint16_t     cnt2;
uint32_t     cnt3;

то можно ли вместо
Код
if(cnt1 < 0xFF) cnt1++;
if(cnt2 < 0xFFFF) cnt2++;
if(cnt3 < 0xFFFFFFFF) cnt3++;

написать, что-то вроде
Код
if(cnt1 < MAX(cnt1)) cnt1++;
if(cnt2 < MAX(cnt2)) cnt2++;
if(cnt3 < MAX(cnt3)) cnt3++;

Вообще то, конечно, можно и 0xFFFF обойтись, но по-моему если бы было однообразно, то меньше шансов случайно ошибиться с разрядностью.

Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ReAl
сообщение Jan 23 2011, 08:11
Сообщение #2


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Именно в avr-gcc ?
Тогда, на скорую руку и без проверки, не подсунули ли переменную со знаком, так;
Код
#include <stdint.h>

#define MAX(a) ((__typeof(a))-1)

uint8_t  cnt1;
uint16_t cnt2;
uint32_t cnt3;

void foo() {
        if( cnt1 < MAX(cnt1) ) ++cnt1;
        if( cnt2 < MAX(cnt2) ) ++cnt2;
        if( cnt3 < MAX(cnt3) ) ++cnt3;
}


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post



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

 


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


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