C 无法使用头枚举

C 无法使用头枚举,c,header,enums,constants,C,Header,Enums,Constants,我想做以下几点: parser.h #ifndef WS_PARSER_H #define WS_PARSER_H #include <stdin.h> #include <stdbool.h> typedef enum { FIN = 0x80; RSV1 = 0x40 /* ... */ } ws_flags; #endif 不幸的是,我知道FIN是一个未声明的标识符 我做错了什么 更新: 全局枚举的约定是什么 typedef enum

我想做以下几点:

parser.h

#ifndef WS_PARSER_H
#define WS_PARSER_H
#include <stdin.h>
#include <stdbool.h>

typedef enum {
    FIN = 0x80;
    RSV1 = 0x40
    /* ... */
} ws_flags;

#endif
不幸的是,我知道FIN是一个未声明的标识符

我做错了什么

更新:

全局枚举的约定是什么

typedef enum {} WS_FLAGS;
\ifndef WS\u解析器
#定义WS\u解析器
#包括
#包括
类型定义枚举{
FIN=0x80,
RSV1=0x40,
/* ... */
}ws_旗;
#恩迪夫
它是一个
而不是

几点:

1) 您的枚举已被删除;在中间,请删除所有这些。

typedef enum {
    FIN = 0x80,
    RSV1 = 0x40
    /* ... */
} ws_flags;
2) 不需要打电话

#ifndef WS_PARSER
#define WS_PARSER
#endif
在c文件的顶部,这些文件可以防止包含相同的定义,您通常不包括c文件或cpp文件,不需要在源文件中包含这些文件

3) 而不是

#ifndef WS_PARSER_H
#define WS_PARSER_H
在文件顶部,您可以使用

#pragma once
它也做了同样的事情,并且得到了当今大多数编译器的支持

#ifndef WS_PARSER
#define WS_PARSER
将其放入.c文件将导致忽略.h的内容,因为.h文件具有相同的include保护


你应该只把include-guard放在.h文件中。

对于OP:not add
RSV1=0x40之后,
如果是最后一个,也可以。@GrijeshChauhan:为什么不呢?这是合法的C语法。格里杰什乔汉:是的,我敢肯定。ISO/IEC 9899:1999,6.7.2.2,如是说。参见例如@undur_gongor Waw..不错!我还感谢您提供的信息,并特别感谢这本书:)难看的打字错误。你应该使用一个像样的IDE,这样在你打字的时候这些打字错误就会突出显示出来。尝试eclipse。这意味着您可以在不使用枚举限定符的情况下引用
WS_FLAGS
,例如
WS_FLAGS flag=FIN类型的定义变量,请不要从中更正您的问题answer@GrijeshChauhan这符合惯例吗?或者我应该使用宏映射fyi。。。我不知道是否对原始问题进行了编辑,但实际上他的标题中有
WS\u PARSER\u H
,这与
WS\u PARSER
不同。因此,.h不会被忽略(尽管不需要将
#ifndef WS_解析器
放在.c文件中)。
#pragma once
#ifndef WS_PARSER
#define WS_PARSER