可以在其签名中包含一个包含匿名枚举的函数。但是,当我尝试将函数签名移动到头文件时,我遇到了编译器错误。
void myfunct (enum {a=1} param);
void myfunct (enum {a=1} param)
{}
产生以下结果:
错误:'myfunct'的冲突类型
如果枚举命名(并移到函数声明之外),则没有错误。
使用什么是正确的语法?
答案 0 :(得分:1)
你无法做到这一点,显然
6.2.4对象的存储持续时间
- 枚举包含一组命名的整数常量值。每个都不同 枚举构成一个不同的枚举类型。
醇>
但您可以使用命名的
#include <stdio.h>
enum my_enum
{
a,
b,
c,
MY_ENUM_MAX
};
void func(enum my_enum value)
{
printf("%d\n", value);
}
int main(void)
{
func(a);
func(b);
}
或者你可以输入定义
#include <stdio.h>
typedef enum
{
a,
b,
c,
MY_ENUM_MAX
}my_enum;
void func (my_enum value)
{
printf("%d\n", value);
}
int main(void)
{
func(a);
func(b);
}
答案 1 :(得分:1)
正如评论中所述:
使用命名的枚举。您永远不能将两个匿名枚举视为相同类型。
如果可以添加某些内容以使其更有用或更清晰,请编辑此帖子。