如何在函数签名中使用匿名枚举声明函数?

时间:2017-05-19 14:38:43

标签: c enums

可以在其签名中包含一个包含匿名枚举的函数。但是,当我尝试将函数签名移动到头文件时,我遇到了编译器错误。

void myfunct (enum {a=1} param); 
void myfunct (enum {a=1} param)
{}

产生以下结果:

  

错误:'myfunct'的冲突类型

如果枚举命名(并移到函数声明之外),则没有错误。

使用什么是正确的语法?

2 个答案:

答案 0 :(得分:1)

你无法做到这一点,显然

Standard C11

  

6.2.4对象的存储持续时间

     
      
  1. 枚举包含一组命名的整数常量值。每个都不同   枚举构成一个不同的枚举类型。
  2.   

但您可以使用命名的

#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)

正如评论中所述:

  

使用命名的枚举。您永远不能将两个匿名枚举视为相同类型。

如果可以添加某些内容以使其更有用或更清晰,请编辑此帖子。