我已經聲明瞭一個具有枚舉類型的結構。因爲它是.h文件中的成員,而.c文件中的枚舉是我使用枚舉的地方。.h中聲明的結構和.c文件中的枚舉
這是合法的,還是會導致編譯問題?
// in test.h
typedef struct {
eState state;
} TEST;
// in test.c
#include "test.h"
typedef enum {
DEFAULT,
FAST
} eState;
我已經聲明瞭一個具有枚舉類型的結構。因爲它是.h文件中的成員,而.c文件中的枚舉是我使用枚舉的地方。.h中聲明的結構和.c文件中的枚舉
這是合法的,還是會導致編譯問題?
// in test.h
typedef struct {
eState state;
} TEST;
// in test.c
#include "test.h"
typedef enum {
DEFAULT,
FAST
} eState;
你有三個選擇:
移動枚舉聲明的.h
文件(它必須是你的結構聲明之前)。
或者絕對荒謬和愚蠢(你將不得不宣佈枚舉中的每個文件你包括你.h
文件的方式相同)從語言角度,但法律
// in test.c
typedef enum {
DEFAULT,
FAST
} eState;
#include "test.h"
您還可以移動對.c
文件的結構聲明。
雖然選項2是合法的---它只能在test.h僅包含在test.c中。將其包含在任何其他文件中,並且失敗。這否定了將它放在頭文件中的目的。 –
@James Curran'或絕對荒謬,但從語言的角度來看是合法的 - 「並且你已經評論過它。 –
@PeterJ我認爲這意味着OP會使用其他.c文件中的頭文件,而不是在每個文件中都這樣做,所以它不合法 –
你試過編譯它嗎? – Ryan
不,它需要在test.h中添加前向聲明typedef struct –
也許如果您在test.h中添加枚舉eState之前 –