C语言中的预处理器
预处理程序在进入编译器之前会处理我们的程序。您可能暂时不了解它,但是很快就会明白它的意思。
如何声明?
预处理程序指令以哈希符号(#)开头。预处理程序指令是预处理程序命令。
最常见的预处理器指令是
#include
这#include是一个预处理程序指令,它使诸如“ stdio.h”的头文件对我们可用。
让我们再举一个预处理器指令的例子。
#define PI 3.14
这#define是预处理程序指令。它用于定义某些内容,例如此处我们已定义PI为3.14。因此,在进入编译器之前,如果“ PI”出现在程序中的任何位置,它将被3.14替换。
它与普通变量不同,因为普通变量是在编译期间处理的。但是,定义中的任何内容#define在编译之前都会被其值替换。
同样,#include在开始编译之前,链接任何头文件。
以下是一个C程序来查找圆的区域。#include
#define PI 3.14
int main()
{
int radius;
float area;
printf("Enter radius of circle\n");
scanf("%d", &radius);
area = PI*radius*radius;
printf("Area of circle is %.2f\n", area);
return 0;
}
您在这里应该唯一了解的是,即使在编译之前,只要程序中有PI,PI就会被3.14替换。因此,PI*radius*radius将是3.14*radius*radius。
带参数的宏
#define也可以用来编写宏定义,如下所示。宏也类似于函数,但与此有所不同。他们也可以争论。让我们看一个示例,以了解如何使用它们。
#define area(r) (3.14*r*r)
让我们看一个使用宏打印圆形区域的示例#include
#define area(r) (3.14*r*r)
int main()
{
int radius;
float area;
printf("Enter radius of circle\n");
scanf("%d", &radius);
area = area(radius);
printf("Area of circle is %.2f\n", area);
return 0;
}
我们定义了一个宏“区域”,它接受一个参数“ r”。所以,当我们叫area(radius),它得到了替换3.14*radius*radius(如area(r)为3.14*r*r)。
与area(x)在编译过程中调用的函数不同,我们代码中的任何地方,在编译之前都会被直接替换3.14*x*x。
因此,以上代码等效于:#include
int main()
{
int radius;
float area;
printf("Enter radius of circle\n");
scanf("%d", &radius);
area = 3.14*radius*radius;
printf("Area of circle is %.2f\n", area);
return 0;
}
让我们将宏与函数进行比较
我们刚刚看到了使用宏打印圆形区域的示例。现在,让我们看看使用函数的相同示例。#include
float CircleArea(int r)
{
float a;
a = 3.14*r*r;
int radius;
return a;
}
int main()
{
int radius;
float area;
printf("Enter radius of circle\n");
scanf("%d", &radius);
area = CircleArea(radius);
printf("Area of circle is %.2f\n", area);
return 0;
}
让我们看一下宏和函数之间的基本区别。
第一个区别是宏用其值替换代码(因为它用(3.14 * r * r)替换了area(r))。因此,每次都会为代码分配一些空间。这意味着每次出现area(r)时,都会在内存中分配空间。但这不是函数的情况。
其次,函数调用需要一些时间,但是在实际程序之前定义了宏。因此,宏更快。