0

列挙型を関数の戻り型または引数として使用したい。しかし、私がそれをそのまま与えると、それはエラーメッセージを出します。しかし、同じtypedefを使用すると、正常に機能します。

#include <stdio.h>

enum        // if *typedef enum* is used instead, it's working fine
{
    _false,
    _true,
} bool;

bool func1(bool );

int main()
{
    printf("Return Value = %d\n\n", func1(_true));

    return 0;
}

bool func1(bool status)
{
    return status;
}

これを理解するのを手伝ってください。ありがとうございました。

4

4 に答える 4

4

構文が間違っています。

使用していない場合は、次のtypedefようになります。

enum bool
{
    _false,
    _true,
};
enum bool func1(enum bool );

enum bool func1(enum bool status)
{
    return status;
}
于 2012-11-14T08:54:21.187 に答える
4

新しい を作成するのではなく、代わりに。という名前の変数boolを宣言します。bool

于 2012-11-14T08:55:04.557 に答える
4

このコード:

enum
{
    _false,
    _true,
} bool;

匿名列挙型 の変数 を宣言します。列挙型を参照するために使用できると呼ばれる型を定義します。booltypedef enum { ... } bool;bool

あなたも書くことができます

enum bool
{
    _false,
    _true,
};

ただし、タイプをとして参照する必要がありますenum bool。最もポータブルな解決策は書くことです

typedef enum bool
{
    _false,
    _true,
} bool;

つまり、と呼ばれる列挙型とそれを参照するboolと呼ばれる一般的な型を定義boolします。

于 2012-11-14T08:56:48.840 に答える
1

使用した構文が間違っています。以下のように使用してください。

#include <stdio.h>

enum bool        // if *typedef enum* is used instead, it's working fine
{
    _false,
    _true,
} ;

enum bool func1(enum bool );

int main()
{
    printf("Return Value = %d\n\n", func1(_true));

    return 0;
}

enum bool func1(enum bool status)
{
    return status;
}

代わりに、typedefを使用する場合は、boolの代わりに直接使用できますenum bool

また、C99標準を引用するには:

Section 7.16 Boolean type and values < stdbool.h >

1 The header <stdbool.h> defines four macros.
2 The macro
bool expands to _Bool.
3 The remaining three macros are suitable for use in #if preprocessing directives. They are
true : which expands to the integer constant 1,
false: which expands to the integer constant 0, and
__bool_true_false_are_defined which expands to the integer constant 1.
4 Notwithstanding the provisions of 7.1.3, a program may undefine and perhaps then redefine the macros bool, true, and false.

C99標準にコンパイルするコンパイラがある場合は、stdbool.hboolを含めて使用するだけですbool b = true;

于 2012-11-14T08:59:38.780 に答える