在noip中,宏还是被经常采用,所以这里讲一下,C++中宏的定义与用法

  1. 第一种用法——配合条件编译:#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++中宏的定义与用法(现已被内联函数所代替)相关推荐

  1. 中谷教育Python21~24笔记——switch和内联函数

    1.首先,python并没有提供switch语句 2.python可以通过字典实现switch语句的功能.    实现方法分为两步: --首先,定义一个字典 --其次,调用字典的get()获取相应的表 ...

  2. C++中宏与内联函数

    1宏定义 C++是C的超集,C++继承了C的一个重要特性就是效率,在C中提高程序运行效率的重要手段就是宏,宏可以不用普通函数的调用但使用起来就像普通函数调用一样,宏的实现采用的是预处理器而不是编译器, ...

  3. 内联函数和宏定义函数的区别

    1.不同点: 内联函数是在编译时展开,而宏在预编译时展开:在编译的时候,内联函数直接被嵌入到目标代码中去,而宏只是一个简单的文本替换. 内联函数可以进行诸如类型安全检查.语句是否正确等编译功能,宏不具 ...

  4. 宏定义和内联函数的学习

    宏定义可以提高效率,但是宏不是函数. 预编译通过代码复制的方式代替函数调用,省去了诸如函数压栈等系统过程,从而提高了效率.但是由于宏定义仅仅是代码替换,所以引起很多问题. #define  MAX(a ...

  5. 【编程珠玑】内联函数和宏

    一,内联函数的用法 内联函数从源码层层看,有函数的结构,而在编译后,却不具备函数的性质.编译时,类似宏替换,使用函数体替换调用处的函数名.一般在代码中用inline修饰,但是能否形成内联函数,需要看编 ...

  6. C++ 内联函数详解(搞清内联的本质及用法)

    目录 一.什么是内联函数 1.直观上定义: 2.更深入的思考: 二.为什么使用内联函数 1.为什么要代替部分宏定义 2.普通函数频繁调用的过程消耗栈空间 3.更深入的思考 三.内联函数和编译过程的相爱 ...

  7. 浅析MATLAB中的内联函数、匿名函数和函数函数

    内联函数 内联(inline)函数是MATLAB 7以前经常使用的一种构造函数对象的方法.在命令窗口.程序或函数中创建局部函数时,通过使用inline构造函数,而不用将其储存为一个M文件,同时又可以像 ...

  8. 创建内联函数matlab,浅析MATLAB中的内联函数、匿名函数和函数函数

    原创,转载请注明出处--(不注明也拿你没办法) 内联函数 内联(inline)函数是MATLAB 7以前经常使用的一种构造函数对象的方法.在命令窗口.程序或函数中创建局部函数时,通过使用inline构 ...

  9. C++ 宏与内联函数

    因为函数调用需要开销(如:保护调用者的运行环境.参数传递.执行调用指令等),所以函数调用会带来程序执行效率的下降,特别是对一些小函数的频繁调用将是程序的效率有很大的降低. C++提出了两种解决方法:宏 ...

最新文章

  1. linux版_巧用linux版powershell,管理linux下的docker
  2. python适配器模式角色_Python设计模式之适配器模式原理与用法详解
  3. iOS回顾笔记( 02 ) -- 由九宫格布局引发的一系列“惨案”
  4. linux-macbook内核,技术|用 Linux 让旧 MacBook 重获新生
  5. outlook两个账号怎么分开存储邮件
  6. 作者:周园春(1975-),男,博士,中国科学院计算机网络信息中心研究员、博士生导师...
  7. 11年潜心研究产品 全屋智能品牌Aqara终于要开发布会了
  8. OC----预处理器
  9. GitHub 的替代品(国内版)
  10. 关于||逻辑或运算符运算符
  11. 计算机子网掩码在线,ip子网掩码计算器 子网掩码计算
  12. c语言swtitch输入字母输出,郝斌 C语言笔记
  13. Pownerdesigner画用例图/类图/时序图
  14. linux sd卡 分区变大,Linux下使用fdisk命令将高容量SD卡(SDHC)格成两个分区
  15. 从零开始搭建自己的网站一:整体步骤
  16. R语言 观测异常值并改进
  17. 服务器和超级计算机的性能,超级计算机和云服务器的区别
  18. 如何有效的制定团队能力提升计划?
  19. English Learning - Day6 作业打卡 2022.12.12 周一
  20. 目标网站怎么样才能收集尽可能详细信息

热门文章

  1. java中错误的源文件_如果我的Java源文件中存在语法错误,为什么Eclipse会生成.class文件?...
  2. H计算机语言吗,计算机考研面试------编程语言
  3. python typing typescript_typescript
  4. android实践练习_android 练习之路 (四)
  5. python 自定义函数导入_python如何导入自编函数模块
  6. c c 语言编程项目实例,实例分享cmake编译一个简单c++项目(demo)
  7. java 定义多个变量_学了Java才搞懂JMeter测试计划
  8. android 之日期选择器,Android GUI 之日期选择器(DatePicker)
  9. html提交按钮tab设置,html – 提交按钮没有集中,即使tabindex被正确设置
  10. static在php中,php中static关键字在类中的使用