Я работаю с устаревшим встроенным кодом C, который определяет типы uint8_t, uint16_t
и uint32_t
в файле заголовка с использованием ключевого слова typedef
.Проверка времени компиляции stdint.h
Для обсуждения, скажем, файл 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.
Hm, 'UINT32_MIN' не существует. 'UINT32_MAX' или' INT32_MIN' –
+1 для умной идеи. –
@Jens: Каждые два, кажется, предполагают, что такие определения необходимы 1) http://www.opengroup.org/onlinepubs/000095399/basedefs/stdint.h.html 2) http://linux-documentation.com/ ru/man/man0p/stdint.h.html – torak