2012-01-21 402 views

回答

87

嘗試包括stdint.hinttypes.h

+0

我仍然得到uint32_t的錯誤,但包括stdint.h確實解決了其他錯誤。 – RobotRock

10

要使用uint8_t類型別名,您必須包含stdint.h標準標題。

3

您需要#includestdint.h之前你#include任何其他庫需要它的接口。

實施例:

我的LCD庫使用uint8_t類型。我用一個接口(Display.h)和一個實現(Display.c

寫了我的庫。在display.c中,我有以下內容。

#include <stdint.h> 
#include <string.h> 
#include <avr/io.h> 
#include <Display.h> 
#include <GlobalTime.h> 

這個工程。

不過,如果我重新安排他們像這樣:

#include <string.h> 
#include <avr/io.h> 
#include <Display.h> 
#include <GlobalTime.h> 
#include <stdint.h> 

我讓你描述的錯誤。這是因爲Display.h需要stdint.h的東西,但無法訪問它,因爲在編譯Display.h之後編譯了這些信息。

因此,將stdint.h移動到任何需要它的庫之上,並且不應再出現錯誤。

+14

這只是糟糕的設計,'Display.h'應該包含'#include '。不要依賴包含文件來爲你提供東西。這是頭衛隊在這裏。 – Jerska

+0

這有點不完整。你能擴展或提供一個關於爲什麼include不應該在源文件中的參考嗎?我的包含不提供庫提供的函數所需的類型,所以我不認爲他們需要在頭文件中。 – LanchPad

+0

只要您使用任何文件中的任何標題,就可以將該文件包含在源文件中。我沒有說你應該在頭文件中包含所有的文件(當然,我已經做了,但是在你回答之前已經編輯了很久)。在我的評論中,我只指出爲了使它工作而必須在另一個文件之前包含一個文件是多麼糟糕的設計。 它不會爲你節省任何空間或任何東西,因爲你需要在文件之前每次都做這個。如果你的'Display.h'需要'stdint.h',那麼不直接將include包含在其中。 – Jerska