首页 > 技术文章 > C语言学习笔记 函数式宏

luckylihuizhou 2017-02-21 14:31 原文

  不学C光搞PHP不知道还有这种东西-函数式宏,宏前面学过了Macro,编译器在对代码进行编译时会对宏表达式进行展开替换,这样宏就起到了全局变量的作用,这里函数式宏也是类似,编译器进行编译时按函数表达是进行替换展开,实现了函数的功能,不过这种函数式宏和自定义函数还是有区别的。

利用函数式宏计算两个数的平方和

#include <stdio.h>

#define squares_sum(x,y) {x*x+y*y}      //这里就是定义函数式宏,但是这里不用返回,也不用给形参指定数据类型 比如不用指明int x,int y

 

int main(void)

{

  int a=3,b=4;

  int sqsum;

  sqsum=squares_sum(a,b); //编译器解析到这里会替换展开,这和函数调用不一样。

  printf(sqsum);

  return 0;

}

//有些使用频率高且简短的函数可以考虑用函数式宏。

函数式宏有副作用,用的时候要小心,比如如果函数式宏里有;,调用的地方用的是if else 的简写模式式就会出错。

例如:

  if(1)

    函数式宏(a);     //展开时如果函数式宏的语句里有;就会造成编译错误,if else的简写模式被;破坏了

  else

    函数式宏(b);

 

推荐阅读