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

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;
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 に答える