ctrl + является специальным ключом.
ctrl + d - [d] etach, оставьте программы (irssi?) в фоне, пойти домой.
ctrl + c [c] повторно съел новое окно ctrl + 0-9 , переключатель между окнами номером
экранирует-r - возвращаются к отдельной сессии
, Который покрывает 90% вариантов использования. Не пытайтесь показать всю функциональность в единственное время.
gcc
-fshort-enums
могут быть полезны:
Присваивать типу "enum" только как столько байтов, сколько нужно для заявленный диапазон возможных значений. В частности, тип "перечисление" будет эквивалентно наименьший целочисленный тип, в котором достаточно места.
Фактически, здесь - это страница с большим количеством важной информации. Надеюсь, вы встретите много переключателей GCC, о существовании которых вы даже не подозревали. ;)
Я не понимаю, почему перечисление не работает. Все сравнения и назначения из перечисления должны нормально работать с расширением по умолчанию. Просто будьте осторожны, чтобы ваши 8-битные значения были правильно подписаны (я думаю, вам нужно беззнаковое расширение).
Таким образом вы получите 16-битные сравнения, я надеюсь, что это не будет проблемой производительности (не должно быть, особенно если ваш процессор 16-битный, как кажется).
Компилятор Microsoft C позволяет делать что-то вроде этого, но это расширение (стандартно для C ++ 0x):
enum Foo : unsigned char {
blah = 0,
blargh = 1
};
Поскольку вы отметили GCC, я не совсем уверен, что то же самое возможно, но GCC может иметь расширение в режиме gnu99
или что-то в этом роде. Дайте ему кружиться.
Я бы рекомендовал в любом случае оставаться на enum по следующим причинам:
Сначала вы не должны заботиться о реальной ширине шрифта. Только если вам действительно нужен эффективный способ хранения, вы должны использовать флаги компилятора, такие как -fshort-enums в компиляторе GNU, но я не рекомендую их, если они вам действительно не нужны.
В качестве последнего варианта вы можете определить 'enum' в качестве данных представления для команд и использовать преобразование в байт с помощью двух простых операций для сохранения / восстановления значения команды в / из памяти (и инкапсулировать это в одном месте). Как насчет этого? Это очень простые операции, поэтому вы можете даже встроить их (но это позволяет вам действительно использовать только 1 байт для хранения и с другой стороны для выполнения операций с использованием наиболее удобного перечисления, определенного как вам нравится.
Вы пытаетесь решить проблему, которой не существует.
Ваш вопрос помечен тегом C. В языке C типы перечислений в контексте значений полностью совместимы с целочисленными типами и ведут себя так же, как другие целые типы. Когда они используются в выражениях, они подвергаются точно таким же интегральным преобразованиям, что и другие интегральные типы. Приняв это во внимание, вы должны понимать, что если вы хотите сохранить значения, описанные константами перечисления, в 8-битном целочисленном типе, все, что вам нужно сделать, это выбрать подходящий общий 8-битный интегральный тип (скажем, int8_t
) и используйте его вместо типа перечисления. Вы ничего не потеряете, сохранив значения констант перечисления в объекте типа int8_t
(в отличие от объекта, явно объявленного с типом перечисления).
Проблема, которую вы описываете, может существовать в C ++, где типы перечислений отделены гораздо дальше от других целочисленных типов. В C ++ использование целочисленного типа вместо типа перечисления с целью экономии памяти более затруднительно (хотя и возможно). Но не в C, где это не требует никаких дополнительных усилий.