Search code examples
ctypedefuint32stdint

Compile time checking existence of stdint.h


I'm working with legacy embedded C code which defines the types uint8_t, uint16_t and uint32_t in a header file using the typedef keyword.

For discussion, let us say the file typedefs.h contains these definitions.

In my new C source module, I include stdint.h. I also include other header files which include typedefs.h somewhere in the hierarchy. As expected, the compiler complains about multiple defined symbols.

I would like to modify the legacy file typedefs.h so that it only declares the uint*_t types if either stdint.h is not included or better if the uint*_t types are not defined.

My understanding is that #ifndef cannot be used since typedef is not a preprocessor directive.

So how do I tell the compiler to not define the uint*_t if they already exist (or if the stdint.h is already included)?

Note: this would be easy if the C specification defined standard include guard definitions for the header files.

FWIW, I am using Green Hills compiler, 4.24, for an ARM9 processor.


Solution

  • Just fix the legacy header to always include stdint.h to get these types, remove the duplicate definitions, and provide a drop-in file stdint.h for broken systems that lack it.