预处理命令

源程序中以#开头的行称为预处理指令。

预处理指令并不是C语言的语法成分,而是传给编译程序的指令。

包括:

宏定义

#define

#undef

文件包含

#include

条件编译

#if

#ifdef

#else

#elif

#endif

其他

#line

#error

#pragma

在这里我们浅谈一下宏定义。

宏定义

#define指令定义一个标识符来代表一个字符串,这种标识符称为宏名,在源程序中发现该标识符时,都用该字符串替换,这种操作叫做宏替换,是在预编译的时候进行的。

不带参数的宏定义

直接看代码体会一下。

#include <iostream>
#define a cout<<r*r*3.14<<" "<<2*3.14*r
using namespace std;
int main(void)
{int r;cin>>r;a;
}

它相当于下面这个代码。

#include <iostream>
using namespace std;
int main(void)
{int r;cin>>r;cout<<r*r*3.14<<" "<<2*3.14*r;
}

就是输入圆的半径,求面积和周长。

初学者一般喜欢这样用宏定义。

#include <iostream>
#define P 3.14
using namespace std;
int main(void)
{int r;cin>>r;cout<<r*r*P<<" "<<2*P*r;
}

简单来说,宏定义就是直接替换字符串,而不对文本做任何处理。基于这样的前提,以后出现的各种问题都可以找到解释。

注意,宏没有分号结尾,除非你故意加分号,让这个分号成为替换的字符串的一部分。

宏取消

宏名的作用域是从定义开始直到所在的文件结束,如果需要终止宏,可以使用#undef命令。

#define N 666
……
#undef N

带参数的宏定义

先看代码体会一下。

#include <iostream>
#define max(a,b) (((a)>(b))?(a):(b))
using namespace std;
int main(void)
{int a,b;cin>>a>>b;cout<<max(a,b);
}

带参数的宏与函数看起来非常像,也被称为类函数宏。

但是这两个是不一样的。

就像你看上面这个代码的宏定义,是不是用了很多括号,如果a和b只是单单的一个变量而不是一堆复杂的表达式,是不用这么多括号的,因为宏定义仅仅只是简单的字符替换,就是把标识符后面的字符串简单替换标识符。

预处理命令 宏定义 #define #undef相关推荐

  1. 预处理命令 || 宏定义 || 带参数的宏定义

    #include <stdio.h>//说明:在windows 操作系统和 linux操作系统下,生成源码不一样!!!//#include <windows.h> //int ...

  2. C语言 | 预处理 | 宏定义 | #define | 定义函数

    文章目录 预处理 预处理运算符 宏定义 无参宏定义 带参宏定义 宏定义-定义函数 此文主要介绍宏定义,并在介绍宏定义时举例介绍预处理命令 预处理 参考:C 预处理器 | 菜鸟教程 重要的预处理器指令如 ...

  3. c语言宏定义在预处理阶段,预处理和宏定义

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 宏定义 基本概念预处理部分: #include #define 放在函数之外,一般都放在源文档的前面 预处理由预处理进程 ...

  4. 错误处理 宏 c语言,C语言零基础教程之预处理和宏定义篇

    https://m.toutiao.com/is/JTpvb14/ 前言 上一章节主要讲解C语言文件操作,本章节主要讲解C语言预处理和宏定义. C语言预处理 在C语言中,预处理指令是在实际源代码编译之 ...

  5. 宏定义#define整理

    一.宏定义#define 优点:一方面可以节省程序的空间上的篇幅,另外,恰当地使用宏定义可提高程序的时间效率.代码可以写的通俗易懂.可以提高程序的清晰性.可读性,使于修改移植等. 缺点:宏定义的使用实 ...

  6. 枚举(enum)、宏定义(#define)、结构体(struct)的拾遗

    1.宏定义 1.1.不带参数的宏定义 #define 标识符 字符串           例如:#define PI 3.1415926 说明: (1)宏名一般习惯用大写字母表示,但并非规定,也可以用 ...

  7. 宏定义Define的一些用法

    ---转载百度文库 一. #define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率,但学生在学习时往往不能 理解该命令的本质,总是在此处 ...

  8. [C语言]宏定义#define的使用详解

    一.宏定义定义常量 预定义符号 FILE //进行编译的源文件 LINE //文件当前的行号 DATE //文件被编译的日期 TIME //文件被编译的时间 STDC //如果编译器遵循ANSI C, ...

  9. 2020.10.19 第18节 预处理和宏定义

    2020.10.19 第18节 预处理和宏定义 一.宏定义和宏函数 1.不需要; 不是一个语句2.宏定义 #define 2.1 宏替换常量: 窗口宽和高枚举类型: 多个常量 ,一类与typedef区 ...

最新文章

  1. spark—3(Spark Scheduler)
  2. 用Scrum看板工具Leangoo做Sprint迭代管理-看板分享
  3. 忍不住也谈招聘应聘程序员的事
  4. 【实战】数据可视化系统后端开发环境搭建
  5. C#反射Assembly 具体说明
  6. 新来个技术总监:谁在用isXxx形式定义布尔类型年后不用来了
  7. python多线程文件的数据续传_python实现支持并发、断点续传的Ftp程序
  8. SDN中还有路由协议嘛?
  9. Python扩展库安装工具pip的高级用法
  10. 四阶龙格库塔法c语言程序,四阶龙格库塔法C语言(西安交大)
  11. [转载] 采访:蔡学镛谈复杂事务处理(CEP)
  12. 水哥王昱珩直播解锁华为Mate 20黑科技,超微距效果实力非凡
  13. SLT学习(二)——容器
  14. 2D Pose人体关键点实时检测(Python/Android /C++ Demo)
  15. html 字体图标转换工具,HTML5 webfont字体图标的使用
  16. python 如何安装numpy库?
  17. 终端怎么退出python命令行
  18. C++中的生僻关键字
  19. 跨平台框架这么多, 老夫无可奈何!
  20. 近两年学习Python的人越来越多,Python就业形势很好?

热门文章

  1. 女人出轨自己该怎么挽救她
  2. 计算机网络技术基础知识分享
  3. 二进制表示中质数个计算置位
  4. input 起止时间_给表单验证控件添加结束时间不得小于开始时间的验证方法
  5. android瞌睡模式,13.5.2 Done模式(瞌睡)
  6. C++11 nullptr与常量表达式constexpr记录
  7. 徐工改制方向错 外资控制徐工更是错-左大培 中国社会科学院经济研究所研究员...
  8. 计算机应用700字自我鉴定,计算机及应用专业自我鉴定范文700字
  9. Pycharm 配置pylint
  10. app嵌入广告挣钱吗_在游戏中显示广告以赚钱