相关疑难解决方法(0)

为什么bit endianness是bitfields中的一个问题?

任何使用位域的可移植代码似乎都区分了小端和大端平台.有关此类代码的示例,请参阅linux内核中struct iphdr声明.我无法理解为什么位字节序是一个问题.

据我所知,bitfields纯粹是编译器构造,用于促进位级操作.

例如,考虑以下位域:

struct ParsedInt {
    unsigned int f1:1;
    unsigned int f2:3;
    unsigned int f3:4;
};
uint8_t i;
struct ParsedInt *d = &i;
只是一种简洁易懂的说法d->f2.

但是,无论架构如何,位操作都是明确定义的并且可以正常工作.那么,bitfields怎么不便携?

c portability cross-platform low-level bit-fields

54
推荐指数
4
解决办法
3万
查看次数

struct中的匿名联合不在c99中?

这里是我所遇到的非常简化的问题代码:

enum node_type {
    t_int, t_double
};

struct int_node {
    int value;
};

struct double_node {
    double value;
};

struct node {
    enum node_type type;
    union {
        struct int_node int_n;
        struct double_node double_n;
    };
};

int main(void) {
    struct int_node i;
    i.value = 10;
    struct node n;
    n.type = t_int;
    n.int_n = i;
    return 0;
}

我不明白的是:

$ cc us.c 
$ cc -std=c99 us.c 
us.c:18:4: warning: declaration does not declare anything
us.c: In function ‘main’:
us.c:26:4: error: ‘struct node’ …

c gcc struct c99 unions

49
推荐指数
5
解决办法
3万
查看次数

标签 统计

c ×2

bit-fields ×1

c99 ×1

cross-platform ×1

gcc ×1

low-level ×1

portability ×1

struct ×1

unions ×1