2016-09-02 2 views
2

От stdint.h следующихбиблиотека C определяет по int8_t

#ifndef int8_t 

    typedef signed char int8_t; 
    #define int8_t int8_t 
    #define INT8_MIN (-128) 
    #define INT8_MAX (127) 

#endif 

Что делает #define int8_t int8_t делать или определить?

+3

Он просто предотвращает множественные включения одних и тех же определений (см. '#ifndef int8_t' в начале?). –

+0

Кроме того, код может использовать '#if SCHAR_MIN == -128' для обеспечения переносимости. – chux

ответ

1

Он определяет int8_t как макрос, существование которого может быть проверено с помощью #ifndef int8_t, предположительно с целью предотвращения определения int8_t.

Я не знаю почему он делает это так. Было бы разумнее использовать один include guard вокруг всего заголовка <stdint.h>.

(В предыдущей версии этого ответа, я утверждал, что реализация несоответствующие, так как он определяет int8_t как макрос Это ненужно, но не инвалид Цитирование N1570 7.1.3:..

Каждый идентификатор с областью файлов, указанный в любом из следующих подклассов (включая будущие направления библиотек), зарезервирован для использования в качестве имени макроса и в качестве идентификатора с областью файла в том же пространстве имен , если любой из связанных с ним заголовков .

Так идентификатор int8_t зарезервирован для использования в качестве макро и определение макроса по осуществлению, не допускается.)

Что реализация этого от?

Смежные вопросы