【2018.10.11 C与C++基础】C Preprocessor的功能及缺陷(草稿)
一、前言及参考资料
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
最新文章
- Android Weekly Notes Issue #218
- Nginx简易配置文件(一)(静态页面及PHP页面解析)
- Programming with Objective-C ----------Encapsulating Data
- FIFO简记
- bjfu1287字符串输出的大水题
- SQL扫描并执行文件夹里的sql脚本
- 转: Android基于HLS和RTMP协议的第三方SDK选择
- poj2299解题报告(归并排序求逆序数)
- bzoj1027
- ORACLE软件下载地址
- Java中正则表达式的几种用法
- Spring与Akka的集成
- JMeter Concurrency Thread Group阶梯式加压
- Python并发解决方案
- Python debug 调试;
- 腾讯云自建MySQL数据库访问
- CSS------Filter属性的使用方法
- 《RESTful Web APIs中文版》
- VC2008 类型重定义的问题
- jsp 页面 摘要, 要截取字符串 ,当时 字符串中包含 html标签,截取后无法显示