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.h和使用 bool like bool b = true;.

于 2012-11-14T08:59:38.780 回答