C++中宏的定义与用法(现已被内联函数所代替)
在noip中,宏还是被经常采用,所以这里讲一下,C++中宏的定义与用法
- 第一种用法——配合条件编译:#define DEBUG
定义一个叫DEBUG的标识符。它应该与#ifdef或#ifndef配合使用。举例如下:
#define DEBUG
#ifdef DEBUGvoid print(int v) { cout << v << endl;}
#elsevoid print(int) {}
#endif
如果符号DEBUG存在,那么编译器会编译上面的、能输出数值的print,否则编译器编译下面的、什么事情都不做的print。
把上面的#ifdef换成#ifndef,那么编译的代码正好上面所说的相反。
2.第二种用法——表达式:
#define N 5000
编译时,编译器会用类似于“查找和替换”的方法,把代码中的N换成5000。如果需要换成表达式,应该用括号把它们包围。例如:
#define a 1+2
#define b (1+2)
c=a*2; d=b*2;
编译时上面一行会变成“c=1+2*2; d=(1+2)*1;”,显然它们的值是不同的。
此外,要注意表达式末尾不能有分号(除非你需要)。
3.第三种用法——简易“函数”:
#define FtoC(a) (((a)-32)/9*5)
这类似于一个函数。不过,由于编译器只是进行简单替换,所以为了安全,a、b应该用括号包围,整个表达式也应该用括号包围。
这种“函数”用法和普通函数一样,且速度更快。然而,它很容易出现难以查出的错误。所以,请用内联函数(inline)代替宏定义。
注意,不要在“参数”中改变变量的值!
4.第四种用法——简化一段代码:
#define move(dx, dy) if (isfull(dir)) return; \if (map(x+dx, y+dy)=='0') \{ \push(dir,x+dx,y+dy,head[dir], dep); \check(dir); \}
不要忘记每行后面的“\”,它相当于换行符。这次move简化了一大段代码。当然,在c++中内联函数也可以实现这种功能的。
转载于:https://www.cnblogs.com/jjzzx/p/5122494.html
C++中宏的定义与用法(现已被内联函数所代替)相关推荐
- 中谷教育Python21~24笔记——switch和内联函数
1.首先,python并没有提供switch语句 2.python可以通过字典实现switch语句的功能. 实现方法分为两步: --首先,定义一个字典 --其次,调用字典的get()获取相应的表 ...
- C++中宏与内联函数
1宏定义 C++是C的超集,C++继承了C的一个重要特性就是效率,在C中提高程序运行效率的重要手段就是宏,宏可以不用普通函数的调用但使用起来就像普通函数调用一样,宏的实现采用的是预处理器而不是编译器, ...
- 内联函数和宏定义函数的区别
1.不同点: 内联函数是在编译时展开,而宏在预编译时展开:在编译的时候,内联函数直接被嵌入到目标代码中去,而宏只是一个简单的文本替换. 内联函数可以进行诸如类型安全检查.语句是否正确等编译功能,宏不具 ...
- 宏定义和内联函数的学习
宏定义可以提高效率,但是宏不是函数. 预编译通过代码复制的方式代替函数调用,省去了诸如函数压栈等系统过程,从而提高了效率.但是由于宏定义仅仅是代码替换,所以引起很多问题. #define MAX(a ...
- 【编程珠玑】内联函数和宏
一,内联函数的用法 内联函数从源码层层看,有函数的结构,而在编译后,却不具备函数的性质.编译时,类似宏替换,使用函数体替换调用处的函数名.一般在代码中用inline修饰,但是能否形成内联函数,需要看编 ...
- C++ 内联函数详解(搞清内联的本质及用法)
目录 一.什么是内联函数 1.直观上定义: 2.更深入的思考: 二.为什么使用内联函数 1.为什么要代替部分宏定义 2.普通函数频繁调用的过程消耗栈空间 3.更深入的思考 三.内联函数和编译过程的相爱 ...
- 浅析MATLAB中的内联函数、匿名函数和函数函数
内联函数 内联(inline)函数是MATLAB 7以前经常使用的一种构造函数对象的方法.在命令窗口.程序或函数中创建局部函数时,通过使用inline构造函数,而不用将其储存为一个M文件,同时又可以像 ...
- 创建内联函数matlab,浅析MATLAB中的内联函数、匿名函数和函数函数
原创,转载请注明出处--(不注明也拿你没办法) 内联函数 内联(inline)函数是MATLAB 7以前经常使用的一种构造函数对象的方法.在命令窗口.程序或函数中创建局部函数时,通过使用inline构 ...
- C++ 宏与内联函数
因为函数调用需要开销(如:保护调用者的运行环境.参数传递.执行调用指令等),所以函数调用会带来程序执行效率的下降,特别是对一些小函数的频繁调用将是程序的效率有很大的降低. C++提出了两种解决方法:宏 ...
最新文章
- linux版_巧用linux版powershell,管理linux下的docker
- python适配器模式角色_Python设计模式之适配器模式原理与用法详解
- iOS回顾笔记( 02 ) -- 由九宫格布局引发的一系列“惨案”
- linux-macbook内核,技术|用 Linux 让旧 MacBook 重获新生
- outlook两个账号怎么分开存储邮件
- 作者:周园春(1975-),男,博士,中国科学院计算机网络信息中心研究员、博士生导师...
- 11年潜心研究产品 全屋智能品牌Aqara终于要开发布会了
- OC----预处理器
- GitHub 的替代品(国内版)
- 关于||逻辑或运算符运算符
- 计算机子网掩码在线,ip子网掩码计算器 子网掩码计算
- c语言swtitch输入字母输出,郝斌 C语言笔记
- Pownerdesigner画用例图/类图/时序图
- linux sd卡 分区变大,Linux下使用fdisk命令将高容量SD卡(SDHC)格成两个分区
- 从零开始搭建自己的网站一:整体步骤
- R语言 观测异常值并改进
- 服务器和超级计算机的性能,超级计算机和云服务器的区别
- 如何有效的制定团队能力提升计划?
- English Learning - Day6 作业打卡 2022.12.12 周一
- 目标网站怎么样才能收集尽可能详细信息
热门文章
- java中错误的源文件_如果我的Java源文件中存在语法错误,为什么Eclipse会生成.class文件?...
- H计算机语言吗,计算机考研面试------编程语言
- python typing typescript_typescript
- android实践练习_android 练习之路 (四)
- python 自定义函数导入_python如何导入自编函数模块
- c c 语言编程项目实例,实例分享cmake编译一个简单c++项目(demo)
- java 定义多个变量_学了Java才搞懂JMeter测试计划
- android 之日期选择器,Android GUI 之日期选择器(DatePicker)
- html提交按钮tab设置,html – 提交按钮没有集中,即使tabindex被正确设置
- static在php中,php中static关键字在类中的使用