初学C语言时,经常会看见文件起始一句#define PI 3.1415之类的预处理语句,大部分国内教材没有再进一步介绍C其他的预处理语句。下面进行一些总结:

define

常规用法

#define macro-name replacement-text 又被称为宏替换,出现这一语句后,该语句之后所有宏均会被替换为replacement-text,包括在此文件后处理的文件。

在C程序生成流程中(C源程序->编译预处理->编译->优化程序->汇编程序->链接程序->可执行文件),宏替换发生在编译之前,可通过gcc -E选项验证。

注意,marco-name作为简单的被替换字段,无法求sizeof(),不占用运行时内存,在替换时由于编译器并不检查其所处位置,可能出现替换后运算顺序不符合预期的情况。这是一种十分隐蔽的错误。如#define x a+b。

建议在运算中使用const修饰符初始化需要的变量。

define带参数

例如#define MIN(a,b) (a

又例如#define PR(EX) cout << #EX <

这其中,“#EX”中的井号称为字符串化运算符,在预处理器中使用这个符号将把参数转换为一个字符数组。

ifdef #else #endif

用于对程序的某个部分进行有条件地编译,在调试一段代码时常用。用法:#define DEBUG // 注意不能使用NDEBUG,这是C中的关键字。

//...

#ifdef DEBUG

//调试代码,当DEBUG被define时进行编译

#else

//DEBUG没有被define时编译,可省略此部分

//...

#endif

//调试代码段结束

通过#undef DEBUG可以方便地取消标记的define。

c语言中undef,C/C++中常用的预处理方法 #define #undef #ifdef #endif相关推荐

  1. 深度学习中常用数据预处理方法

    数据归一化处理,比较简单公式为 (x-min)/(max-min),主要目的是将数据的范围缩小至0-1之间,因而对数据绝对值的大小不敏感 2.数据标准化处理,也比较简单,公式为(x-avg)/sigm ...

  2. c语言中math的库函数,C语言中math.h库中的常用函数

    C语言中math.h库中的常用函数 int abs(int i) 返回整型参数i的绝对值 double cabs(struct complex znum) 返回复数znum的绝对值 double fa ...

  3. main c语言中变量的定义,C语言中在main函数中定义的变量是全局变量么_后端开发...

    PHP 和 JavaSript 区别_后端开发 PHP是一种创建动态交互性站点的强有力的服务器端脚本语言,主要用于Web开发领域,而JavaSript是一种具有函数优先的轻量级,解释型或即时编译型的高 ...

  4. 统计计量 | 统计学中常用的数据分析方法汇总

    来源:数据Seminar本文约10500字,建议阅读15+分钟 统计学中常用的数据分析方法汇总. Part1描述统计 描述统计是通过图表或数学方法,对数据资料进行整理.分析,并对数据的分布状态.数字特 ...

  5. 5种JavaScript中常用的排序方法

    5种JavaScript中常用的排序方法 01.冒泡排序 通过相邻数据元素的交换,逐步将待排序序列变为有序序列,如果前面的数据大于后面的数据,就将两值进行交换,将数据进行从小到大的排序,这样对数组的第 ...

  6. 深度学习中常用的误差方法

    深度学习中常用的误差方法有: 标准差(Standard Deviation): 标准差也叫均方差,是方差的算术平方根,反应数据的离散程度 ,标准差越小,数据偏离平均值越小,反之亦然 . 公式为: py ...

  7. VB的一些项目中常用的通用方法-一般用于验证类

    1.VB的一些项目中常用的通用方法: ' 设置校验键盘输入值,数字 Public Function kyd(key As Integer) As Integer '20060728 Dim mycha ...

  8. 光滑噪声数据常用的方法_数据挖掘中常用的数据清洗方法

    是新朋友吗?记得先点蓝字关注我哦- 数据挖掘中 常用的数据清洗方法 在数据挖掘过程中,数据清洗主要根据探索性分析后得到的一些结论入手,然后主要对四类异常数据进行处理,分别是缺失值(missing va ...

  9. lammps和atomsk中常用的建模方法

    文章目录 1.Atomsk生成刃型位错 2.Atomsk生成任意角度晶界 3.Atomsk生成孪晶 4.Atomsk生成非晶 5.合金多晶结构建模 6.Atomsk建立管道类模型 7.Atomsk建立 ...

最新文章

  1. jbutton增加监听事件_Swing 如何进行事件监听
  2. github项目怎么运行_利用 GitHub 从零开始搭建一个博客
  3. python3(十四)Python 异常处理
  4. 集成CDI和WebSockets
  5. Windows7中右键菜单无新建文本文档选项的解决办法(注册表)
  6. 扎实基础深入篇(七):函数和类没那么复杂
  7. oracle 错误代码问题处理经验汇总
  8. stata15导入csv中文乱码
  9. 【数字通信】Matlab实现16QAM调制与解调,判决,误码率计算
  10. 医学编码与计算机,医学编码培训课件.ppt
  11. 湖州南浔张静江:“满堂花醉三千客,一剑霜寒四十州”
  12. css旋转立方体教程,通过CSS3实现旋转立方体的方法
  13. 解读:大数据分析及其数据来源
  14. jpa执行插入报error performing isolated work错误
  15. 2020李宏毅学习笔记——14.Convolution Netural Network
  16. Python新手入门指导
  17. 一口气入门计算机网络基础(CCNA)
  18. 炽热如初 向新而生|ISC2022 HackingClub白帽峰会圆满举办
  19. 汉诺塔问题及最长数组子串问题源码
  20. Java Web入门之JSTL标签的解析及使用(超详细必看)

热门文章

  1. 什么是同源策略,什么是跨域,如何解决跨域
  2. WP Rocket激活版 WordPress优化插件 v3.7.3
  3. monkey与monkeyrunner比较
  4. java如何写接口给别人调用
  5. python3中默认的字符编码和文件编码_python3 unicod,utf-8,gbk的编码和解码中文显示问题...
  6. 人工智能公司Adept完成3.5亿美元融资 要抓住ChatGPT热潮
  7. ASP.NET程序开发范例宝典
  8. 简述计算机辅助设计工作过程,选矿厂计算机辅助设计作业.doc
  9. A037_Mybatis基础
  10. Allegro技巧:删除dangling线