[решено] размер enum (Си)
Модератор: Модераторы разделов
-
- Сообщения: 858
- Статус: Оператор вычислительных машин
- ОС: Debian
[решено] размер enum
Можно ли изменить размер enum'а? А то создал свой тип bool, а он по умолчанию имеет размер, равный sizeof(int).
Кто ищет, тот всегда найдет!
Опыт - это когда все получается с первого раза.
Опыт - это когда все получается с первого раза.
-
- Сообщения: 339
- Статус: hikki
- ОС: Arch
Re: [решено] размер enum
Код: Выделить всё
enum ololo : char{
qwe, asd, zxc
};
Размер 1.
update: Виноват. Вам же надо было на C, а описанное мной - фишка C++0x
Blog: hikki-tech
-
- Сообщения: 3321
- Статус: Красный глаз тролля
- ОС: ArchLinux
Re: [решено] размер enum
RTFM
-------
KOI8-R - патриотичная кодировка
-------
KOI8-R - патриотичная кодировка

-
- Сообщения: 858
- Статус: Оператор вычислительных машин
- ОС: Debian
Re: [решено] размер enum
Нет, у меня его почему-то нет. Хотя сам файл определяет тип bool как int.Сам файл.
Кто ищет, тот всегда найдет!
Опыт - это когда все получается с первого раза.
Опыт - это когда все получается с первого раза.
-
- Сообщения: 3321
- Статус: Красный глаз тролля
- ОС: ArchLinux
Re: [решено] размер enum
Ну, сколько он места занимает, я не интересовался: мне хватает того, что bool из stdbool'а может принимать только 2 значения, 0 и 1, при попытке занести в него любое ненулевое число, получаем 1.
RTFM
-------
KOI8-R - патриотичная кодировка
-------
KOI8-R - патриотичная кодировка

-
- Сообщения: 858
- Статус: Оператор вычислительных машин
- ОС: Debian
Re: [решено] размер enum
Мне просто память жалко. 

Кто ищет, тот всегда найдет!
Опыт - это когда все получается с первого раза.
Опыт - это когда все получается с первого раза.
-
- Сообщения: 3321
- Статус: Красный глаз тролля
- ОС: ArchLinux
Re: [решено] размер enum
Тогда используйте битовые поля. Но вы проиграете в производительности.
Так что выбирайте - скорость или объем памяти. Понятное дело, при программировании контроллеров иногда чуть ли не каждый бит считаешь, а вот для десктопа особо можно насчет памяти не напрягаться (кроме некоторых случаев).
RTFM
-------
KOI8-R - патриотичная кодировка
-------
KOI8-R - патриотичная кодировка

-
- Администратор
- Сообщения: 5382
- ОС: Gentoo
Re: [решено] размер enum
Нет, его размер выбирает компилятор.
А вот это зря. stdbool.h определяет тип с таким именем, и если какой-либо из включаемых вами заголовочных файлов неявно включит этот файл, у вас начнутся проблемы.
Чего нет? stdbool.h нет? Вы какой системой и каким компилятором пользуетесь?
Он определяет bool как _Bool, который, в свою очередь, (в gcc) определён самим компилятором. В разных системах по-разному. У меня - как однобайтный.
Вообще, наиболее простой способ сделать то, что вы хотите - это объявить:
#include <stdbool.h>
typedef char _BOOL;
И пользоваться типом _BOOL.
(такое имя - капсом и с подчёркиванием - чтобы не пересеклось с уже объявленными типами).
Константы true и false определены в stdbool.h, и записать их можно в любой целочисленный тип. В том числе в объявленный вами.
Но самый лучший выход - оставьте подобную оптимизацию компилятору.
-
- Сообщения: 858
- Статус: Оператор вычислительных машин
- ОС: Debian
Re: [решено] размер enum
Код: Выделить всё
uname -a
Linux DOM-131 2.6.32-5-686-bigmem #1 SMP Tue Mar 8 22:14:55 UTC 2011 i686 GNU/Linux
gcc --version
gcc (Debian 4.4.5-8) 4.4.5
Copyright (C) 2010 Free Software Foundation, Inc.
Это свободно распространяемое программное обеспечение. Условия копирования
приведены в исходных текстах. Без гарантии каких-либо качеств, включая
коммерческую ценность и применимость для каких-либо целей.
stdbool.h нет. ls /usr/include | grep stdbool.h ничего не показывает.
/dev/random писал(а): ↑15.04.2011 15:14А вот это зря. stdbool.h определяет тип с таким именем, и если какой-либо из включаемых вами заголовочных файлов неявно включит этот файл, у вас начнутся проблемы.
Об этом не беспокойтесь: я это хорошо знаю.
Кто ищет, тот всегда найдет!
Опыт - это когда все получается с первого раза.
Опыт - это когда все получается с первого раза.
-
- Сообщения: 862
- Статус: Адепт Дзен.
- ОС: Mint, Win7.
Re: [решено] размер enum
enum {a =1, b=2, d=1024}
Отсюда компилятор должен взять 2 байта, что бы покрыть все значения.
Desipere in loco
-
- Администратор
- Сообщения: 5382
- ОС: Gentoo
Re: [решено] размер enum
Если бы вы просто попробовали его включить с помощью #include, то убедились бы, что он _есть_.
Он лежит в /usr/lib/gcc/<архитектура>/<версия_gcc>/include/stdbool.h (именно там лежат все gcc-специфичные заголовочные файлы).
-
- Администратор
- Сообщения: 5382
- ОС: Gentoo
Re: [решено] размер enum
Он не обязан выбирать оптимальное значение. Но выбор делает именно он, и изменить его нельзя.
-
- Сообщения: 858
- Статус: Оператор вычислительных машин
- ОС: Debian
Re: [решено] размер enum
Ладно, понял где он лежит. В общем, все понятно: размер изменить нельзя. Как бы решено.
Кто ищет, тот всегда найдет!
Опыт - это когда все получается с первого раза.
Опыт - это когда все получается с первого раза.
-
- Сообщения: 1
Re: [решено] размер enum
Как бы ФИГНЯ. Размер меняется через
__attribute__ ((mode(byte)));
Указывать надо у ПЕРЕМЕННОЙ, а не у типа. См. http://gcc.gnu.org/onlinedocs/gcc-4.4.7/gc...able-Attributes
Только что нарвался. Нагуглил ваш топик, но пошел рыться дальше и нарыл РЕШЕНИЕ.
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: [решено] размер enum
Janik
мне лениво копаться в стандарте, но в последний раз размер enum там был вполне определён, а именно как int. Зачем его менять - я не знаю.
быдлокод detected.
создайте my_bool
мне лениво копаться в стандарте, но в последний раз размер enum там был вполне определён, а именно как int. Зачем его менять - я не знаю.
быдлокод detected.
создайте my_bool
-
- Сообщения: 482
Re: [решено] размер enum
#define bool char
#define false 0x00
#define true 0x01
Не совсем свой, но маленьки тип
#define false 0x00
#define true 0x01
Не совсем свой, но маленьки тип

Пойдём на рыбалку !