1
MISRA C 2004規則1.1規定規範涵蓋c90而不是c99。MISRA C 2004和c99
我想使用stdint和stdbool庫,而不是自己編碼。有沒有人在他們的MISRA實現中做出這個例外?
MISRA C 2004規則1.1規定規範涵蓋c90而不是c99。MISRA C 2004和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 */
規則6.3的效果建議stdint.h'的'「用戶定義的」執行 - 因此,如果你的編譯器支持'stdint。 h'(和/或'stdbool.h'),那麼我認爲這是一個合理的偏差(根據第4.3.2節)來使用它們。 – Andrew