无法使用标头枚举

时间:2013-06-03 14:30:02

标签: c header enums const

我想做以下事情:

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;

3 个答案:

答案 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文件中加入包含警戒。