gpt4 book ai didi

c - C中空结构的大小是多少?

转载 作者:太空狗 更新时间:2023-10-29 16:24:41 25 4
gpt4 key购买 nike

根据我的说法,它是零,但似乎有点困惑 here

我已经使用 gcc 编译器对其进行了测试,它的输出为零。我知道在 C++ 中,空类的大小为 1。如果我在这里遗漏任何内容,请告诉我。

最佳答案

C 中的结构不能为空,因为语法不允许。此外,如果结构没有命名成员,则存在使行为未定义的语义约束:

struct-or-union-specifier:
struct-or-union identifieropt { struct-declaration-list }
struct-or-union identifier

struct-or-union:
struct
union

struct-declaration-list:
struct-declaration
struct-declaration-list struct-declaration

struct-declaration:
specifier-qualifier-list struct-declarator-list ;

/* type-specifier or qualifier required here! */
specifier-qualifier-list:
type-specifier specifier-qualifier-listopt
type-qualifier specifier-qualifier-listopt

struct-declarator-list:
struct-declarator
struct-declarator-list , struct-declarator

struct-declarator:
declarator
declaratoropt : constant-expression

如果你写

struct identifier { };

它会给你一条诊断信息,因为你违反了句法规则。如果你写

struct identifier { int : 0; };

然后你有一个没有命名成员的非空结构,从而使行为未定义,并且不需要诊断:

If the struct-declaration-list contains no named members, the behavior is undefined.

请注意,以下内容是不允许的,因为灵活的数组成员不能是第一个成员:

struct identifier { type ident[]; };

关于c - C中空结构的大小是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1626446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com