C语言预编译指令

一、 预处理概念

在源代码编译成机器指令之前,都要进行预处理。

预处理阶段一般会在编译之前处理和修改C源代码。完成预处理后预处理指令就会在源代码中删除,然后才开始编译阶段。
注:预处理操作发生在编译之前。它们会修改程序语句,但不会被编译执行。

二、#include
#include<file.h> //表示在默认路径中搜索file.h 并用file.h里的内容替换 #include<file.h>
#include"file.h" //表示在当前目录里搜索file.h 并用file.h里的内容替换 #include"file.h"

三、#define
#define filenaeme “test.txt” //在预处理时 用"test.txt" 替换所有filename 并且删掉此行
#deinfe pi 3.1415926 //在预处时 用3.1415926 替换所有 pi 并且删掉此行

四、 extern
extern可以置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。(另外,在C++中extern也可用来进行链接指定。)

多重替换
一、 宏替换
支持参数替换的#define指令,我们一般称为宏指令。它也属于预处理指令。
例:
#define print_int(i) printf(“%d\n”,i)

二、 看起来像函数的宏
#define add(a,b) a+b
#define mul(a,b) a*b

三、 多行上的预处理指令
#define add(a,b)
a+b
#define mul(a,b)
a*b

四、 结合两个宏展开式的结果
int my1=111;
int my2=222;
#define cat(a,b) a##b

printf(“%d,%d”,cat(my,1),cat(my,2));

五、容易范错的宏
#define mul(a,b) ab
mul(5,3-2) //按照一般的理解应该是5
(3-2)=1 实际上替换展开后是 53-2=13
修改
#define mul(a,b) ((a)
(b))

条件预编译
一、 条件编译#if 条件
#if 表达式
代码段
#endif
//如果表达式成立则,编译代码段
注意:表达式里测试的是预处理指令赋给标识符的指定值

二、 条件编译#if defined
#if defined flag
代码段
#endif
//用于测试 flag 标识符是否被#define 指令定义过,如果定义过,则编译代码段
#if !defined flag
代码段
#endif
//用于测试 flag 标识符是否被#define 指令定义过,如果未被定义过,则编译代码段

三、 条件编译#if #else
#if 表达式
代码段1
#else
代码段2
#endif
//如果表达式成立则编译代码段1,不成立则编译代码段2

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值