当前位置: 首页 > 知识库问答 >
问题:

具有灵活数组成员的结构的大小

齐意致
2023-03-14

给予

struct Foo {
    uint32_t a;
    uint32_t b[];
};

什么是sizeof(Foo)?它是实现定义的还是未定义的行为?C和C的答案不同吗?

共有1个答案

邓俊英
2023-03-14

编译器将忽略柔性数组成员,因为它不存在。

C11-§6.7。2.1(第18页)

[...]在大多数情况下,柔性阵列部件被忽略。特别地,结构的尺寸就好像柔性阵列构件被省略了一样,除了它可能具有比省略所暗示的更多的尾随填充[...]。

另外,直到C14,柔性阵列成员才是C标准的一部分。但是,GNU支持将其作为扩展。C和C的行为相似。

 类似资料:
  • 问题内容: 我已经开始使用dirent.h库,并且遇到了“ struct dirent”构造函数的一个非常有用的成员,该结构在我的书中构造了dirent * p-> d_name。但是不幸的是,它没有声明该结构的任何其他成员; 我想知道这个结构的成员还有什么用? 问候 问题答案: 该结构是指目录条目。 http://www.gnu.org/software/libc/manual/html_nod

  • 问题内容: 我有字符串: 某种数据可能是字符串: 我如何将其全部转换为上述数组? ) 谢谢帮忙,PK 问题答案: 给定值 这里有一些我可以满足您需要的代码¹: ¹实际上,它的作用还不止于此:它可以简单地封装在一个函数中,并且可以在所有三个输入值上进行配置(您可以将一个具有现有值的数组传递给它,并在必要时对其进行扩展)。

  • 我遇到了一个语法问题。看另一个StackOverflow答案并不能给出一个适用于我的问题的答案。至少不是我能理解的。 我的计划程序类: 这一切都编译得很好,但问题在于调用该函数中的成员函数指针: 编译这个会给我带来错误; 其他尝试: 有人能帮我解释一下我缺了什么知识吗?

  • 为了节省内存(是的,它很重要),如果为false,我想省略浮动。由于中还有很多其他内容,因此最好的方法如下所示: 不过,据我所知,在C++中没有零大小的类型。唯一的例外似乎是“灵活数组成员”,所以我也许可以做一些类似的事情: 只不过它们只在C99中得到支持,而不是在C++中得到支持。 标准的解决方案似乎是使用继承,因为基类可以是零大小的,但是我的结构也可以由程序集访问,为了使程序集更简单,如果在结

  • 我试图将一些代码从joda时间移植到java时间。 如果您对传入日期格式没有任何控制,因为它是用户提供的,这就使得何时调用变得非常困难。 是否有任何解决办法,在这里我可以指定一些东西,比如通用回退日期,如果没有指定,格式化程序将使用其值,或者当格式化程序中指定回退值时,我如何配置根本不使用的回退值? 下面是最小的、完整的和可验证的示例。 无法分析文本“2018/12/06”:发现冲突:1970年与

  • 在IBM连接中,可以添加一个组(在LDAP目录或类似目录中定义)作为活动成员。 是否可以使用社交业务工具包JavaSDK完成此操作?如果有,如何? 我可以在Javadocs中看到一个方法 这需要实例,而构建似乎需要用户id。 使用搜索组名不会返回任何结果,我也看不到任何其他方法来查找组的用户id。 编辑: 我的一个同事的相关注释:连接也允许将社区添加为活动成员,我们也看不到如何在SBT中做到这一点