给定

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

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

最佳答案

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

C11-§6.7.2.1(p18)



直到C++ 14为止,灵活数组成员AFAIK才是C++标准的一部分。但是,GNU将其支持为an extension。 C和C++的行为将相似。

10-07 13:38