Chinaunix首页 | 论坛 | 博客
  • 博客访问: 128634
  • 博文数量: 22
  • 博客积分: 1533
  • 博客等级: 上尉
  • 技术积分: 225
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-30 11:09
文章分类

全部博文(22)

文章存档

2011年(1)

2010年(7)

2008年(14)

我的朋友

分类: C/C++

2010-10-12 09:22:37

一、定义一个常量
#define PI 3.1415

二、定义一个表达式
#define MAX(a, b) ((a) > (b) ? (a) : (b))

三、定义多条语句

第一种:#define EXCH(a, b) a = a + b; b = a - b; a = a - b;

从语法上说当然没错,但用到if()语句中时可能会出问题,如:

if(表达式)
        EXCH(a, b)


看起来好像是如果if()中的表达式为TRUE,则执行EXCH(a, b),但实际会变成:

if(表达式)
        a = a + b;
= a - b;
= a - b


这显然达不到想要的效果。

第二种: #define EXCH(a, b) { a = a + b; b = a - b; a = a - b; }

这种定义在调用时既没有返回值,又不能在调用后加分号,如:

EXCH(a, b);


这会被解释为:

{ a = a + b; b = a - b; a = a - b; };


这显然语法上就不正确。 但如果写成

EXCH(a, b)


这虽然正确, 但作为一条语句没有分号总感觉怪怪的, 所以出现了第三种情况。

第三种: #define EXCH(a, b) do { a = a + b; b = a - b; a = a - b; } while(0)

调用:

EXCH(a, b);


解释为:

do { a = a + b; b = a - b; a = a - b; } while(0);


第四种: #define EXCH(a, b) ({ a = a + b; b = a - b; a = a - b; })

这种在调用时有返回值,它的适用情况是放在if、while等的条件判断中,如:

if(EXCH(a, b))
        语句


它的返回值是最后一条语句的值。

第五种: #define EXCH(a, b) ( a = a + b, b = a - b, a = a - b )

这种写法也是正确的,但作为多条语句,如果用逗号隔开总觉得怪怪的,所以这种写法不常用。
阅读(1759) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~