就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))
金城在线专注网站、软件、APP、微信公众平台、小程序、抖音、头条等开发推广,如果您有这方面的需求或者不同的观点,欢迎联系交流。
本文网址:http://www.lz.net.cn/SEOyouhua/588.html