#define 定义函数

先展示代码

1.#define 定义函数,函数不带参数

#include <stdio.h>
#include <stdlib.h>

#define RESULT  (x*2+5)

int main()
{
    int x = 10;
    printf("RESULT是:%d\n",RESULT);
   return 0;
}

2.#define 定义函数,函数带参数 

#include <stdio.h>
#include <stdlib.h>

#define MAX(a,b) (a>b)?a:b  //取两个数最大值
#define MIN(a,b) (a<b)?a:b  //取两个数最小值

int main()
{
    printf("最大值是:%d\n",MAX(5,100));
    printf("最小值是:%d\n",MIN(5,100));
   return 0;
}
/*
最大值是:100
最小值是:5
*/

1.运行结果

 

2.运行结果

三.#define 定义函数陷阱

3.1你怎么理解带函数带参数,参数进入结构体中,理解的充分了吗

先上程序

#include <stdio.h>
#include <stdlib.h>

#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
*/

运行结果

 

最后一行不应该是9吗?

实际程序的过程

2+1*1+2

修改:

    printf("RESULT是:%d\n",RESULT((2+1)));
//或
#define RESULT(x)  (x)*(x)  //在参数两侧加括号

输出结果:

 

结论:

所以调用中的实参,只是实实在在的只是做了替换x和1+2,意思是当传入x的时候,x不是3就是1+2没有进行计算,那x是一个什么形参?他的形参类型是什么?挖坑这边没搞懂! 。

最好的方式是第二种解决办法,在进行结构体中,对形参打上括号这样不会出现问题。

3.2#define定义函数中有形参之防不胜防

先看代码

#include <stdio.h>
#include <stdlib.h>
#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
*/

答案是什么?

我当时感觉是1,肯定。

看看运行结果

运算结果:

问题出在哪?

#define定义的函数,还是把他理解成函数的定义和调用,应该理解成只是替换。

那这个题,计算机在计算机的角度,ta是怎么算的。

9/(2+1)*(2+1)

结果是等于9.

程序中应该怎么更改,输出1.

    printf("RESULT是:%d\n",9/(RESULT(2+1)));
//或
#define RESULT(x)  ((x)*(x))//推荐这种方法

结论:

#define RESULT(x)  ((x)*(x))//推荐这种方法

在运用#define 定义函数并且有形参的时候,形参有括号以及结构体要有括号,避免犯错。

其他作者把((x)*(x))这个叫做字符串,大家也可以理解理解。

 

 参考总结:

1.C语言 define 定义函数 - C语言零基础入门教程 - 猿说编程 - 博客园//感觉作者写的真不错

 

 

  • 14
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值