程序预处理阶段,在做什么

目录

1.条件编译

2.源文件包含

3.宏替换

4.行控制

5.抛错

6.杂注


 

C语言的编译链接过程要把我们编写的一个c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接。

预处理指令包括条件编译源文件包含宏替换行控制抛错杂注空指令

1.条件编译

条件编译的功能是根据条件有选择性的保留或者放弃源文件中的内容。常见的条件包含#if、#ifdef、#ifndef指令开始,以#endif结束。用#undef 指令可对用#define定义的标识符取消定义。

#if defined(CREDIT)
    credit();
#elif defined(DEBIT)
    debit();
#else
    printerror();
#endif

2.源文件包含

源文件包含指令的功能是搜索指定的文件,并将它的内容包含进来,放在当前所在的位置。源文件包含有两种,包含系统文件以及用户自定义文件。

#include <xxxx.h> : 让C编译器去系统目录下查找相关文件

#include  "xxxx.h":让C编译器去用户目录下查找相关文件

3.宏替换

宏的作用是把一个标识符指定为其他一些成为替换列表的预处理记号,当这个标识符出现在后面的文本中时,将用对应的预处理记号把它替换掉,宏的本质是替换。

宏的定义分为两种方式:有参和无参。

1)无参数的宏(对象式宏定义)

#define VERSION "0.0.1"

2)有参数的宏(函数式宏定义)

#define MAX(a,b) ((a)>(b)?(a):(b))

了解更多的使用方法可以:C语言中宏定义的盲区

4.行控制

行控制指令以"#"和“line”引导,后面是行号和可选的字面串。它用于改变预定义宏"__LINE__"的值,如果后面的字面串存在,则改变“__FILE__”的值。

如下列显示,#line修改了行号,下一行就是显示该行号。

5.抛错

抛错指令是以“#”和“error”引导,抛错指令用于在预处理期间发出一个诊断信息,在停止转换。抛错是人为的动作

如下列,编译器会判断提示。

6.杂注

杂注指令用于向C实现传递额外的信息(编译选项),对程序的某些方面进行控制。

杂注指令以“#”开始,跟着“pragma”,后面是其他预处理记号,即所谓的选项。下面这个杂注用于指示C实现将结构成员对齐到字节边界。

# pragma pack(1)

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值