如何从头文件访问枚举到C中的主程序?

时间:2015-07-31 14:01:41

标签: c enums header

我在C中创建了一个包含枚举应用程序的.h文件。需要在main.c程序中访问此枚举值。我的代码看起来像这样:

 state.h file

#ifndef State_H_
#define State_H_

#define enum app {A,D,H};

#endif

我的主要计划是:

 #include <stdlib.h>
 #include <stdio.h>
 #include "State.h"

char letters[] ={'AAAA'};
if( letters[0] ==State.app[0])
{
   printf("the first letter is matching");
}

但是在if语句中,State.app [0]给出错误

错误:状态无法解决,           应用程序无法解决。

有人可以建议一种方法,我可以从头文件中访问枚举值。请注意,int main和return是程序的一部分。我刚才没有把它们包括在内。 感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

State没有定义'命名空间'(比如在C#中),因此您无法访问类型(使用enum,您正在定义类型)通过使用标题名称作为前缀。

你应该像这样定义枚举:

enum app = { AA, BB, CC };

如果需要,可以将“State”定义为局部变量。

enum app State;

然后分配一个值:

State = AA;

但是你想要做的事情仍然不清楚。

答案 1 :(得分:1)

很多很多问题。

首先,

#define enum app {A,D,H};

不会创建枚举类型;相反,它会创建一个名为enum,只要它出现在您的代码中,就会被文本app {A,D,H};替换。如果要创建枚举类型,只需编写

enum app {A, D, H};

其次,枚举类型不像数组;您不能使用数组下标语法(例如app[0])访问枚举值。您使用枚举常量 ADH。此外,头文件不会创建命名空间;你没有使用State作为任何东西的前缀。

最后,枚举常量A与字符常量'A'不同,它不会自动具有相同的值。您必须使用所需的值显式初始化枚举常量,如下所示:

enum app { A = 'A', D = 'D', H = 'H' };

因此,将所有内容放在一起,您的代码将如下所示:

/**
 * State.h
 */
#ifndef State_H_
#define State_H_

enum app { A = 'A', D = 'D', H = 'H' };

#endif

/**
 * main.c
 */
#include <stdlib.h>
#include <stdio.h>
#include "State.h"

int main( void )
{
  char letters[] ={'A', 'A', 'A', 'A'}; // thanks NiBZ.
  if( letters[0] == A)      // no qualifier, just the bare enum constant
  {
     printf("the first letter is matching");
  }
  return 0;
}

修改

正如NiBZ指出的那样,宣言存在问题

char letters[] ={'AAAA'}; 

如果你想要一个简单的字符数组,那么初始化器需要看起来像

char letters[] = {'A', 'A', 'A', 'A' };

如果您希望letters字符串(由0值字节终止的字符序列),则初始化程序需要看起来像

char letters[] = {'A', 'A', 'A', 'A', 0 };

char letters[] = "AAAA";

结束编辑

说了这么多,这段代码感觉很困惑。如果枚举常量A具有特殊含义,而不仅仅是字符常量'A'的值,则应该为枚举常量使用更有意义的名称。例如,如果'A'表示记录的开头,则使用RECORD_BEGIN而不是A这样的名称:

if ( letters[0] == RECORD_BEGIN )

否则,只需使用裸字符常量:

if ( letters[0] == 'A' )