(1)c语言中,除了可以用 #define 定义一个标识符来表示一个常量,还可以用 #define 定义函数
例子:
//定义常量
#define MAX_VALUE 100 //定义整型变量MAX_VALUE值为100
#define USER_NAME "huge" //定义字符串变量USER_NAME值为"huge"
#define PI 3.1415926 //定义浮点数变量PI值为3.1415926
//定义函数(定义函数的种类分为带参数的函数和不带参数的函数)
①(带参数的方程)#define MAX(a,b) (a>b)?a:b //取两个数最大值
#define MIN(a,b) (a<b)?a:b //取两个数最小值
②(不带参数的方程)
#define MAX(a,b) (a>b)?a:b //取两个数最大值
#define MIN(a,b) (a<b)?a:b //取两个数最小值
注:define 定义函数陷阱
①define 函数陷阱一
#define RESULT(x) x*x
int main()
{
printf("RESULT是:%d\n",RESULT(2));
printf("RESULT是:%d\n",RESULT(2+1));
return 0;
} /* RESULT是:4
RESULT是:5 */
原因:
#define RESULT(x) x*x
RESULT(2) 等价 2*2 = 4
RESULT(2+1) 等价 2+1*2+1 = 5
解决方法
#define RESULT(x) (x)*(x) //在参数两侧加括号
printf("RESULT是:%d\n",RESULT(2));
printf("RESULT是:%d\n",RESULT(2+1)); //等价 (2+1)*(2+1) = 9
/* RESULT是:4
RESULT是:9 */
②define函数陷阱二
#define RESULT(x) (x)*(x)
int main()
{
printf("RESULT是:%d\n",RESULT(2));
printf("RESULT是:%d\n",9/RESULT(2+1));
return 0;
}
/*
RESULT是:4
RESULT是:9
*/
原因
#define RESULT(x) x*x
RESULT(2) 等价 2*2 = 4
9/RESULT(2+1) 等价 9/(2+1)*(2+1) = 9
解决方法
#define RESULT(x) ((x)*(x)) //在参数两侧加括号,整个表达式也需要加上括号
int main()
{
printf("RESULT是:%d\n",RESULT(2));
printf("RESULT是:%d\n",9/RESULT(2+1));
return 0;
}
/*
RESULT是:4
RESULT是:1
*/
————————————————
版权声明:本文为CSDN博主「猿说编程」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ZhaDeNianQu/article/details/120095018