1.预处理概念:编译程序时,编译器将对程序文件作至少两个阶段的编译预处理,预处理程序预处理阶段和编译程序预处理阶段。

预处理程序预处理阶段:C预处理程序先于C编译程序运行。预处理程序从前向后根据预处理命令做相应的处理。预处理命令分为三类:

①文件包含命令

②宏定义命令

③条件编译命令

编译程序预处理阶段:

①将注释替换为空格字符

②将续行符连接的物理行合并成逻辑行

③将仅用空白字符分隔的多个字符串直接连接

2.文件包含命令:在预处理程序文件时,遇到包含文件预处理命令行,都用filename文件中的全部内容替代这一行,使其成为程序文件的一部分参与编译。双引号包含的文件名优先在程序文件所在的目录查找,如果找不到,再从C编译系统指定的目录中查找。

#inlcude

#include "filname.h"

3.宏定义命令:指用一个标识符来代替一个字符序列。有两种宏形式:类对象宏(object-like macro)定义与类函数宏(function-like macro)定义。前者时不带参数的宏定义形式,后者时带参数的宏定义形式。带参数宏定义中宏名和左括号之间不能有空格,右括号和宏主体之间至少有一个空格。仅有括号(没有宏参数)是允许的。

#define 宏名(宏参数1, 宏参数2, ...) 宏主体

调用形式:宏名(替换参数1, 替换参数2,...),宏参数与替换参数只有参数个数和顺序的对应关系,不存在类型一致性的问题。

#define MAX(A,B) ((A)>(B)?(A):(B))

......

源文件:x=MAX(p+q,r+s);

替换成:x=((p+q)>(r+s)?(p+q):(r+s));

......

对于出现在宏主体中的宏名,宏展开时不做任何替换;但它之前定义的宏名出现在宏主体时,宏展开要实施替换。

包含在字符串直接常量和注释中的宏调用形式不进行替换。

宏主体是由若干符号和符号的组合构成的,不能通过宏替换形成一个常数或标识符。

函数调用时,先求出实参的值然后传给形参;宏调用仅替换不求值。

4.条件编译命令:仅当指定条件为真时,#if控制结构包含的代码才被编译。主要的三种类型如下:

#ifdef 宏名

/*程序段1*/

#else

/*程序段2*/

#endif

#ifndef 宏名

/*程序段1*/

#else

/*程序段2*/

#endif

#if 表达式

/*程序段1*/

#elif 表达式

/*程序段2*/

#elif 表达式

/*程序段3*/

#else

/*程序段4*/

#endif

标签:宏名,定义,替换,C语言,编译,参数,程序段,预处理

来源: https://www.cnblogs.com/yuukirito/p/14751049.html

c语言预处理命令12个,C语言编译预处理和预处理命令相关推荐

  1. 【Go语言】【12】GO语言的结构体

    当我第一次接触到C语言时,就对结构体投入了极大的兴趣,认为这个东西以后大有作为,后来接触Java.C++,面向对象编程中的对象进入我的视线,经过了这么多年的磨练,回过头来再看结构体依旧是那么亲切:同时 ...

  2. ios c语言头文件,iOS开发 -- C语言基础12(预处理指令)

    iOS开发 -- C语言基础12(预处理指令) 宏定义 预处理指令简介 1.C语言在对源程序进行编译之前,会先对一些特殊的预处理指令作解释(比如之前使用的#include文件包含指令),产生一个新的源 ...

  3. 预处理命令不是c语言本身的组成部分,C中的预处理命令

    C中的预处理命令是由ANSIC统一规定的,但它不是C语言的本身组成部分,不能直接对它们进行编译,因为编译程序无法识别它们.必须对程序进行通常的编译(包括词法和语法分析,代码生成,优化等)之前,先对程序 ...

  4. c语言提供了三种预处理命令,9、C语言之预处理命令

    预处理命令 基本概念:ANSI C标准规定可以在C源程序中加入一些"预处理命令",以改进程序设计环境,提高编程效率. 这些预处理命令是由ANSI C同一规定的,但是它们不是C语言本 ...

  5. c语言有效的预处理命令,9、C语言之预处理命令(示例代码)

    预处理命令 基本概念:ANSI C标准规定可以在C源程序中加入一些"预处理命令",以改进程序设计环境,提高编程效率. 这些预处理命令是由ANSI C同一规定的,但是它们不是C语言本 ...

  6. c语言注释语句执行吗,C语言学习笔记之C语言概念解析(附资料分享)每一个语句都必须以分号结尾但预处理命令函数头和花括号“}”之后不能加分号...

    [[怪兽爱C语言]C语言学习笔记之C语言概念解析(附资料分享)]https://toutiao.com/group/6582429294901854728/?iid=15906422033&a ...

  7. 【C 语言】编译过程 分析 ( 预处理 | 编译 | 汇编 | 链接 | 宏定义 | 条件编译 | 编译器指示字 )

    相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...

  8. 【C语言关键知识点1】C语言的预处理、编译和链接过程

    1 引言   再一次回顾C语言的关键基础知识,今天带大家深刻的剖析一下C语言的预处理.编译(汇编)和链接的过程,以加深对C语言及编程本质的理解!   学习C语言首先要理解的就是如何将程序员输入的源代码 ...

  9. C语言设计调研报告,C语言程序设计第12章调研报告.ppt

    第12章 C语言综合应用程序示例; 一个有实用价值的C语言应用程序往往较大,需要划分成不同的模块,分配给不同的程序员去完成.因此,在实用软件的开发中,往往需要采用多模块编程技术.;2.然后用编译器进行 ...

最新文章

  1. 2015年山石网科面试题
  2. iOS开发- 相机(摄像头)获取到的图片自动旋转90度解决办法
  3. Android自定义控件入门实践之雷达扫描控件
  4. mysql in 保持顺序_IN条件结果顺序问题_MySQL
  5. java split 实现_PL/SQL实现JAVA中的split()方法的例子
  6. [编程与人生的韵味]注重实效的哲学
  7. vivado使用入门
  8. w ndows7旗舰版网卡驱动,windows7万能网卡驱动官方下载
  9. windows屏幕放大镜
  10. Jrebel 最新激活方式(2018.07.26)
  11. Powermill数控编程培训,潇洒模具三步教您精通cnc数控编程
  12. 人工智能在肿瘤成像中的临床挑战和应用
  13. Excel 标记重复多余项
  14. 关于计算机社团的游戏活动计划,社团活动策划方案趣味活动方案大全
  15. 可见性得以保障,并不意味着_更少的数据并不意味着更少的体验
  16. Thymeleaf th:each遍历,th:if、th:switch 条件判断,input,select,radio 回显赋值
  17. canvas制作简单表格
  18. 块元素div转变为行内块元素之后如何消除之间间隙
  19. vue里 a(){} 和a:()=>{}的区别
  20. 关于ChatGPT的一切;CUDA入门之矩阵乘;PyTorch 2.0发布|AI系统前沿动态

热门文章

  1. layui教程,非常全,常用代码一键复制粘贴
  2. DSG-RealSync Oracle数据库同步复制及容灾技术简述
  3. MySQL8.0安装失败
  4. 深入了解Linux内核MMU管理机制
  5. Nanopi NEO Core测试
  6. 直方图规定化(直方图匹配)
  7. TX2安装opencv3.4.0
  8. argc和argv的定义和用法
  9. SDL的教学(如何用sdl图形化以及sdl的使用思路)
  10. 关于OLEDB参数化查询【.net】