我想将 枚举 用作函数返回类型或参数。但是当我按原样给它时,它会给出错误信息。但是,如果我 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;
}
请帮我理解这一点。谢谢。
答案 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;
声明匿名枚举类型的变量 bool
。 typedef 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。