2017-08-13 157 views
0

我已經聲明瞭一個具有枚舉類型的結構。因爲它是.h文件中的成員,而.c文件中的枚舉是我使用枚舉的地方。.h中聲明的結構和.c文件中的枚舉

這是合法的,還是會導致編譯問題?

// in test.h 
typedef struct { 
    eState state;  

} TEST; 

// in test.c 
#include "test.h" 

typedef enum { 
    DEFAULT, 
    FAST 

} eState; 
+1

你試過編譯它嗎? – Ryan

+1

不,它需要在test.h中添加前向聲明typedef struct –

+1

也許如果您在test.h中添加枚舉eState之前 –

回答

-1

你有三個選擇:

  1. 移動枚舉聲明的.h文件(它必須是你的結構聲明之前)。

  2. 或者絕對荒謬和愚蠢(你將不得不宣佈枚舉中的每個文件你包括你.h文件的方式相同)從語言角度,但法律

    // in test.c 
    typedef enum { 
        DEFAULT, 
        FAST 
    } eState; 
    
    #include "test.h" 
    
  3. 您還可以移動對.c文件的結構聲明。

+4

雖然選項2是合法的---它只能在test.h僅包含在test.c中。將其包含在任何其他文件中,並且失敗。這否定了將它放在頭文件中的目的。 –

+0

@James Curran'或絕對荒謬,但從語言的角度來看是合法的 - 「並且你已經評論過它。 –

+1

@PeterJ我認爲這意味着OP會使用其他.c文件中的頭文件,而不是在每個文件中都這樣做,所以它不合法 –