借用百度中对宏定义的描述:
define,宏定义,C语言中预处理命令一种。分为无参宏定义和带参宏定义。
无参宏定义的一般形式为:#define 宏名 字符串;
带参宏定义的一般形式为:#define 宏名(参数表) 字符串;
宏定义可以将程序中对宏的使用全部替换成它所代表的字符串。我们举一个无参宏定义的例子:我们将PI定义为3.14。在预编译时,主函数中的PI直接替换为3.14。需要注意的是,预编译又叫预处理。预编译不是编译,而是编译前的处理。这个操作是在正式编译之前由系统自动完成的。
#include<stdio.h>
#define PI 3.14
int main()
{
int r = 2; //半径为2
double perimeter = 2 * PI * r; //直径
printf("周长为%f\n", perimeter);
return 0;
}
输出结果:
周长为12.560000
这里我们再举一个带参数的例子:
#include<stdio.h>
#define perimeter(r) 2*3.14*r
int main()
{
int r = 2; //半径为2
printf("周长为%f\n", perimeter(r));
return 0;
}
周长为12.560000
需要注意的是宏定义是直接替换,所以在定义时尽量加上括号。看下面的例子。
按照我们的正常的想法,在调用我们宏定义的area时,r是形参,应该是1+1=2。所以计算结果看起来是3.14 * 2 * 2=12.56。但实际的结果却是5.14。这是因为宏定义只是简单的替换,它只会将我们的r整体替换成1+1,所以这个式子就变成了3.14 * 1+1 * 1+1=5.14。
#include<stdio.h>
#define area(r) 3.14*r*r
int main()
{
printf("面积为%f\n", area(1+1));
return 0;
}