0

在 C(使用 gcc)中,我曾经有一些数据结构是一个包含一些额外信息的数组:

struct song {
    uint tempo;
    uint key;
    note play[0]; // or play[] depending on compiler flavour
};

Iirc,这被称为“灵活数组”(http://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html#Zero-Lengthmalloc(sizeof(song)+N*sizeof(note)) ),然后我可以在运行时分配一首包含 N 个音符的歌曲。如果我这次不打算使用向量,也不打算在中引入无用的note*指针,那么 g++ 支持到什么程度song

4

2 回答 2

4

即使在 C 中,这是 undefined 和 non-portable。GCC 故意让您摆脱它,但其他实现可能不会。这是因为您正在访问超出其边界的数组。

这个“技巧”在 C++ 中与在 C 中一样有效。也就是说,可以随意在 GCC 文档中说它受支持的 GCC 中使用它,但它永远不会是“定义明确的、有效的 C++”。

于 2013-02-17T13:21:11.533 回答
-1

除了使用固定长度或音符*之外别无他法,因为编译器必须知道您的歌曲结构有多长,并且每个结构都具有相同的长度。

所以你必须使用注释*或矢量

于 2013-02-17T13:13:00.447 回答