C语言之预处理

来源:互联网 发布:淘宝下架商品怎么上架 编辑:程序博客网 时间:2024/05/21 06:39

1. 预处理概念  

       预处理是指程序在编译之前,预处理器对源代码的预处理指令进行处理(例如宏替换), 得到一份新的源代码, 编译器再对新的源代码进行编译, 如图所示: 

预处理分为宏定义、文件包含、条件编译。

       预处理指令以#开头。


2.  宏定义

     宏定义分为不带参数的宏定义和带参数的宏定义

     (1)  不带参数的宏定义

     格式: #define 宏名 字符串

     原理: 在预处理时, 预处理器将源程序中的宏定义的【宏名】全部替换为【字符串】,常用来定义常量

     范例:

#define Count 15int main (){    int sum = Count + 30;    NSLog(@"sum = %d", sum);}
      源代码经过预处理(替换)后, 会生成一份新的源代码:
int main (){    int sum = 15 + 30;    NSLog(@"sum = %d", sum);}

    

     (2)  带参数的宏定义

      格式:#define 宏名(参数列表) 字符串

     原理:预处理器会将源代码中的【宏名】替换为【字符串】, 并将字符串中的参数用宏名右边的参数列表进行替换。

     范例:

#define sum(a, b)  a+bint main (){    int result = sum(10, 20);    NSLog(@"%d", result);}
      经过预处理后的源代码:
int main (){    int result = 10+20;    NSLog(@"%d", result);}

     

     (3)  带参数的宏定义与函数有些类似, 但是本质是不同的,带参数的宏定义作用于预处理时, 而函数调用发生在运行时。带参数的宏定义比函数效率更高。

     (4) 宏定义的优点:

     一、方便程序修改

     二、提高程序的效率


3. 文件包含

    文件包含的指令是#include, 该指令可以将一个文件的内容全部拷贝到另外一个文件。

    (1)  #include <文件名>

         预处理器会直接到C语言库函数的所在头文件目录中寻找文件, 然后拷贝内容到当前文件


    (2)  #include "文件名"

         预处理器会首先到C语言库函数所在头文件目录中寻找文件,找不到就会到项目中寻找自定义的文件, 然后拷贝内容到当前文件


4. 条件编译

    程序中的部分代码在满足一定条件时,  才参与编译

    范例:

#define score 71int main (){#if score>90    NSLog(@"成绩大于90");#elif score>80    NSLog(@"成绩大于80");#else    NSLog(@"成绩小于等于80");#endif    return 0;}
   经过预处理后的源代码为:
int main (){    NSLog(@"成绩小于等于80");    return 0;}

      






0 0
原创粉丝点击