C语言最终讲:预处理详解

结语:这一讲是C语言基础知识的最后一讲了,后续将会学习数据结构相关的知识,坚持不易,希望各位都能坚持在自己所干的事情上,我们共勉

这一讲讲的是预处理相关的内容,上一讲虽然我们已经了解了一些关于#define相关的知识,这一讲我们讲详细阐述它的作用和缺陷

1.预定义符号

C语言中有着一些预定义符号,可以直接使用,是在预处理阶段进行处理的:

__FILE__ //进⾏编译的源⽂件
__LINE__ //⽂件当前的⾏号
__DATE__ //⽂件被编译的⽇期
__TIME__ //⽂件被编译的时间
__STDC__ //如果编译器遵循ANSI C,其值为1,否则未定义

它们的使用方法为:

int main()
{
   
	printf("%s\n", __FILE__);//打印当前文件所在的位置
	printf("%d\n", __LINE__);//打印行号
	printf("%s\n", __DATE__);//打印日期
	printf("%s\n", __TIME__);//打印时间
	//printf("%d\n", __STDC__);//err,表明VS并不完全遵循ANSI C标准

	return 0;
}

运行结果如下:
在这里插入图片描述

2.#define定义常量

我们知道,define定义的常量是直接替换的,所以有着下面的几处用法:

#define TEST 20 //方法1,直接定义常量
#define I int//方法2:可以为关键字替换成一个更简便的名字
#define CASE break;case//方法3:这是一种很“奇葩”的用法,建议还是别用了

int main()
{
   
	//使用起来也很方便,方法1:
	int a = TEST;//直接使用即可

	//方法2:
	I b = 20;
	printf("%d\n", b);

	//方法3:
	int input = 1;
	scanf("%d", &input);
	switch (input)
	{
   
	case 1:
	CASE 2 ://这样后面就不用加break了
	CASE 3 :
		break;
	}
	return 0;
}

对于加;问题,解答如下:

#define ROW 20;//假设#define定义时加上了;

int main()
{
   
	int a = ROW;//这是a就会被替换成int a = 20;;这是后面就会有两个;,特殊情况下会出现错误
	//总结:加上;可能会出现错误,不加;肯定不会出现错误,所以还是不要加上;

	return 0;
}

3.#define定义宏

定义方式:

#define name( parament-list ) stuff
name为宏名称
parament-list是由逗号隔开的符号表,可能出现在stuff中
stuff可以是一个计算方式,也可以是一个指令等等
//需要注意的是,符号表的左括号必须要和name紧密相连,否则括号里的内容也会被当成是stuff中的一部分

使用实例:

#define MUL(x) x*x//定义了一个宏,实现x的平方

int main()
{
   
	int a = 5;
	int b = MUL(a);

	printf("b = %d\n", b);
	//结果为25
	return 0;
}

看起来使用起来很好用,但是我们也要注意符号的优先级问题,如下:

#define ADD(x) x+x

int main()
{
   
	int a = 5;
	int b = ADD(a)
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值