C语言枚举与宏选择

C语言枚举与宏选择


枚举:

枚举是一种变量类型,枚举基本等效于int类型。
1、简单的整形常量定义
enum {
MODE_OFF,
MODE_RUN,
MODE_FW
};

这种情况我认为使用宏没有太的区别。

2、需要定义大量常量,可以利用枚举的值自增功能,
   也可指定每个枚举的值,便于代码的后期维护和修改。
enum trace_iterator_flags {
TRACE_ITER_PRINT_PARENT= 0x01,
TRACE_ITER_SYM_OFFSET= 0x02,
TRACE_ITER_SYM_ADDR= 0x04,
TRACE_ITER_VERBOSE= 0x08,
TRACE_ITER_RAW= 0x10,
TRACE_ITER_HEX= 0x20,
TRACE_ITER_BIN= 0x40,
TRACE_ITER_BLOCK= 0x80,
TRACE_ITER_STACKTRACE= 0x100,
TRACE_ITER_PRINTK= 0x200,
TRACE_ITER_PREEMPTONLY= 0x400,
TRACE_ITER_BRANCH= 0x800,
TRACE_ITER_ANNOTATE= 0x1000,
TRACE_ITER_USERSTACKTRACE       = 0x2000,
TRACE_ITER_SYM_USEROBJ          = 0x4000,
TRACE_ITER_PRINTK_MSGONLY= 0x8000,
TRACE_ITER_CONTEXT_INFO= 0x10000,
TRACE_ITER_LATENCY_FMT= 0x20000,
TRACE_ITER_SLEEP_TIME= 0x40000,
TRACE_ITER_GRAPH_TIME= 0x80000,
TRACE_ITER_RECORD_CMD= 0x100000,
TRACE_ITER_OVERWRITE= 0x200000,
TRACE_ITER_STOP_ON_FREE= 0x400000,
TRACE_ITER_IRQ_INFO= 0x800000,
TRACE_ITER_MARKERS= 0x1000000,
TRACE_ITER_FUNCTION= 0x2000000,
TRACE_ITER_TGID = 0x4000000,
TRACE_ITER_MAX= 0xffffffff,
}; 
3、需要定义变量
enum v4l2_tuner_type {
V4L2_TUNER_RADIO    = 1,
V4L2_TUNER_ANALOG_TV    = 2,
V4L2_TUNER_DIGITAL_TV    = 3,
V4L2_TUNER_ADC               = 4,
V4L2_TUNER_RF                = 5,
};


enum v4l2_tuner_type type

宏 :

宏可以定义任意类型的常量,宏只是代码替换功能。

1、简单的整型常量定义
#define MODE_OFF    0
#define MODE_RUN    1
#define MODE_FW     2
2、字符串等非整型常定义
#define DRIVER_CARD    "PN5xx NFC"
3、函数替换
一定要注意边界,注意添加 (),{},do{}while(0)
#define MIN(x,y) (x < y ? x : y)
#define MAX(x,y) (x > y ? x : y)
#define wake_up(x) __wake_up(x, TASK_NORMAL, 1, NULL)
#define wait_event(wq, condition) \
do { \
if (condition)\
break; \
__wait_event(wq, condition);\
} while (0)


#define wait_event_timeout(wq, condition, timeout) \
({ \
long __ret = timeout;\
if (!___wait_cond_timeout(condition))\
__ret = __wait_event_timeout(wq, condition, timeout);\
__ret; \
})

例如:
#define log(fmt...) ALOGD(fmt);\
printf(fmt);
应该改成==》
#define LOG(fmt...) \
do { \
ALOGD(fmt); \
printf(fmt); \
} while(0)

#define SAFE_FREE(p) free(p); p = NULL;
应该改成==》
#define SAFE_FREE(p) do{free(p); p = NULL;}while(0)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值