Pracuję ze starszym osadzonym kodem C, który definiuje typy uint8_t, uint16_t
i uint32_t
w pliku nagłówkowym, używając słowa kluczowego typedef
.Skompiluj sprawdzanie czasu istnienia stdint.h
W celu omówienia, powiedzmy, że plik typedefs.h
zawiera te definicje.
W moim nowym module źródłowym C uwzględniam stdint.h
. Dołączam także inne pliki nagłówkowe, które zawierają typedefs.h
gdzieś w hierarchii. Zgodnie z oczekiwaniami kompilator narzeka na wiele zdefiniowanych symboli.
chciałbym zmodyfikować plik starszego typedefs.h
tak, że tylko deklaruje typy uint*_t
jeśli albo stdint.h
nie jest wliczony lub lepiej jeśli rodzaje uint*_t
nie są zdefiniowane.
Rozumiem, że #ifndef
nie może być używany, ponieważ typedef
nie jest dyrektywą preprocesora.
Więc w jaki sposób mogę powiedzieć kompilatorowi, aby nie definiować uint*_t
, jeśli już istnieją (lub jeśli stdint.h
jest już dołączony)?
Uwaga: byłoby to łatwe, gdyby zdefiniowany standard specyfikacji C zawierał definicje strażników dla plików nagłówkowych.
FWIW, Używam kompilatora Green Hills, 4.24, dla procesora ARM9.
Hm, 'UINT32_MIN' nie istnieje. 'UINT32_MAX' lub' INT32_MIN' –
+1 za sprytny pomysł. –
@Jens: Dwa poniższe przykłady sugerują, że takie definicje są wymagane 1) http://www.opengroup.org/onlinepubs/000095399/basedefs/stdint.h.html 2) http://linux-documentation.com/ pl/man/man0p/stdint.h.html – torak