前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >#define宏的边际效应

#define宏的边际效应

作者头像
Jasonangel
发布2021-05-28 10:11:34
7130
发布2021-05-28 10:11:34
举报
文章被收录于专栏:嵌入式Linux系统开发

在C语言和C++中,#define宏进行的字符替换,要注意边际效应:

举例:

#define N 2+3

我们预想的N值是5,我们这样使用N,int a = N/2;

我们预想的a的值是2.5,可实际上a的值是3.5(这样说不太恰当,因为是取整,但为了说明先这样理解)

原因在于在预处理阶段,编译器将 a = N/2处理成了 a = 2+3/2;这就是宏定义的字符串替换的“边缘效应”,因此要如下定义:#define N (2+3)

边际效应要用括号去完善

在C++中,不如直接用const,const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误(边际效应)

再来考察一题:

代码语言:javascript
复制
#include<stdio.h>

#define N 3
#define Y(n) ((N+1)*n)

int main()
{
  int z;
  z=2*(N+Y(5+1));
  printf("%d",z);
}

答案:48 (答案说明在评论区)

如果喜欢我的文章,欢迎关注、点赞和转发,下面可以留言~~~

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

本文分享自 嵌入式Linux系统开发 微信公众号,前往查看

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

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

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