不学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);