c语言中 12,12-C语言中的预处理器

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)时,都会在内存中分配空间。但这不是函数的情况。

其次,函数调用需要一些时间,但是在实际程序之前定义了宏。因此,宏更快。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值