我想做以下事情:
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
parser.c
#ifndef WS_PARSER
#define WS_PARSER
#include "parser.h"
ws_read_fin_flag(unsigned char * chunk) {
return (bool) chunk[0] & WS_FLAGS.FIN;
}
#endif
不幸的是,我得到的FIN是未声明的标识符。
我做错了什么?
更新
全球枚举的惯例是什么?
typedef enum {} WS_FLAGS;
答案 0 :(得分:7)
#ifndef WS_PARSER_H
#define WS_PARSER_H
#include <stdin.h>
#include <stdbool.h>
typedef enum {
FIN = 0x80,
RSV1 = 0x40,
/* ... */
} ws_flags;
#endif
这是,
而不是;
。
答案 1 :(得分:3)
几点:
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
它做同样的事情,今天大多数编制者都支持
答案 2 :(得分:0)
#ifndef WS_PARSER
#define WS_PARSER
将它放在.c文件中将导致.h文件的内容被忽略,因为.h文件具有相同的包含保护。
你应该只在.h文件中加入包含警戒。