为什么使用#define 而不是用enum定义常量

typedef enum {
    IOTAG_PORT__A = (0),
    IOTAG_PORT__B,
    IOTAG_PORT__C,
    IOTAG_PORT__F,
    IOTAG_PORT__ITEMS
} iotagPort_e;

#if (IOTAG_PORT__F)    // IOTAG_PORT__F未define,默认为0
#    error "can you see me?"
#endif

比如上面的例子,错误信息是看不到的,因为IOTAG_PORT__F并未预定义,换句话说enum里面的常量你不能用预编译命令作为条件判断,这就很致命了。

反过来说,enum中的常量你不用于预编译条件判断中,那就自然是枚举变量更好些。

 

此外,enum是可以指定基础变量类型的:

typedef enum :uint8_t{ // 指定enum的基础类型是uint8_t
    IOTAG_PORT__A = (0),
    IOTAG_PORT__B,
    IOTAG_PORT__C,
    IOTAG_PORT__F,
    IOTAG_PORT__ITEMS
} iotagPort_e;

 

 



posted @ 2021-09-10 18:30  QIYUEXIN  阅读(103)  评论(0编辑  收藏  举报