我想了解我的編譯器在C語言中的錯誤。未知類型名稱錯誤與typedef結構和extern聲明 - C語言
在文件application.h,我創建了一個typedef結構:
typedef struct
{
FLOAT64 CoefficientA1_F64;
FLOAT64 CoefficientA2_F64;
FLOAT64 CoefficientB0_F64;
FLOAT64 CoefficientB1_F64;
FLOAT64 CoefficientB2_F64;
FLOAT32 OldOldRawValue_F32;
FLOAT32 OldRawValue_F32;
FLOAT32 RawValue_F32;
FLOAT32 OldOldFilteredValue_F32;
FLOAT32 OldFilteredValue_F32;
FLOAT32 FilteredValue_F32;
}ButterwothSecondOrderFilterParameter_str;
然後我在另一個文件中temperature.c創建變量:
ButterwothSecondOrderFilterParameter_str TMP_TemperatureLowPassFilterParameter_STR;
然後我宣佈這個新的變量爲extern在temperature.h中可以使用它在另一個文件中:
extern ButterwothSecondOrderFilterParameter_str TMP_TemperatureLowPassFilterParameter_STR;
對於* .c文件我只包含他的相關* .h文件,如果我需要另一個* .h文件的全局變量,我將它包含在* .h文件中
例如,temperature.c只包含temperature.h並且可以訪問typedef application.h的結構我在temperature.h中包含application.h。
對於我的* .h文件,我總是以封裝:
#ifndef xxxx
#define xxxx
#endif
這是產生一個錯誤這最後聲明:
Description Resource Path Location Type
unknown type name 'ButterwothSecondOrderFilterParameter_str'
我不知道哪裏是我的錯誤。 ...?
如果你只包含'temperature.h'頭文件,而不是'application.h'頭文件,那麼編譯器如何知道符號'ButterwothSecondOrderFilterParameter_str'是什麼? –
'temperature.h'必須包含'application.h'來表示類型。你應該能夠在'temperature.c'的頂部包含'temperature.h',並且文件應該被編譯(這使得頭文件是獨立的)。目前,該文件不能編譯;標題不是獨立的。標題保護用於確保標題是冪等的;即使它們包含多次,其效果與包括它們一次相同。 –
而不是用單詞解釋,用代碼解釋:請提供[mcve]。目前還不清楚你的問題來自哪裏。 – user694733