2013-01-15 127 views
1

MISRA C 2004規則1.1規定規範涵蓋c90而不是c99。MISRA C 2004和c99

我想使用stdint和stdbool庫,而不是自己編碼。有沒有人在他們的MISRA實現中做出這個例外?

+0

規則6.3的效果建議stdint.h'的'「用戶定義的」執行 - 因此,如果你的編譯器支持'stdint。 h'(和/或'stdbool.h'),那麼我認爲這是一個合理的偏差(根據第4.3.2節)來使用它們。 – Andrew

回答

3

您應該使用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 */