2016-10-17 6 views
2

構造内でフラグの中にブール変数を使用したかったのですが、可能にするために "bool"というキーワードはありませんでした。 私はここにいくつかの関連情報を得ました:Using boolean values in C は、基本的に、私はこの行に、次のエラーを取得するには、このcでboolを使う(構造内で)

struct bookshop 
{ 
    char name[20]; 
    char issuer[20]; 
    int id; 
    typedef enum { false, true } flag; 

}; 

を試してみました:「typedefを列挙{偽、真}フラグ」。 「typedefは」 前に期待指定-修飾子リスト - - この行 で 複数のマーカータイプ「フラグが」 解決できませんでした - 構文エラーに

を助けてください! とありがとうございます。

+2

を行うことができるように標準ヘッダstdbool.hがあることに、注意してください。 –

+3

メンバ変数は構造体内でのみ宣言でき、型名は宣言できません。また、C99標準[Cにはboolanタイプがあります](http://en.cppreference.com/w/c/types/boolean)から使用できます。 –

+2

ブール型に '_Bool'キーワードが導入されました。 –

答えて

1

宣言で新しいタイプを定義することはできません。あなたはまずブールのtypedefを宣言する必要があり、その後、あなたはあなたがそのような構造体定義の内部でtypedefを置くことができない、それをあなたの構造体、すなわち:

typedef enum { false, true } bool; 

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

を使用することができます。それはグローバルレベルにある必要があります。

typedef enum { false, true } bool; 

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

あなたはstdbool.hが利用可能にしている場合、あなたはちょうどそれを含めることができますし、それはboolタイプだけでなく、truefalse定数を提供します。ゼロのもののために非ゼロ値のため、および

0

伝統的に、int型は、「ブール」の値を保持するために使用されました。

C99ので、あなたはstdbool.hで定義されたマクロと値を使用できます。

ブール_Boolを一定に

真整数定数1

偽整数0

__bool_true_false_are_defined整数定数1

古いコードとの互換性、および標準Cの値が真または偽であるかどうかをテストする方法に注意してください。前に説明したように、コード:

int flag = 4; 

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

trueを印刷します。

0

enumの変数を宣言したい場合は、構造体定義内にtypedefを使用しないでください。

typedef型、ユーザー定義型を定義するために使用され、それはそう

struct bookshop 
{ 
    char name[20]; 
    char issuer[20]; 
    int id; 
    enum { false, true } flag;  
}; 

が何をすべき、あなたが順番に構造体のメンバである変数を宣言したい、欲しいものではありませんそれ。

また、あなたは、構造体宣言の前に `typedef`を使用し、構造体タイプのVARを定義し、この

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

最初の選択肢では、 'true'および' false'列挙定数が定義されていますが、列挙タグ名もtypedefもないため、その型の他の変数を定義することはできません。私はそれについての答えを加えるかどうか議論していた。今私はする必要はありません。また、元来、 'typedef'が許されていれば、型名' flag'を導入し、メンバーを全く作成しませんでした。実際には許可されていないため、実際には問題はありません。 –

関連する問題