C语言宏定义
2015-09-01 09:29
357 查看
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,终止循环。
从以上分析可以看出函数调用和宏调用二者在形式上相似,在本质上是完全不同的。
宏的调用,仅是将宏的字符串代换程序中的宏名,(带参数的宏不仅要宏展开还要用实参代换形参,不存在值传递,) 。
带参宏定义和函数的区别:
【示例①】用函数计算平方值。
#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,终止循环。
从以上分析可以看出函数调用和宏调用二者在形式上相似,在本质上是完全不同的。
相关文章推荐
- C++的头文件(.h)和实现文件(.cpp)分别写什么
- 在c/c++语言中,为什么c[5] == 5[c]
- libc++abi.dylib: terminate_handler unexpectedly threw an exception 问题解决
- 快速排序算法C++
- 详细对比C语言中的chmod()函数和fchmod()函数
- 理解C++存在继承和组合的对象构造函数调用顺序
- strlen 是C语言的一个库函数计算字符串长度
- c/c++学习的经典网站
- C语言的国际化
- Visual Studio 2015的C++开发新特性(链接)
- C++、PHP和Swoole
- C++控制台应用程序之贪吃蛇(改进版)
- Effective C++ 条款28 避免返回handles指向对象内部成分
- 用C++写COM组件并用C#调用
- Effective C++ 条款27 尽量少做转型操作
- Effective C++——条款15(第3章)
- 初学算法-快速排序与线性时间选择(Deterministic Selection)的C++实现
- Effective C++——条款14(第3章)
- 我的C++ primer plus第4章作业总结
- C/C++编程细节(二)——堆栈、数组、指针