关于c语言和c++中sizeof(struct)的问题

qq_40162781 2019-04-09 08:49:37
有段这样的程序在c语言中可以编译通过但是在c++编译不过请问c和c++中的这段代码有什么区别?

#define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); }))

BUILD_BUG_ON_ZERO(0);报错

另外对于位域内变量为0的情况,C++使用sizeof得到的值是1,而C语言是0,等待大神解惑
...全文
271 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhn-csdn 2019-04-09
  • 打赏
  • 举报
回复
sizeof 在 c 和 c++ 中是有所区别的。 1、 c中,可以在 sizeof 中直接定义一个 struct 类型,而 c++ 中不可以。 c++ 中,需要先把类型定义后,再使用 sizeof(类型名) 2、 sizeof(成员空间的0的结构体类型), c中,结果为0 而 c++中,结果为 1 3、 sizeof(void) c中,可以,结果为 1, c++中,不可以,编译会报错。
qq_40162781 2019-04-09
  • 打赏
  • 举报
回复
引用 1 楼 636f6c696e 的回复:
https://blog.csdn.net/Study_2011/article/details/11546899?locationNum=5&fps=1 C++标准中规定,“no object shall have the same address in memory as any other variable” ,就是任何不同的对象不能拥有相同的内存地址。 如果空类大小为0,若我们声明一个这个类的对象数组,那么数组中的每个对象都拥有了相同的地址,这显然是违背标准的。
多谢解疑,但是就算给空的类增加了字节,应该也是不会报错的吧? 使用g++编译的错误提示是: "types may not be defined in ‘sizeof’ expressions"
636f6c696e 2019-04-09
  • 打赏
  • 举报
回复
https://blog.csdn.net/Study_2011/article/details/11546899?locationNum=5&fps=1 C++标准中规定,“no object shall have the same address in memory as any other variable” ,就是任何不同的对象不能拥有相同的内存地址。 如果空类大小为0,若我们声明一个这个类的对象数组,那么数组中的每个对象都拥有了相同的地址,这显然是违背标准的。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧