C语言之预处理

1. 预处理概念  

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

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

       预处理指令以#开头。


2.  宏定义

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

     (1)  不带参数的宏定义

     格式: #define 宏名 字符串

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

     范例:

#define Count 15
int 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+b
int 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 71
int main ()
{
#if score>90
    NSLog(@"成绩大于90");
#elif score>80
    NSLog(@"成绩大于80");
#else
    NSLog(@"成绩小于等于80");
#endif
    return 0;
}
   经过预处理后的源代码为:
int main ()
{
    NSLog(@"成绩小于等于80");
    return 0;
}

      






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值