当我将它用作函数返回类型或参数时,为什么要输入ende

时间:2012-11-14 08:52:01

标签: c enums

我想将 枚举 用作函数返回类型或参数。但是当我按原样给它时,它会给出错误信息。但是,如果我 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 个答案:

答案 0 :(得分:4)

你的语法错误。

如果你没有使用typedef那么应该是这样的:

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

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

答案 1 :(得分:4)

您没有制作新的类型 bool,而是声明名为bool变量

答案 2 :(得分:4)

此代码:

enum
{
    _false,
    _true,
} bool;

声明匿名枚举类型的变量 booltypedef enum { ... } bool;定义了一个名为bool的类型,可用于引用枚举类型。

你也可以写

enum bool
{
    _false,
    _true,
};

但是你必须将类型称为enum bool。最便携的解决方案是编写

typedef enum bool
{
    _false,
    _true,
} bool;

即。定义名为bool的枚举类型和引用它的名为bool的通用类型。

答案 3 :(得分: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 b = true;的bool。