C语言 define 定义函数 - C语言零基础入门教程

目录

  • [一.define 简介]
  • [二.define 定义函数]
    • [1.define 定义不带参数的函数]
    • [2.define 定义带参数的函数]
  • [三.define 定义函数陷阱]
    • [1.define 函数陷阱一]
    • [2.define 函数陷阱一解决办法]
    • [3.define 函数陷阱二]
    • [4.define 函数陷阱二解决办法]
  • [四.猜你喜欢]

零基础 C/C++ 学习路线推荐 : [C/C++ 学习目录]>> [C 语言基础入门]

一.define 简介

[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 定义函数

1.define 定义不带参数的函数

/******************************************************************************************/

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

#define RESULT  (x*2+5)

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

2.define 定义带参数的函数

/******************************************************************************************/

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

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

三.define 定义函数陷阱

1.define 函数陷阱一

/******************************************************************************************/

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

#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,而是5??

#define RESULT(x)  x*x
RESULT(2) 等价 2*2 = 4
RESULT(2+1) 等价 2+1*2+1 = 5

2.define 函数陷阱一解决办法

/******************************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string>

#define RESULT(x)  (x)*(x)  //在参数两侧加括号

int main()
{
    printf("RESULT是:%d\n",RESULT(2));
    printf("RESULT是:%d\n",RESULT(2+1)); //等价 (2+1)*(2+1) = 9
   return 0;
}
/*
RESULT是:4
RESULT是:9
*/

3.define 函数陷阱二

/******************************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <string>
#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,而是9??

#define RESULT(x)  x*x
RESULT(2) 等价 2*2 = 4
9/RESULT(2+1) 等价 9/(2+1)*(2+1) = 5

4.define 函数陷阱二解决办法

/******************************************************************************************/

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

以上讨论说明,对于宏定义,保险的做法是不仅应在参数两侧加括号,也应在整个字符串外加括号。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙年行大运

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值