好吧,我正在做一些Java-C集成,并且在整个C库中使用了werid类型映射(还有更多);

#define CHAR        char                    /*  8 bit signed int            */
#define SHORT       short                   /* 16 bit signed int            */
#define INT         int                     /* "natural" length signed int  */
#define LONG        long                    /* 32 bit signed int            */
typedef unsigned    char    BYTE;           /*  8 bit unsigned int          */
typedef unsigned    char    UCHAR;          /*  8 bit unsigned int          */
typedef unsigned    short   USHORT;         /* 16 bit unsigned int          */
typedef unsigned    int     UINT;           /* "natural" length unsigned int*/

是否有任何正当理由不使用它们?并不是说char很快就会被重新定义。

我可以想到:
  • 书写平台/编译器可移植代码(类型大小在C / C++中未指定)
  • 节省嵌入式系统上的空间和时间-如果在8位微处理器写操作中循环访问小于255的数组:
     for(uint8_t ii = 0; ii < len; ii++)
    

    将提供可衡量的加速。
  • 最佳答案

    C标准没有指定整数类型的大小。它取决于编译器以及将在其上运行代码的处理器。

    因此,为了获得最大的可移植性,最好有一个 header ,该 header 使用标准名称来指示该特定目标的每种类型的大小。

    MISRA-C和其他人使用uint16_t,sint32_t等。格式较短,例如u16,s32也正在使用中。

    关于#define v typedef:使用typedef强制编译器进行类型检查。

    09-04 16:03
    查看更多