预编译是什么意思,有什么作用?具体说明(珠海建荣笔试题)
来源:互联网 发布:厦门诚创网络怎么样 编辑:程序博客网 时间:2024/04/29 19:07
1.简单理解什么是编译?
编译就是编译源代码,将C源代码转化成.s的汇编代码。
编译器聚焦处理核心功能代码,预处理器处理剥离出来的非核心代码。
2.什么是预编译?预处理与预编译之间有什么联系?
预编译就是预处理,是为编译做准备工作的阶段。预处理器在此阶段对一些代码进行预处理。
预处理的内容包括:处理头文件包含( #include )、宏定义( #define )、条件编译( #if #else #ifdef #ifndef #elif #endif),去掉注释。
3.预编译指令有哪些?
#include 指令:
该指令指示预处理器将xxx.xxx头文件的全部内容原封不动地在此处展开。
若用<>括起文件则在系统指定的目录中寻找文件;若用" "括起文件则在当前目录中寻找文件。
#define指令:
宏定义在预处理阶段有预处理器进行替换,这个替换是原封不动地替换。
第一种是定义标识,标识有效范围为整个程序,形如#define XXX,常与#ifdef配合使用;
第二种是定义常数,如#define max 100,则max代表100(这种情况下使用const定义常数更好,原因见注1);
第三种是定义"函数",如#define get_max(a, b) ((a)>(b)?(a):(b)) 则以后使用get_max(x,y)就可以得到x和y中较大的数
带参宏、函数、内联函数:
带参宏在预处理阶段进行原封不动地替换,过程由预处理器处理,故没有调用开销,也没有传参开销。但是参数没有进行类型检查。
函数在编译阶段进行处理,程序是在调用函数时,跳转到函数中执行,过后返回函数调用的地方。函数调用是会对函数参数进行静态类型检查(传参与声明参数的类型是否一致)。
内敛函数是在预编译阶段进行处理。函数没有调用开销的同时编译器会对函数参数进行类型检查。
#if、#ifdef、#if define(x)、#else、#endif、#endif 等条件编译指令:
条件编译的应用:
编译头文件: #ifndef xxx.x #define xxx.x #endif,防止头文件重复包含;
DEBUG和RELEASE版本的程序的切换:#define #undefine / #ifdef #else #endif ;
注释一块调试程序:#if 0/1 #endif;
#ifdef 与 #if defined 的区别:
#if defined 可以组合复杂的预编译条件,#if defined(a) && defined(b) code... #endif
阅读全文
0 0
- 预编译是什么意思,有什么作用?具体说明(珠海建荣笔试题)
- Oracle 中的SID是什么意思?有什么作用?
- 存根类(stub) 是什么意思?有什么作用?
- android 编程中"<<"是什么意思?有什么作用?
- Oracle 中的SID是什么意思?有什么作用?
- Oracle 中的SID是什么意思?有什么作用?
- unity3d中烘焙是什么意思?有什么作用?
- Java中static是什么意思,有什么作用?
- sfc /scannow是什么意思,有什么作用?
- css 中的background:transparent到底是什么意思有什么作用
- css 中的background:transparent到底是什么意思有什么作用
- css 中的background:transparent到底是什么意思有什么作用
- Java中,logger.debuge是什么意思?有什么作用?
- C语言中void具体有什么作用
- C语言中void具体有什么作用
- C语言中void具体有什么作用
- tbody是什么意思.起到什么作用
- 《Java程序员面试笔试宝典》之volatile有什么作用
- Mac电脑使用:您的安全性偏好设置仅允许安装来自App Store和被认可的开发者的应用(解决方法)
- 将其他项目中的UserControl加载到工具箱中
- jsp学习笔记(二)——Javabeans
- NoClassDefFoundError错误解决方法
- 常见的异常
- 预编译是什么意思,有什么作用?具体说明(珠海建荣笔试题)
- Ubuntu 添加管理员
- Android,自定义View画圆
- 2017-10-30 3周1次课
- RxJava原理浅析
- 什么是桩代码(Stub)?
- Arrays.asList方法创建List需要注意的地方
- vue中solt 的用法
- UCMA(OCS) 开发系列之一