
C 预处理器是一个宏处理器(允许您定义宏),它在您的程序被编译之前对其进行转换。这些转换可以是头文件的包含、宏展开等。
所有预处理指令都以 #
符号开头。例如,
#define PI 3.14
C 预处理器的某些常见用途是
包含头文件:#include
#include
预处理器用于包含 C 程序中的头文件。例如,
#include <stdio.h>
在这里,stdio.h
是一个头文件。#include
预处理器指令将上述行替换为 stdio.h
头文件的内容。
这就是为什么您需要在可以使用 scanf()
和 printf()
等函数之前使用 #include <stdio.h>
。
您还可以创建自己的包含函数声明的头文件,并使用此预处理器指令将其包含在您的程序中。
#include "my_header.h"
访问此页面了解更多关于 使用头文件的信息。
使用 #define 定义宏
宏是给定名称的代码片段。您可以使用 #define
预处理器指令在 C 中定义宏。
这是一个例子。
#define c 299792458 // speed of light
在这里,当我们在程序中使用 c 时,它会被替换为 299792458
。
示例 1:#define 预处理器
#include <stdio.h>
#define PI 3.1415
int main()
{
float radius, area;
printf("Enter the radius: ");
scanf("%f", &radius);
// Notice, the use of PI
area = PI*radius*radius;
printf("Area=%.2f",area);
return 0;
}
类似函数的宏
您还可以定义宏,这些宏的作用类似于函数调用。这被称为类函数宏。例如,
#define circleArea(r) (3.1415*(r)*(r))
每次程序遇到 circleArea(argument)
时,它都会被替换为 (3.1415*(argument)*(argument))
。
假设我们传递 5 作为参数,那么它会像下面这样展开
circleArea(5) expands to (3.1415*5*5)
示例 2:使用 #define 预处理器
#include <stdio.h>
#define PI 3.1415
#define circleArea(r) (PI*r*r)
int main() {
float radius, area;
printf("Enter the radius: ");
scanf("%f", &radius);
area = circleArea(radius);
printf("Area = %.2f", area);
return 0;
}
访问此页面了解更多关于 宏和 #define 预处理器的信息。
条件编译
在 C 语言编程中,您可以指示预处理器是否包含代码块。为此,可以使用条件指令。
这类似于 if
语句,但有一个主要区别。
if
语句在执行时进行测试,以检查是否应执行代码块,而条件指令用于在执行之前包含(或跳过)程序中的代码块。
条件指令的用途
- 根据机器、操作系统使用不同的代码
- 将相同的源文件编译到两个不同的程序中
- 从程序中排除某些代码,但将其保留作为将来使用的参考
如何使用条件指令?
要使用条件指令,会使用 #ifdef
、#if
、#defined
、#else
和 #elif
指令。
#ifdef 指令
#ifdef MACRO
// conditional codes
#endif
在这里,仅当定义了 MACRO 时,条件代码才包含在程序中。
#if、#elif 和 #else 指令
#if expression
// conditional codes
#endif
在这里,expression 是一个整数类型的表达式(可以是整数、字符、算术表达式、宏等)。
仅当 expression 被评估为非零值时,条件代码才包含在程序中。
可选的 #else
指令可以与 #if
指令一起使用。
#if expression
conditional codes if expression is non-zero
#else
conditional if expression is 0
#endif
您还可以使用 #elif
将嵌套条件添加到您的 #if...#else
中
#if expression
// conditional codes if expression is non-zero
#elif expression1
// conditional codes if expression is non-zero
#elif expression2
// conditional codes if expression is non-zero
#else
// conditional if all expressions are 0
#endif
#defined
特殊运算符 #defined 用于测试某个宏是否已定义。它经常与 #if 指令一起使用。
#if defined BUFFER_SIZE && BUFFER_SIZE >= 2048
// codes
预定义宏
以下是 C 语言编程中的一些预定义宏。
宏 | 值 |
---|---|
__DATE__ |
一个包含当前日期的字符串。 |
__FILE__ |
一个包含文件名的字符串。 |
__LINE__ |
一个表示当前行号的整数。 |
__STDC__ |
如果遵循 ANSI 标准 C,则该值为非零整数。 |
__TIME__ |
一个包含当前时间的字符串。 |
示例 3:使用 __TIME__ 获取当前时间
下面的程序使用 __TIME__
宏输出当前时间。
#include <stdio.h>
int main()
{
printf("Current time: %s",__TIME__);
}
输出
Current time: 19:54:39