什么情况下使用宏定义

网站建设知识 phpacg 2年前 (2018-04-24) 109次浏览 0个评论

就C言语来说,宏定义太重要了,在没有他儿子和孙子辈言语那些初级功用的时分,宏定义就靠你了!下面说的均是在C言语/类C言语环境中。

1 取代Magic Number

其他知友也提到了,这个作用在嵌入式开发时太重要了。一个Soc 50多页的datasheet,上百个寄存器的位操作,假设没有很好的语义宏定义,调顺序查手册相对是解体的节拍!

2 防止重复定义

#ifndef XXXX

#define XXXX

#endif

3 快速控制代码编译

#define SIMULATION_DEBUG 1

#if SIMULATION_DEBUG

use simulated data

#else

real data

#endif

我会通知你我经常用#if 0吗?

4 编译系统控制链

在某些系统下,可以把宏定义传递给编译器,从而经过编译脚本(makefile)来控制编译选项

例如,配合下面代码,就可以在Makefile里定义:

CDEFINES=$(CDEFINES) /SIMULATION_DEBUG

说道编译,自然还要提一下 ANSI C中预定义的几个十分有用的编译宏:

_ L I N E _

_ F I L E _

_ D A T E _

_ T I M E _

_ S T D C _

例如

#define DEBUGMSG(msg,date) printf(msg);printf(“%d%d%d”,date,_LINE_,_FILE_)

5 运用typedef

C言语下typedef也是属于宏定义,我会通知你C言语下struct+typedef+函数指针可以做到面向对象的承袭,重载和多态吗?(有兴味可以看一下MFC的源码完成,把传统的C作风的Windows API各种包装修饰和装逼。)

typedef int (*PFFunc1)(int);

6 简化操作

失掉一个字的高位和低位字节

#define WORD_LO(xxx) ((byte) ((word)(xxx) & 255))

#define WORD_HI(xxx) ((byte) ((word)(xxx) >> 8))

喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址