C预处理程序是一个宏预处理程序(允许您定义宏),可以在编译程序之前对其进行转换。这些转换可以包括头文件,宏扩展等。
所有预处理指令均以#
符号开头。例如,
#define PI 3.14
C预处理程序的一些常见用法是:
包括头文件:#include
#include
预处理程序用于将头文件包含到C程序中。例如,
#include
在这里, stdio.h
是头文件。 #include
preprocessor指令将上述行替换为stdio.h
头文件的内容。
这就是为什么在使用scanf()
和printf()
类的功能之前,需要使用#include
的原因。
您还可以创建自己的包含函数声明的头文件,并使用此预处理程序指令将其包含在程序中。
#include "my_header.h"
访问此页面以了解有关使用头文件的更多信息。
使用#define的宏
宏是被命名的代码片段。您可以使用#define
预处理程序指令在C中定义宏。
这是一个例子。
#define c 299792458 // speed of light
在这里,当我们在程序中使用c时,它将替换为299792458
。
示例1:#define预处理程序
#include
#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
#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
和#elseif
指令被使用。
#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
您还可以使用#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编程中的一些预定义宏。
Macro | Value |
---|---|
__DATE__ |
A string containing the current date |
__FILE__ |
A string containing the file name |
__LINE__ |
An integer representing the current line number |
__STDC__ |
If follows ANSI standard C, then the value is a nonzero integer |
__TIME__ |
A string containing the current date. |
示例3:使用__TIME__获取当前时间
以下程序使用__TIME__
宏输出当前时间。
#include
int main()
{
printf("Current time: %s",__TIME__);
}
输出
Current time: 19:54:39
推荐读物
- 线控
- 语
- 预处理输出
- 其他指令