是否有一种C语言技术可以占用一个字节?

Xeg*_*ara 2 c

给定一个复杂的数据结构,其中每个子结构都有一个具有{true或false}域的变量,

(例如)

struct dataBlock{
    struct {
        /* more members */
        char status;
    } node1;

    struct {
       /* more members */
       char status;
    } node2;
    /* More nodes */
};
Run Code Online (Sandbox Code Playgroud)

只有1或0的值只有一个字节是浪费.是否有一种C语言技术,每个节点中的状态只会占用一个字节中的一个位?我能想到的是使用MACROS但是宏不能包含在本地范围内吗?因此,具有宏状态将意味着程序中只有一个宏状态.因此,调用node1.status和node2.status使用相同的宏.

Mur*_*nik 6

您可以使用位域 - 此语法允许您定义strcut中每个int应占用的位数.但是请注意,C只能分配完整的字节,因此在任何情况下,结构的大小都会向上舍入到最接近的8位乘法.

例如:

struct {
    int whole_int; /* a whole int, let's assume it's 16 bits. */
    int half_int : 8; /* only half an int */
    int another_half_int : 8;
} some_struct /* Total size is 2 bytes*/
Run Code Online (Sandbox Code Playgroud)

话虽如此,我真诚地怀疑你会注意到使用这种技术可以获得任何性能提升,正如Fredrick Gauss评论的那样,这可能不值得麻烦.