C语言学习笔记 函数式宏
2024-08-27 12:28:32
不学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);
最新文章
- webform 分页
- eclipse导入外部jar包
- Mandelbrot和Julia
- Linux系统的中断、系统调用和调度概述【转】
- Doragon Kuesuto 1.15
- 一个令人困惑的低效SQL
- Activity和Fragment之间解耦
- [HNOI 2017]影魔
- git操作常用命令
- LinkedStack
- c# 行转列动态赋值给layui
- 转:Linux下查看tomcat占用端口
- JavaEE 之 Habernate
- 如何正确的覆盖equals和hashCode
- IO流(1)—之序列化与反序列化
- linux系统配置jdk环境
- Codeforces Round #541 (Div. 2) D 并查集 + 拓扑排序
- 基元用户模式构造--互锁构造 Interlocked 实现的异步web请求实例
- 关于UNITY学习,给新生建议
- 在ios上时间无法parse返回 ";Invalid Date";