C/C++ 标准中定义的具有灵活数组成员的结构体的用法在哪里?

Gos*_*low 0 c c++ language-lawyer

如果我有这样的代码

struct s { int x; char b[]; };

int main() {
    struct s s[10];
}
Run Code Online (Sandbox Code Playgroud)

我用“gcc -O2 -W -Wall -pedantic”进行编译,然后我得到:

<source>:4:14: warning: invalid use of structure with flexible array member [-Wpedantic]
    4 |     struct s s[10];
      |              ^
Run Code Online (Sandbox Code Playgroud)

gcc 是完全正确的。具有灵活数组成员的结构不能这样工作。

C/C++ 标准中的什么地方定义了这个?

ric*_*ici 5

在 C 语言中,它是 \xc2\xa76.7.2.1,第 3 段:

\n
\n

结构或联合不得包含不完整或函数类型的成员,\xe2\x80\xa6,但具有多个命名成员的结构的最后一个成员可能具有不完整的数组类型;此类结构(以及可能递归地包含属于此类结构的成员的任何联合)不应是结构的成员或数组的元素。

\n
\n

正如@phuclv在评论中指出的那样,C++ 没有这个功能。

\n