C语言宏定义

来源:互联网 发布:mac如何复制粘贴照片 编辑:程序博客网 时间:2024/05/16 11:37

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

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

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

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

  1. #include <stdio.h>
  2. int SQ(int y){
  3. return ((y)*(y));
  4. }
  5. int main(){
  6. int i=1;
  7. while(i<=5){
  8. printf("%d^2 = %d\n", (i-1), SQ(i++));
  9. }
  10. return 0;
  11. }
运行结果:
1^2 = 1
2^2 = 4
3^2 = 9
4^2 = 16
5^2 = 25

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

复制纯文本新窗口
  1. #include <stdio.h>
  2. #define SQ(y) ((y)*(y))
  3. int main(){
  4. int i=1;
  5. while(i<=5){
  6. printf("%d^2 = %d\n", i, SQ(i++));
  7. }
  8. return 0;
  9. }
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,终止循环。

从以上分析可以看出函数调用和宏调用二者在形式上相似,在本质上是完全不同的。

0 0
原创粉丝点击