The meaning of a value stored in an object or returned by a function is determined by the
type of the expression used to access it. (An identifier declared to be an object is the
simplest such expression; the type is specified in the declaration of the identifier.) Types
are partitioned into object types (types that fully describe objects), function types (types
that describe functions), and incomplete types (types that describe objects but lack
information needed to determine their sizes).
An object declared as type _Bool is large enough to store the values 0 and 1.
An object declared as type char is large enough to store anymember of the basic
execution character set. If a member of the basic execution character set is stored in a
char object, its value is guaranteed to be nonnegative.Ifany other character is stored in...
Извиняюсь за оффтоп, не знал что речь шла об ANSI C.
В общем Вам эти «виртуальные» типы всё равно придётся упаковывать в структурки, либо более крупные типы и использовать свою индексацию и прочее. Да, использовать битовые операции.
При этом, естественно, массив из двух таких структур будет занимать 2 байта, в каждом из которых будет использовано только 2 младших (для little-endian) или старших (для big-ending) бита.
Ну, не будем упоминать про то, что существуют архитектуры, на которых максимально адресуемая единица памяти это как раз байт, и на которых int, соответственно, равен char - видно, что дебилов с мозгом, разжиженным сями, плюсами и x86альтернативно умных это не интересует.
Но этим альтернативно умным будет полезно знать, что, например, сишный стек на x86 всегда выровнен минимум по 4 байтам. А то и по 8ми. Ровно как и среднестатистическая структура или юнион.
Ну и не лишним будет напомнить, что машинные слова x86 в памяти лежат обычно выровненными по 4 байтам, и соответственно, процессор с ними работает быстрее, чем со всякой невыровненной мелочью.
>А то и по 8ми. Ровно как и среднестатистическая структура или юнион.
Соответственно, ко всякому мелкому говну и так добавляется паддинг до соответствующего размера.
срач плавно перешел в другое русло :))) я и без лишних упоминаний прекрасно понимаю, что тот же int это далеко не бит и даже не байт. а вот про stdbool действительно не знал. читал стандарт по диагонали, не въедаясь в малоюзабельные (для меня) вещи ибо всякая экзотика только усложняют жизнь в разработке и провоцирует разного рода аномалии в виде багов. для меня есть одно правило - нужно писать просто и понятно. ты ведь читал про «эволюцию программиста»? ;)
булевый тип для Си - экзотика. я видел сильно много исходников и нигде в сишных проектах не использовался булевый тип. для этих целей обходились зачастую char'ом или int'ом.
лабы по турбоссям кончились 16 лет назад :). давай не будем голословными - покажи хотя бы 3 опенсорсных проекта где эксплуатируется булевый тип в сишном коде. Если уж сильно хочется придраться к моим познаниям Си, велком - http://code.google.com/p/gsql/source/browse/trunk
не уподобляйся Led'у, того вообще не ровном месте заносит.
> давай не будем голословными - покажи хотя бы 3 опенсорсных проекта где эксплуатируется булевый тип в сишном коде.
в гугле забанили, или танцору что-то другое мешает? ;)
1) php; 2) zsnes; 3) mesa; 4) kde(!) (3rd-party c-sources); 5) gccxml (ныне покойный, да)… (это из сорцов, которые у меня были, по тем или иным причинам.)