在c中使用bool(在结构内)


using bool in c (within a structure)

我想在C中使用一个布尔变量作为一个标志,在一个结构中,但是C没有任何关键字"bool"使它成为可能。我在这里得到了一些相关的信息:在C中使用布尔值基本上,我试过这个

1
2
3
4
5
6
7
8
struct bookshop
{
    char name[20];
    char issuer[20];
    int id;
    typedef enum { false, true } flag;

};

若要获取以下错误,请在此行中:"typedef enum false,true flag";此行有多个标记-前面应有说明符限定符列表"TyPulf"-无法解析类型"flag"-语法错误

请帮助!并提前感谢:)


不能将typedef放在这样的结构定义中。它需要在全球一级。

1
2
3
4
5
6
7
8
9
typedef enum { false, true } bool;

struct bookshop
{
    char name[20];
    char issuer[20];
    int id;
    bool flag;
};

如果您有stdbool.h可用,您可以将其包括在内,它将提供bool类型以及truefalse常量。


不能在声明中定义新类型。首先必须声明bool typedef,然后才能使用它作为结构,即:

1
2
3
4
5
6
7
8
9
typedef enum { false, true } bool;

struct bookshop
{
    char name[20];
    char issuer[20];
    int id;
    bool flag;
};


如果只想声明enum类型的变量,那么在结构定义中不应该使用typedef

typedef用于定义一个类型、一个用户定义的类型,这不是您想要的,您需要声明一个变量,该变量反过来又是结构的一个成员,所以

1
2
3
4
5
6
7
struct bookshop
{
    char name[20];
    char issuer[20];
    int id;
    enum { false, true } flag;    
};

应该这样做。

还要注意,有一个标准的头stdbool.h,这样您就可以这样做了。

1
2
3
4
5
6
7
struct bookshop
{
    char name[20];
    char issuer[20];
    int id;
    bool flag;    
};


传统上,int类型用于保存"布尔"值:非零值为true,零值为false。

自c99以来,您可以使用stdbool.h中定义的宏和值:

bool _Bool

true integer constant 1

false integer constant 0

__bool_true_false_are_defined integer constant 1

但是要注意与旧代码的兼容性,以及标准C将值测试为真或假的方式。如前所述,以下代码:

1
2
3
4
5
6
7
8
9
10
int flag = 4;

if(flag) {
     puts("true
"
);
}
else {
     puts("false
"
);
}

将打印true