您的位置:首页 > 编程语言 > C语言/C++

C语言宏定义

2015-09-01 09:29 288 查看
C语言中用宏定义的一般形式: #define   宏名   字符串;带参数的宏定义 :#define      宏名(参数列表)   字符串,宏名与形参列表之间不可有空格。

宏的调用,仅是将宏的字符串代换程序中的宏名,(带参数的宏不仅要宏展开还要用实参代换形参,不存在值传递,) 。

带参宏定义和函数的区别:

【示例①】用函数计算平方值。

#include <stdio.h>

int SQ(int y){
return ((y)*(y));
}

int main(){
int i=1;
while(i<=5){
printf("%d^2 = %d\n", (i-1), SQ(i++));
}
return 0;
}

运行结果:
1^2 = 1
2^2 = 4
3^2 = 9
4^2 = 16
5^2 = 25

【示例②】用宏计算平方值。

复制纯文本新窗口


#include <stdio.h>

#define SQ(y) ((y)*(y))

int main(){
int i=1;
while(i<=5){
printf("%d^2 = %d\n", i, SQ(i++));
}
return 0;
}

VC 6.0下运行结果:
1^2 = 1
3^2 = 9
5^2 = 25

分析如下:在示例①中,函数调用是把实参
i 值传给形参 y 后自增 1,然后输出函数值,所以要循环5次,输出1~5的平方值。而在示例②中宏调用时只作代换,SQ(i++) 被代换为 ((i++)*(i++))。第一次循环,i 的值为1,(i++)*(i++)=1;第二次循环 i 的值为 3,(i++)*(i++)=9;第三次循环 i 的值为 5,(i++)*(i++)=25;第四次循环,i 的值为7,终止循环。

从以上分析可以看出函数调用和宏调用二者在形式上相似,在本质上是完全不同的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: