我在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是程序的一部分。我刚才没有把它们包括在内。 感谢您的帮助。
答案 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]
)访问枚举值。您使用枚举常量 A
,D
或H
。此外,头文件不会创建命名空间;你没有使用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' )