Правило 1.1 MISRA C 2004 указывает, что спецификация распространяется на c90, а не на c99.
Я хотел бы использовать библиотеки stdint и stdbool вместо того, чтобы писать свои собственные. Кто-нибудь сделал это исключение в своей реализации MISRA?
Правило 1.1 MISRA C 2004 указывает, что спецификация распространяется на c90, а не на c99.
Я хотел бы использовать библиотеки stdint и stdbool вместо того, чтобы писать свои собственные. Кто-нибудь сделал это исключение в своей реализации MISRA?
Вы обязательно должны использовать имена типов из stdint.h. Вот как я решил это в соответствии с MISRA-C: 2004:
#ifdef __STDC_VERSION__
#if (__STDC_VERSION__ >= 199901L) /* C99 or later? */
#include <stdint.h>
#include <stdbool.h>
#else
#define C90_COMPILER
#endif /* #if (__STDC_VERSION__ >= 199901L) */
#else
#define C90_COMPILER
#endif /* __STDC_VERSION__ */
#ifdef C90_COMPILER
typedef unsigned char uint8_t;
typedef unsigned int uint16_t;
typedef unsigned long uint32_t;
typedef signed char int8_t;
typedef signed int int16_t;
typedef signed long int32_t;
#ifndef BOOL
#ifndef FALSE
#define FALSE 0u
#define false 0u
#define TRUE 1u
#define true 1u
#endif
typedef uint8_t BOOL;
typedef uint8_t bool;
#endif
#endif /* C90_COMPILER */
stdint.h
, поэтому, если ваш компилятор поддерживаетstdint.h
(и/илиstdbool.h
в этом отношении), то я думаю, что это оправданное отклонение (согласно параграфу 4.3.2) для их использования. - person Andrew   schedule 22.01.2013