C语言——小细节和小知识4

一、#define宏定义

格式:

#define 宏名 宏体

例如:

#include <stdio.h>
#define PI 3.14

int main()
{
	int x = 2;
	double y = x + PI;
	printf("%lf",y);
	return 0;
}

运行结果:

宏定义在调用时是只替换不计算,例如下面的例子:

#include <stdio.h>
#define NUM 3.14 + 2

int main()
{
	int x = 2;
	printf("%lf",x * NUM );
	return 0;
}

实际上这里的x * NUM中的NUM是被替换成了3.14 + 2,并没有计算,所以x * NUM是变成了x * 3.14 + 2,也就是2 * 3.14 + 2,所以结果是8.28.

又如:

#include <stdio.h>
#define ADD(x,y) x * y

int main()
{
	int x = 2,y = 3;
	printf("%d",ADD(x + 2,y));
	return 0;
}

运行结果:

这里也是只替换不运算,将2,y替换成了2 * y,所以原式就变成了x + 2 * y,结果是8。

二、整型数据

我们知道int类型的范围是-32768 ~ 32767,而10!是3628800,

明显10!的大小不在int类型范围内,可是为什么下面的程序运行结果是正确的呢?

#include <stdio.h>

int main()
{
	int i = 1,factorial = 1;
	for (i = 1; i <= 10; i++)
	{
		factorial = factorial * i;
	}
	printf("%d",factorial);
	return 0;
}

原因是:虽然变量factorial的值超出了int类型的范围,但是在一些编译器中,int类型可能会自动转换为长整型(long int)类型,以容纳更大范围的整数。这种行为被称为整数提升(integer promotion)。因此,即使超出int范围,有些编译器仍可以正确打印这个结果。但是,为了编写更具移植性的代码,建议在计算可能超出int类型范围的值时,选择使用长整型(long int)或者其他适当的数据类型来避免潜在的问题。

  • 15
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值