[решено] размер enum (Си)

Модератор: Модераторы разделов

Ответить
Аватара пользователя
Janik
Сообщения: 848
Статус: Оператор вычислительных машин
ОС: Debian

[решено] размер enum

Сообщение Janik »

Можно ли изменить размер enum'а? А то создал свой тип bool, а он по умолчанию имеет размер, равный sizeof(int).
Кто ищет, тот всегда найдет!
Опыт - это когда все получается с первого раза.
Спасибо сказали:
Lan4
Сообщения: 339
Статус: hikki
ОС: Arch

Re: [решено] размер enum

Сообщение Lan4 »

Код: Выделить всё

enum ololo : char{
qwe, asd, zxc
};

Размер 1.

update: Виноват. Вам же надо было на C, а описанное мной - фишка C++0x
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux
Контактная информация:

Re: [решено] размер enum

Сообщение eddy »

Janik писал(а):
15.04.2011 10:30
А то создал свой тип bool

stdbool не пробовали?
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
Аватара пользователя
Janik
Сообщения: 848
Статус: Оператор вычислительных машин
ОС: Debian

Re: [решено] размер enum

Сообщение Janik »

Нет, у меня его почему-то нет. Хотя сам файл определяет тип bool как int.Сам файл.
Кто ищет, тот всегда найдет!
Опыт - это когда все получается с первого раза.
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux
Контактная информация:

Re: [решено] размер enum

Сообщение eddy »

Janik писал(а):
15.04.2011 11:12
Хотя сам файл определяет тип bool как int

Ну, сколько он места занимает, я не интересовался: мне хватает того, что bool из stdbool'а может принимать только 2 значения, 0 и 1, при попытке занести в него любое ненулевое число, получаем 1.
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
Аватара пользователя
Janik
Сообщения: 848
Статус: Оператор вычислительных машин
ОС: Debian

Re: [решено] размер enum

Сообщение Janik »

Мне просто память жалко. :rolleyes:
Кто ищет, тот всегда найдет!
Опыт - это когда все получается с первого раза.
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux
Контактная информация:

Re: [решено] размер enum

Сообщение eddy »

Janik писал(а):
15.04.2011 11:29
Мне просто память жалко

Тогда используйте битовые поля. Но вы проиграете в производительности.
Так что выбирайте - скорость или объем памяти. Понятное дело, при программировании контроллеров иногда чуть ли не каждый бит считаешь, а вот для десктопа особо можно насчет памяти не напрягаться (кроме некоторых случаев).
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5282
ОС: Gentoo

Re: [решено] размер enum

Сообщение /dev/random »

Janik писал(а):
15.04.2011 10:30
Можно ли изменить размер enum'а?

Нет, его размер выбирает компилятор.

Janik писал(а):
15.04.2011 10:30
А то создал свой тип bool

А вот это зря. stdbool.h определяет тип с таким именем, и если какой-либо из включаемых вами заголовочных файлов неявно включит этот файл, у вас начнутся проблемы.


Janik писал(а):
15.04.2011 11:12
Нет, у меня его почему-то нет.

Чего нет? stdbool.h нет? Вы какой системой и каким компилятором пользуетесь?

Janik писал(а):
15.04.2011 11:12
Хотя сам файл определяет тип bool как int.Сам файл.

Он определяет bool как _Bool, который, в свою очередь, (в gcc) определён самим компилятором. В разных системах по-разному. У меня - как однобайтный.

Вообще, наиболее простой способ сделать то, что вы хотите - это объявить:

#include <stdbool.h>
typedef char _BOOL;

И пользоваться типом _BOOL.
(такое имя - капсом и с подчёркиванием - чтобы не пересеклось с уже объявленными типами).
Константы true и false определены в stdbool.h, и записать их можно в любой целочисленный тип. В том числе в объявленный вами.

Но самый лучший выход - оставьте подобную оптимизацию компилятору.
Спасибо сказали:
Аватара пользователя
Janik
Сообщения: 848
Статус: Оператор вычислительных машин
ОС: Debian

Re: [решено] размер enum

Сообщение Janik »

Код: Выделить всё

 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 определяет тип с таким именем, и если какой-либо из включаемых вами заголовочных файлов неявно включит этот файл, у вас начнутся проблемы.

Об этом не беспокойтесь: я это хорошо знаю.
Кто ищет, тот всегда найдет!
Опыт - это когда все получается с первого раза.
Спасибо сказали:
Аватара пользователя
Crazy
Сообщения: 862
Статус: Адепт Дзен.
ОС: Mint, Win7.

Re: [решено] размер enum

Сообщение Crazy »

/dev/random писал(а):
15.04.2011 15:14
Janik писал(а):
15.04.2011 10:30
Можно ли изменить размер enum'а?

Нет, его размер выбирает компилятор.

enum {a =1, b=2, d=1024}
Отсюда компилятор должен взять 2 байта, что бы покрыть все значения.

Desipere in loco
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5282
ОС: Gentoo

Re: [решено] размер enum

Сообщение /dev/random »

Janik писал(а):
16.04.2011 11:30
stdbool.h нет. ls /usr/include | grep stdbool.h ничего не показывает.

Если бы вы просто попробовали его включить с помощью #include, то убедились бы, что он _есть_.
Он лежит в /usr/lib/gcc/<архитектура>/<версия_gcc>/include/stdbool.h (именно там лежат все gcc-специфичные заголовочные файлы).
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5282
ОС: Gentoo

Re: [решено] размер enum

Сообщение /dev/random »

Crazy писал(а):
16.04.2011 11:54
/dev/random писал(а):
15.04.2011 15:14
Janik писал(а):
15.04.2011 10:30
Можно ли изменить размер enum'а?

Нет, его размер выбирает компилятор.

enum {a =1, b=2, d=1024}
Отсюда компилятор должен взять 2 байта, что бы покрыть все значения.

Он не обязан выбирать оптимальное значение. Но выбор делает именно он, и изменить его нельзя.
Спасибо сказали:
Аватара пользователя
Janik
Сообщения: 848
Статус: Оператор вычислительных машин
ОС: Debian

Re: [решено] размер enum

Сообщение Janik »

Ладно, понял где он лежит. В общем, все понятно: размер изменить нельзя. Как бы решено.
Кто ищет, тот всегда найдет!
Опыт - это когда все получается с первого раза.
Спасибо сказали:
Jef239
Сообщения: 1

Re: [решено] размер enum

Сообщение Jef239 »

Janik писал(а):
16.04.2011 16:05
В общем, все понятно: размер изменить нельзя. Как бы решено.


Как бы ФИГНЯ. Размер меняется через

__attribute__ ((mode(byte)));

Указывать надо у ПЕРЕМЕННОЙ, а не у типа. См. http://gcc.gnu.org/onlinedocs/gcc-4.4.7/gc...able-Attributes

Только что нарвался. Нагуглил ваш топик, но пошел рыться дальше и нарыл РЕШЕНИЕ.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: [решено] размер enum

Сообщение drBatty »

Janik
мне лениво копаться в стандарте, но в последний раз размер enum там был вполне определён, а именно как int. Зачем его менять - я не знаю.
Janik писал(а):
15.04.2011 10:30
А то создал свой тип bool, а он по умолчанию имеет размер, равный sizeof(int).

быдлокод detected.
создайте my_bool
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
Женя Подсыпальников
Сообщения: 482

Re: [решено] размер enum

Сообщение Женя Подсыпальников »

#define bool char
#define false 0x00
#define true 0x01

Не совсем свой, но маленьки тип :)
Пойдём на рыбалку !
Спасибо сказали:
Ответить