C语言基础专题 - 预处理

简介: C语言基础专题 - 预处理

C语言基础专题 - 预处理


1.🧐什么是预处理?

预处理是由预处理器在编译前对代码进行的文本替换。这意味着替换前的代码文本是可读性更高、写起来更方便的。

这里需要指出:

预处理器不是编译器的一部分,而是仅仅一个依据预定义规则进行文本替换的独立的代码文本替换工具。

请看这样一段代码:

/* 返回x^2 */
int square(int x) {
   return x * x;
}

上面我们定义了一个函数int square(int x),调用时我们用square(x),因而相同功能也可以用宏替换指令#define来现实:

#define square(x) ((x) * (x))   // 预处理指令`#define`用于将前者替换为后者

更常见的,我们学习C语言的入门代码Hello World.c中的第一行代码#include <stdio.h>就属于预处理指定,这条指令声明在这个地方插入别的文件中的代码,也就意味着在实际编译的时候,该指定会被替换成被插入的代码进行执行。

2.常用的预处理指令

指令 说明
#include 包含一个源代码文件
#define A B 宏定义,用于实现将A宏替换为B
#undef 取消已定义的宏
#ifdef 如果宏已经定义,则返回真
#ifndef 如果宏没有定义,则返回真
#if 如果给定条件为真,则编译下面代码
#else #if 的替代方案
#elif 如果前面的 #if 给定条件不为真,当前条件为真,则编译下面代码
#endif 结束一个 #if……#else 条件编译块
#error 当遇到标准错误时,输出错误消息
#pragma 使用标准化方法,向编译器发布特殊的命令到编译器中

3.预定义的宏

这里我们先来解释一下宏的概念:

在计算机编程中,所谓宏,指的是根据一系列预定义的规则替换一定的文本模式。实际上也就是预处理的一种方法。在C语言中,使用#define指令来定义宏,其用法和案例上面已经介绍过了,这里不再复述。

以下是系统预定义的宏,在编程时可以直接使用它们:

说明
__DATE__ 当前日期,一个以 “MMM DD YYYY” 格式表示的字符常量。
__TIME__ 当前时间,一个以 “HH:MM:SS” 格式表示的字符常量。
__FILE__ 这会包含当前文件名,一个字符串常量。
__LINE__ 这会包含当前行号,一个十进制常量。
__STDC__ 当编译器以 ANSI 标准编译时,则定义为 1。
目录
相关文章
|
2月前
|
编译器 C语言
C语言--预处理详解(1)
【10月更文挑战第3天】
|
2月前
|
编译器 Linux C语言
C语言--预处理详解(3)
【10月更文挑战第3天】
|
2月前
|
自然语言处理 编译器 Linux
【C语言篇】编译和链接以及预处理介绍(上篇)1
【C语言篇】编译和链接以及预处理介绍(上篇)
44 1
|
1月前
|
C语言
【c语言】你绝对没见过的预处理技巧
本文介绍了C语言中预处理(预编译)的相关知识和指令,包括预定义符号、`#define`定义常量和宏、宏与函数的对比、`#`和`##`操作符、`#undef`撤销宏定义、条件编译以及头文件的包含方式。通过具体示例详细解释了各指令的使用方法和注意事项,帮助读者更好地理解和应用预处理技术。
29 2
|
2月前
|
编译器 Linux C语言
【C语言篇】编译和链接以及预处理介绍(下篇)
【C语言篇】编译和链接以及预处理介绍(下篇)
37 1
【C语言篇】编译和链接以及预处理介绍(下篇)
|
2月前
|
C语言
C语言--预处理详解(2)
【10月更文挑战第3天】
|
2月前
|
编译器 C语言
C语言预处理详解
C语言预处理详解
|
2月前
|
存储 C语言
【C语言篇】编译和链接以及预处理介绍(上篇)2
【C语言篇】编译和链接以及预处理介绍(上篇)
42 0
|
4月前
|
存储 自然语言处理 程序员
【C语言】文件的编译链接和预处理
【C语言】文件的编译链接和预处理
|
4月前
|
程序员 编译器 C语言
C语言中的预处理指令及其实际应用
C语言中的预处理指令及其实际应用
97 0