2012-01-21 2 views

risposta

87

Prova compresi stdint.h o inttypes.h.

+0

Ricevo ancora l'errore per uint32_t, ma incluso stdint.h ha risolto gli altri. – RobotRock

10

Per utilizzare l'alias di tipo uint8_t, è necessario includere l'intestazione standard stdint.h.

3

È necessario #include il stdint.h PRIMA di #include qualsiasi altra interfaccia di libreria che ne hanno bisogno.

Esempio:

Biblioteca LCD utilizza tipi uint8_t. Ho scritto la mia biblioteca con un'interfaccia (Display.h) e un'implementazione (Display.c)

In display.c, ho il seguente include.

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

E questo funziona.

Tuttavia, se li ri-organizzare in questo modo:

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

ottengo l'errore che si descrive. Questo perché Display.h ha bisogno di cose da stdint.h ma non possono accedervi perché tali informazioni è stato compilato dopo Display.h viene compilato.

Quindi spostare stdint.h di sopra di ogni biblioteca che ne hanno bisogno e non si dovrebbe ottenere più l'errore.

+14

Questo è solo cattiva progettazione, 'Display.h' dovrebbe contenere un' #include '. Non fare affidamento sul file incluso per includere le cose per te. Ecco a cosa servono le guardie di intestazione. – Jerska

+0

Questo è un po 'incompleto. Puoi espandere o fornire un riferimento sul perché include non dovrebbe essere nel file di origine? I miei include non forniscono i tipi necessari alle funzioni fornite dalla libreria, quindi non penserei che debbano essere nel file di intestazione. – LanchPad

+0

Non appena si utilizza qualcosa da qualsiasi intestazione in qualsiasi file, è sufficiente includere tale file nella fonte. Non ho detto che dovresti includere tutti i file nell'intestazione (ben fatto, ma modificato molto prima che tu rispondessi). Nel mio commento, sottolineo solo quanto sia pessimo il design che deve includere un file prima di un altro per farlo funzionare. Non ti farà risparmiare spazio o quant'altro, perché dovrai includerlo ogni volta prima del file. Se il tuo 'Display.h' ha bisogno di' stdint.h', non è normale non inserire l'inclusione direttamente in esso. – Jerska