下面一段宏定义 求解释

 

这段代码在vc6.0中编译时会出现如下詭异的问题:

按照字面上理解(struct *)0表示将0强制转化为struc *型指针所指向的地址,&(((struct *)0)->e)表示取结构体指针(struct*)0的成员e的地址因为该结构体的首地址为0,所以其实就是得到了成员e距离结构体首地址的偏移量但为啥会出上述错误呢?

}

根据你的宏定义它所代表的含義就是半个大括号。

你对这个回答的评价是


这么定义宏4102的意义在于:在一个大型的项目内,代1653码被分拆给不同的人写很有可能函数/方法名是需要修改的(为了某种规范),如果不使用宏如果要改,那么修改的量是巨大的,而且可能遗漏要根据编译错误反复查找漏掉的地方,更严重的是万一有重名函数的重载找错更是麻烦。使用宏的优越性就体现出来了

你对这个回答的评价是?

下载百度知道APP搶鲜体验

使用百度知道APP,立即抢鲜体验你的手机镜头里或许有别人想知道的答案。

}

大多数预处理指令都属于下面3种の一:

对于一个宏要在哪里加圆括号有两条规则

(1)如果宏的替换列表中有运算符那么始终要将替换列表放在括号中间

(2)如果宏有参數,每个参数每次在替换列表中出现时都要放在原括号中

以上为C89的预定义宏C99还有新增的。

}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信