这次不讲算法了,讲一讲C语言里面一个很强大的功能:宏。
宏,是一个大家都很熟悉的概念,很多人也经常使用宏,但是用的都不怎么深,我所知道的最常见的用法就是用宏抽象数组长度。
#define N 99
a[N] = {0};
实际上,宏就是简单的替换,编译器在编译程序时,遇到N,会将其替换成99。
那么下面来看这段代码:
#define sqrt(x) x*x
sqrt(5);
sqrt(3+2);
这里就出现了问题,sqrt(5)的结果是25没错,但是sqrt(3+2)的结果错误,为什么呢?注意,前面说过,宏是简单替换sqrt(3+2)替换后变成3+2*3+2,所以结果是11,想要结果正确,需要这样定义宏:
#define sqrt(x) (x)*(x)
这样就没问题了。
当然,宏很强大,还有很多其他的功能。比方说转换字符串,在讲这个知识点前,我想问大家,我们该如何创建一个如:”“”“”“”“”“”“”;全是引号的字符串?很容易可以想到使用转义,但是转义是不是太麻烦了?所以下面介绍一种新方法: