前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言带参数的宏定义:#define f(X) ((X)*(X))

C语言带参数的宏定义:#define f(X) ((X)*(X))

作者头像
用户6755376
发布2020-02-20 12:09:17
4.9K0
发布2020-02-20 12:09:17
举报

在以上知识点总结7里面,有很多同学对宏定义的理解还不是很透彻,今天以一个例题深入分析一下。没复习到的同学可以查看上面链接先熟悉一下。

首先,什么是宏定义?

2.知识点:不带参数的宏定义l 一般形式:#define 宏名 字符串(或数值)即用字符串或数值取代宏名。l 宏名一般采用大写字母表示,以与变量名区别,也可用小写字母。l 宏定义不是C语句,不必在行末加分号。l 对程序中用“”括起来的字符串内的字符,即使与宏名相同,也不进行置换。l 宏定义可以嵌套使用,例如:#define R 3.0#define PI 3.14159#define L 2*PI*R

3.知识点:带参数的宏定义l 一般形式:#define 宏名(参数表) 字符串l 带参数的宏不占运行时间,只占编译时间;只是简单、机械字符替换;宏名无类型。l 要注意有括号和没括号的区别

不带参数的宏定义比较简单,我们今天讲的是带参数的。最后红色字体提到有括号、没括号的区别。那提一个问题:怎么用宏定义表示数学上的函数 f(x)=x*x ?

有同学会说,这不简单,顺手就来:

代码语言:javascript
复制
#define f(X)  X*X 

但是,忽略了一点,宏代换是直接进行代换的。

定义

实际为

int a = f(3);

int a = 3*3;

int a = f(3+1);

int a = 3+1*3+1;

int a = f((3+1));

int a = (3+1)*(3+1);

我们在宏定义的时候尽量就避免这个问题,使用带参数的宏时,要注意参数要带上括号,最好整个宏也要带上括号:

代码语言:javascript
复制
#define f(X)  ((X)*(X))

否则,容易误导别人的同时,自己也容易出错。实际编程中,这种问题遇到的很少,一般都使用函数代替,不会有这种问题,考试时候遇到的话,只能直接带进去看了。


本公众号资源在QQ群文件群共享也可下载。

学习有困难怎么办,快来加入微信群和大家交流吧。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 计算机二级C语言 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档