打印
[MM32软件]

C语言预处理命令是什么?

[复制链接]
1200|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
phoenixwhite|  楼主 | 2023-10-30 07:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用库函数之前,应该用#include引入对应的头文件。这种以#号开头的命令称为预处理命令。

C语言源文件要经过编译、链接才能生成可执行程序:
1) 编译(Compile)会将源文件(.c文件)转换为目标文件。对于 VC/VS,目标文件后缀为.obj;对于GCC,目标文件后缀为.o
编译是针对单个源文件的,一次编译操作只能编译一个源文件,如果程序中有多个源文件,就需要多次编译操作。
2) 链接(Link)是针对多个文件的,它会将编译生成的多个目标文件以及系统中的库、组件等合并成一个可执行程序。

关于编译和链接的过程、目标文件和可执行文件的结构、.h 文件和 .c 文件的区别,我们将在《C语言多文件编程》专题中讲解。

在实际开发中,有时候在编译之前还需要对源文件进行简单的处理。例如,我们**自己的程序在 Windows 和 Linux 下都能够运行,那么就要在 Windows 下使用 VS 编译一遍,然后在 Linux 下使用 GCC 编译一遍。但是现在有个问题,程序中要实现的某个功能在 VS 和 GCC 下使用的函数不同(假设 VS 下使用 a(),GCC 下使用 b()),VS 下的函数在 GCC 下不能编译通过,GCC 下的函数在 VS 下也不能编译通过,怎么办呢?

这就需要在编译之前先对源文件进行处理:如果检测到是 VS,就保留 a() 删除 b();如果检测到是 GCC,就保留 b() 删除 a()。

这些在编译之前对源文件进行简单加工的过程,就称为预处理(即预先处理、提前处理)。

预处理主要是处理以#开头的命令,例如#include <stdio.h>等。预处理命令要放在所有函数之外,而且一般都放在源文件的前面。

预处理是C语言的一个重要功能,由预处理程序完成。当对一个源文件进行编译时,系统将自动调用预处理程序对源程序中的预处理部分作处理,处理完毕自动进入对源程序的编译。

编译器会将预处理的结果保存到和源文件同名的.i文件中,例如 main.c 的预处理结果在 main.i 中。和.c一样,.i也是文本文件,可以用编辑器打开直接查看内容。

C语言提供了多种预处理功能,如宏定义、文件包含、条件编译等,合理地使用它们会使编写的程序便于阅读、修改、移植和调试,也有利于模块化程序设计。

使用特权

评论回复
沙发
MessageRing| | 2023-10-30 12:04 | 只看该作者
预处理做的就是文件替换吧

使用特权

评论回复
板凳
tpgf| | 2023-11-3 17:08 | 只看该作者
C语言一共有多少种预处理功能呢

使用特权

评论回复
地板
qcliu| | 2023-11-4 13:54 | 只看该作者
我们在编写程序的时候并不用关心预处理命令是吗

使用特权

评论回复
5
drer| | 2023-11-4 14:39 | 只看该作者
预处理是C语言的一个重要功能,由预处理程序完成

使用特权

评论回复
6
wiba| | 2023-11-4 15:28 | 只看该作者
宏定义可以带有参数,宏调用时是以实参代换形参,而不是“值传送”

使用特权

评论回复
7
kxsi| | 2023-11-4 22:54 | 只看该作者
当对一个源文件进行编译时,系统将自动调用预处理程序对源程序中的预处理部分作处理,之后自动进入对源程序的编译

使用特权

评论回复
8
coshi| | 2023-11-4 23:23 | 只看该作者
预处理主要是处理以#开头的命令,预处理命令要放在所有函数之外,而且一般都放在源文件的前面

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

1159

帖子

0

粉丝