使用typedef enum的成员是可能的吗?

时间:2015-10-07 14:01:43

标签: c enums typedef

所以我有一个类似于:

的typedef枚举
typedef enum
{
    CH1,
    CH2,
    CH3
} AIN_Ch_t;

这是在一个单独的文件中声明的。

所以在另一个文件中我想使用这个枚举。

以下是我认为应该是正确的:

//declare variable of type AIN_Ch_t
AIN_Ch_t channel1;
//use the variable as parameter in function compiler gives error
func1(channel1.CH1);

但是当我这样做时 - 没有错误:

func1(CH1); //no error. compiler likes.
显然,我正在考虑这一切都错了。有人可以澄清吗?谢谢!

2 个答案:

答案 0 :(得分:2)

func1(channel1.CH1);

enums没有像结构这样的成员。你做的不对。你能做的就是这个 -

AIN_Ch_t channel1;
channel1=CH1;   
func1(channel1);

或者第二种方式 -

func1(CH1);             // directly pass CH1 to function

You can refer here to know about enums.

答案 1 :(得分:0)

CH1之类的枚举常量是常规标识符,与structunion成员不同。它们与变量和函数名称位于同一名称空间中。

这意味着:

  • 您没有使用 instance . constant 语法(例如struct或{}来引用枚举常量{1}}成员;
  • 同一程序中没有两个union类型可以共享枚举常量名称;
  • 没有enum类型可以使用常量名称,该名称也用作函数或变量名称。

基本上,enum是一种奇特的做法

enum

您可以使用前缀伪造名称空间:

const int CH1 = 0;
const int CH2 = 1;
...

它不漂亮,但它完成了这项工作。