0

我想做以下事情:

解析器.h

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

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

#endif

解析器.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;
4

3 回答 3

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

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

#endif

这是一个,代替;

于 2013-06-03T14:32:25.050 回答
3

几点:

1)你的枚举有;在它的中间,请删除所有这些。

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

2) 不需要

#ifndef WS_PARSER
#define WS_PARSER
#endif

在 c 文件的顶部,那些是防止包含相同定义的保护,您通常不包含 ac 文件或 cpp 文件,不需要源文件中的那些。

3)代替

#ifndef WS_PARSER_H
#define WS_PARSER_H

在文件的顶部,您可以使用

#pragma once

它做同样的事情并得到当今大多数编译器的支持

于 2013-06-03T14:33:41.450 回答
0
#ifndef WS_PARSER
#define WS_PARSER

将其放入 .c 文件将导致 .h 的内容被忽略,因为 .h 文件具有相同的包含保护。

您应该只在 .h 文件中放置包含防护。

于 2013-06-03T14:45:01.427 回答