13919049954

什么情况下使用宏定义

作者:金城在线 日期:2017/12/15 15:14:25 人气:315

就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
    读完这篇文章后,您心情如何?
    • 0
    • 0
    • 0
    • 0
    • 0
    • 0
    • 0
    • 0
    更多>>网友评论
    发表评论