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

 
 
> Как в C заставить enum считаться беззнаковым?
ViKo
сообщение Oct 5 2017, 09:38
Сообщение #1


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



В C (не C++) имею тип - перечисление с числами от 0 до 3.
Имею макрофункцию, где переменная типа того перечисления сдвигается на 30 влево.
При компиляции всплывает предупреждение, что результат выходит за пределы целого (в бит знака передвигается число).
Могу избавиться, дополнив ту же переменную в макрофункции явным приведением типа. Что странно - не результат сдвига, а саму переменную. И все чисто.
Но хотел бы прямо в перечислении задать беззнаковое целое. Явное задание чисел и дополнение ULL не помогает.
Можно заменить typedef enum { } на #define с дополнениями ULL, думаю, предупреждений не было бы. Не нравится.

В С++ вижу вариант enum : uint32_t { }.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
XVR
сообщение Oct 5 2017, 10:15
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(ViKo @ Oct 5 2017, 12:38) *
Но хотел бы прямо в перечислении задать беззнаковое целое.
Насколько я помню стандарт С, там сказано, что enum эквивалентен int (а не unsigned).

Угу, нашел (С99):

6.7.2.2 Enumeration specifiers

Цитата
Semantics
3
The identifiers in an enumerator list are declared as constants that have type int and may appear wherever such are permitted.


Хотя:
Цитата
4
Each enumerated type shall be compatible with char, a signed integer type, or an unsigned integer type 110).
The choice of type is implementation-defined, but shall be capable of representing the values of all the members of the enumeration.

110: An implementation may delay the choice of which integer type until all enumeration constants have been seen.

Попробуйте ему добавить в enum константу, которая не влезает в int (0xFFFFFFFFu например)

Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


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


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