C布尔创建和插入值而不调用结构成员 - 直接值插入

时间:2018-03-12 08:50:47

标签: c

在c语言中我们知道有(_Bool)类型是1个字节。也可以使用这种结构创建自己的布尔类型

typedef struct { char value : 1; } boolean_t;

并像这样称呼它

boolean_t var1;
var1.value = 0;

但我不想使用(.value)而只是这样做

var 1 = 0;

喜欢(_Bool)类型(没有用于插入值的变量调用内的结构)我想要这样的东西

boolean_t var1;
var1 = 0;

我该怎么做?

3 个答案:

答案 0 :(得分:0)

在C中,布尔值可以用变量表示,变量可以是0(假)或不是0(真)。你可以使用像这样的unsigned char:

typedef unsigned char boolean_t;
boolean_t myBool = 0; // or myBool = 1

答案 1 :(得分:0)

不可能实现你想要的(我的意思是你不能拥有只有1位长的数据类型,并且可以与赋值=一起使用)。你展示的那个 - 也将至少占用1个字节的内存。同样使用签名,您使用0-1来限制自己01使用无符号。 byte的最小可寻址单元不可能具有占用小于一个字节的空间的数据类型。 (同样适用于_Bool)。

再次在这里你可以简单地使用uint8_t来实现同样的目的。 uint8_t v = 1; //denotes true and so on

答案 2 :(得分:0)

将结构用于布尔类型会很奇怪。很多事情可以用你的boolean_t工作,确保内部值只能是0或1,因为位域,从两个const值分配一个布尔值为true和false,可能更多。

但是在C中,结构不能从整数值中分配,也不能用作整数表达式。这意味着至少有两件事是不可能的:

boolean b;
b = (1 < 2);             // error assigning to struct from incompatible type int
if (b) printf("true\n"); // error used type struct where int or pointer required

因为在C关系运算符中实际返回int值