预处理功能是C语言的重要功能。

问:为什么要预处理,什么是预处理?

答:我们知道高级语言的运行过程是通过编译程序(编译器)把源代码翻译成机器语言,实现运行的。编译程序的工作包含:语法分析、词法分析、代码生成、代码优化等。但是在正式编译之前还有一些工作要做,例如:去掉注释、变换格式之类的。C语言允许在源程序中包含预处理命令,正式编译(词法分析)前,先对这些命令进行“预处理”;然后在进行通常的编译处理。预处理命令从语法上讲不是C语言的一部分,但扩展了C语言程序设计的环境,简化程序开发过程;有利于移植和调试C语言程序。

预处理命令的定义:

以#开头,换行符结尾的行称为预处理命令;预处理命令不是C语言的语法成分,而是传给编译程序的各种指令;预处理命令分为三种:宏定义、文件包含、条件编译

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

宏定义

定义一个标识符来代表一个字符串;这种标识符称为宏名(macro name);

在源程序中发现该标识符时,都用该字符串替换,形成新的源程序;将标识符替换成指定字符串的过程称为宏替换(macro substitution);

宏替换的操作是在预编译时进行的;

说白了就是将一个变量强制定义为你想要的值。

注意点:

1)全部用大写,以便与变量区分,帮助读者快速识别;
2)最好把所有宏定义命令放在文件的最前面;

如果需要终止宏的作用域,可以使用#undef命令;格式为: #undef 标识符

应用举例:

#define PI 3.14 就是将PI的值定义成3.14,这样在程序里看到PI就可以替换成3.14了

参考链接:

#define的用法详解:https://www.cnblogs.com/shmilxu/p/4837373.html

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

文件包含:

用法:

#include <包含文件名>    或    #include "包含文件名"

作用:

将另一个文件全部包含进来;

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

条件编译:

一般情况下,源程序中所有的语句都参加编译;但是有时候也希望根据一定的条件去编译源文件的不同部分;

有时候一个C文件会多次包含同一个头文件,就可能出现重复定义的问题;

这时候可以通过条件编译来避免重复定义(重复包含);

#ifndef __headerfileXXX__

#define __headerfileXXX__

  …

  文件内容

  …

#endif

#ifndef 和 #endif 要一起使用,如果丢失#endif,可能会报错。

参考链接:

#ifndef, #define, #endif 作用:https://www.cnblogs.com/challenger-vip/p/3386819.html

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

最新文章

  1. 1.ASP.NET MVC使用EPPlus,导出数据到Excel中
  2. cron 任务
  3. RansomNote
  4. HDU4008 Parent and son(树形DP LCA)
  5. java 除法向上,向下取整
  6. ReactiveCocoa常见操作方法介绍/MVVM架构思想
  7. Python中Unicode字符串
  8. 利用ADO.NET导出大批量数据
  9. JAVA Lambda Expressions streams
  10. ref和out的区别
  11. C++输入结束
  12. Install Orace 11g on Solaris 10 Sparc 64 bit
  13. MUI初始化滚动区域
  14. 基础SELECT示例掌握
  15. fio——IO基准测试
  16. ES6标准之基础
  17. python代码格式检查工具部署pre_commit
  18. QT_校园导航Update
  19. 修改git用户密码
  20. 使用JavaScript完成文字向上间歇滚动

热门文章

  1. ImageView 的 ScaleType
  2. Ros学习——roslaunch
  3. STM32 C++编程 003 USART(串口)类
  4. Luogu 3761 [TJOI2017]城市
  5. oracle数据库之多表查询二
  6. C++ string操作(转载)
  7. [raspberry pi3] 串口线使用
  8. 类的继承与super()的意义以即如何写一个正确的异常类
  9. Fragment之间通过add切换时的显示与隐藏
  10. Zoey.Dapper--Dapper扩展之把SQL语句放到文件中