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

最新文章

  1. webform 分页
  2. eclipse导入外部jar包
  3. Mandelbrot和Julia
  4. Linux系统的中断、系统调用和调度概述【转】
  5. Doragon Kuesuto 1.15
  6. 一个令人困惑的低效SQL
  7. Activity和Fragment之间解耦
  8. [HNOI 2017]影魔
  9. git操作常用命令
  10. LinkedStack
  11. c# 行转列动态赋值给layui
  12. 转:Linux下查看tomcat占用端口
  13. JavaEE 之 Habernate
  14. 如何正确的覆盖equals和hashCode
  15. IO流(1)—之序列化与反序列化
  16. linux系统配置jdk环境
  17. Codeforces Round #541 (Div. 2) D 并查集 + 拓扑排序
  18. 基元用户模式构造--互锁构造 Interlocked 实现的异步web请求实例
  19. 关于UNITY学习,给新生建议
  20. 在ios上时间无法parse返回 &quot;Invalid Date&quot;

热门文章

  1. C++——运算符重载
  2. LUOGU P2290 [HNOI2004]树的计数(组合数,prufer序)
  3. SqlSugar入门级教程+实例 (.net core下的)
  4. exit与return的区别
  5. 「APIO 2019」奇怪装置
  6. 13-1-return
  7. java_打印流
  8. Java开发系列-电子邮箱
  9. Android 开发 MediaRecorder使用Camera1配合录制视频
  10. 小程序怎样控制rich-text中的&lt;img&gt;标签自适应