高质量的c编程之五

周二是一个好日子,可以睡个懒觉.睡到中午看了会球赛,晃到学校无事做,想到 最近看得代码里面有关于#define的高级用法,刚看得时候很不明白,上网找关于#define的用法,网上讲的都不是很明白,而且基本上都是那一个文章被四处转载,那就写一篇关于#define的专题文章吧

1基本用法

老套路,#define最基本的用法就是定义常量,如#define pi 3.14159   这样就用pi代替了3.14159这个值,这样做得好处是程序清楚,易懂,修改方便.这只是简单的文本替换,不在堆栈上分配内存空间,在c++中有const标示,也可以定义常量,这里定义的常量是有数据类型的,在内存堆栈上分配空间,个人感觉两者在定义常量的用法上不太一样,简单的常量定义用const好一点,因为毕竟现在的程序对内存的需求不是很严,但是对于我们现在用的c在驱动开发中还是用的#define.

2代参数的宏定义
大家讲得已经很多了,无非是注意层次问题因为#define只是简单的文本替换,所以要注意括号的问题.

还有几个关于#define的高级特性大家可以了解一下,
##  代表连接字符  比如 #define A(x) A##x
A(1)则年表示 A1;

#表示在字符串中表示变量

#define   IF_JUDGE(x) if(t   ==   x)   OutputDebugString("x/n");
为了使IF_JUDEG(100)   输出为100。  应改为#define   IF_JUDGE(x) if(t   ==   x)   OutputDebugString(#x"/n");

#@则是微软特定的宏定义 因该是加上单引号;不建议使用

另外#define的定义可以加上反斜线这样可以接很多行代码;

下面我举一个例子说明一下用#define的好处

#define openport(num)/
static void openport##num{
ser_port *pPort;
/*一些操作*/
}
openport(1);
openport(2);
openport(3);
openport(4);
...

switch(slot)

case1:
openport1;
break;
case 2:
openport2;
break;
case 3:
openport3;
break;
case 4:
openport4;
break;
default:
break;



上面代码什么作用呢?就是声明了四个openport函数,这样就不用声明四个基本相同的函数了;

这是本人的一点拙见,欢迎高手指点
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值