Я работаю со старым встроенным кодом C, который определяет типы uint8_t, uint16_t
и uint32_t
в заголовочном файле, используя ключевое слово typedef
.
Для обсуждения допустим, что файл typedefs.h
содержит эти определения.
В моем новом исходном модуле C я включаю stdint.h
. Я также включаю другие заголовочные файлы, которые включают typedefs.h
где-то в иерархии. Как и ожидалось, компилятор жалуется на несколько определенных символов.
Я хотел бы изменить устаревший файл typedefs.h
, чтобы он объявлял типы uint*_t
только в том случае, если stdint.h
не включен или лучше, если типы uint*_t
не определены.
Насколько я понимаю, #ifndef
нельзя использовать, поскольку typedef
не является директивой препроцессора.
Так как мне сказать компилятору не определять uint*_t
, если они уже существуют (или если stdint.h
уже включен)?
Примечание: это было бы легко, если бы стандарт, определенный в спецификации C, включал определения защиты для заголовочных файлов.
FWIW, я использую компилятор Green Hills, 4.24, для процессора ARM9.