一、前言及参考资料

C Preprocessor即所谓的C预处理器,C++也继承了C的预处理程序,但在C++语言的设计与演化一书中,C++的设计者Bjarne Strustrup提及他从未喜欢过C预处理器,认为C预处理器尤其是其中的宏定义存在许多缺陷,破坏了程序设计语言的类型系统及变量的作用域边界等等,但是语言设计者却很难为预处理中的各种功能找到具有更好结构而又高效的替代品。

我们知道在编译C/C++程序时,一般会经过预处理、编译、汇编、链接这四个阶段。

其中预处理在编译过程中发挥着不可替代作用,可以改善程序结构、完善程序功能、增强可扩展性、自动生成专为特定体系结构配置而调整的代码等,但是预处理在文本替换、名称连接、条件编译、命名空间、代码冗余等很多方面存在文法以及语义上的缺陷,从而导致所开发的软件系统重用性不高,难以对软件进行维护配置等。

C Preprocessor的基本功能包括:

1. 文件包含,#include文件包含将在预处理阶段从其他文件中复制程序正文;

2. 宏定义,#define定义的无参数宏及可变参数宏等;

3. 条件编译,#ifdef等指示字可以控制在编译过程中是否包括一些代码;

4. 控制特定的实现方式,#pragma用于设定编译器的状态或者为编译器指定与平台相关的编译处理方式。

参考资料:

1. C宏系统缺陷 https://www.cnblogs.com/cheukyin/p/4571928.html

2. C中的预处理器 https://www.xuebuyuan.com/3248462.html

3. 详解C/C++预处理器 https://blog.csdn.net/qq_22642239/article/details/80525409

最新文章

  1. Android Weekly Notes Issue #218
  2. Nginx简易配置文件(一)(静态页面及PHP页面解析)
  3. Programming with Objective-C ----------Encapsulating Data
  4. FIFO简记
  5. bjfu1287字符串输出的大水题
  6. SQL扫描并执行文件夹里的sql脚本
  7. 转: Android基于HLS和RTMP协议的第三方SDK选择
  8. poj2299解题报告(归并排序求逆序数)
  9. bzoj1027
  10. ORACLE软件下载地址
  11. Java中正则表达式的几种用法
  12. Spring与Akka的集成
  13. JMeter Concurrency Thread Group阶梯式加压
  14. Python并发解决方案
  15. Python debug 调试;
  16. 腾讯云自建MySQL数据库访问
  17. CSS------Filter属性的使用方法
  18. 《RESTful Web APIs中文版》
  19. VC2008 类型重定义的问题
  20. jsp 页面 摘要, 要截取字符串 ,当时 字符串中包含 html标签,截取后无法显示

热门文章

  1. python集合类型
  2. ARM 处理器寻址方式之间接寻址的几种表达
  3. 反爬虫——使用chrome headless时一些需要注意的细节
  4. 第一册:lesson fifty one.
  5. java时间类Date、Calendar及用法
  6. springMVC_11拦截器实现登录
  7. Elasticsearch系列(1):认识Elasticsearch
  8. viewer.js 视图预览demo
  9. POJ1743 Musical Theme(后缀数组 二分)
  10. C# RichTextBox 制作文本编辑器