C 预处理器和宏
C 预处理器和宏
本教程将向您介绍c预处理器,并通过示例学习#include、#define和条件编译的使用。
<图>C 预处理器是一个宏预处理器(允许您定义宏),它可以在程序编译之前对其进行转换。这些转换可以是包含头文件、宏扩展等。
所有预处理指令都以 #
开头 象征。例如,
#define PI 3.14
C预处理器的一些常见用途是:
包含头文件:#include
#include
预处理器用于将头文件包含到 C 程序中。例如,
#include <stdio.h>
这里,stdio.h
是一个头文件。 #include
预处理器指令将上述行替换为 stdio.h
的内容 头文件。
这就是你需要使用 #include <stdio.h>
的原因 在你可以使用像 scanf()
这样的函数之前 和 printf()
.
您还可以创建自己的包含函数声明的头文件,并使用此预处理器指令将其包含在您的程序中。
#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
这里,表达式 是整数类型的表达式(可以是整数、字符、算术表达式、宏等)。
仅当 表达式 时,条件代码才会包含在程序中 被评估为非零值。
可选的 #else
指令可以与 #if
一起使用 指令。
#if expression
conditional codes if expression is non-zero
#else
conditional if expression is 0
#endif
您还可以将嵌套条件添加到您的 #if...#else
使用 #elif
#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 用于测试是否定义了某个宏。它经常与 #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
推荐读物
- 线路控制
- 编译指示
- 预处理器输出
- 其他指令
C语言