预编译是什么意思,有什么作用?具体说明(珠海建荣笔试题)

来源:互联网 发布:厦门诚创网络怎么样 编辑:程序博客网 时间: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
原创粉丝点击