【发布时间】:2017-01-24 04:09:03
【问题描述】:
我想输入一个我在结构中创建的 3 位变量,我想像 int x=5; 而不是 structName.x=5; 一样正常使用它,我的意思示例:
typedef struct{
unsigned x:3;
} v3bits;
typedef v3bits.x uint3_t;
int main(){
uint3_t x=5;
return 0;
}
我该怎么做?
【问题讨论】:
我想输入一个我在结构中创建的 3 位变量,我想像 int x=5; 而不是 structName.x=5; 一样正常使用它,我的意思示例:
typedef struct{
unsigned x:3;
} v3bits;
typedef v3bits.x uint3_t;
int main(){
uint3_t x=5;
return 0;
}
我该怎么做?
【问题讨论】:
你不能。无法在 C 中创建 3 位整数类型。您可以改用更宽的整数类型,例如 uint8_t。
【讨论】:
不,至少在 C 中是不可能的。使用更广泛的数据类型
【讨论】:
你声明一个结构体,里面有一个字段:
typedef struct{ ... unsigned x:3; } v3bits;
...并为其分配一个“别名”v3bits,它指的是(否则)未命名的类型“struct something”。这没关系。然后您尝试使用字段而不是类型来创建新类型:
typedef v3bits.x uint3_t; (v3bits.x 不是类型)
Typedef 用于从其他类型创建新的类型名称 - 结果只是有一个短名称,而不是由(可能)几个部分组成的长名称。例如:
typedef unsigned int * puint_t;
让你从现在开始写puint_t而不是unsigned int *。
所以,第一个问题是您不能使用 typedef 为变量或字段命名。第二个问题是你想要一个由三位组成的整数类型。 C 不支持这一点。但是,您可以读取和写入 v3bits.x 字段 - 这实际上只使用 3 位。也许使用一些宏,您可以获得类似于您想要的东西。
【讨论】: