C 零长度数组
在C语言中使用零长度数组的优点是什么 例如:C 零长度数组,c,arrays,C,Arrays,在C语言中使用零长度数组的优点是什么 例如: 以下是您的答案:大小为0的数组在C中无效 char bla[0]; // invalid C code 根据标准: (C99,6.7.5.2p1)“如果表达式是常数表达式,则其值应大于零。” 因此,list声明在您的程序中无效 结构的最后一个成员类型不完整的数组是灵活的数组成员 这里的body是一个灵活的数组成员。可能重复@KeithMiller:这是我的问题。哎呀,我完全误解了这个问题。我想你问过使用零长度数组的缺点是什么。通常不赞成没有任何解
以下是您的答案:大小为
0
的数组在C中无效
char bla[0]; // invalid C code
根据标准:
(C99,6.7.5.2p1)“如果表达式是常数表达式,则其值应大于零。”
因此,list
声明在您的程序中无效
结构的最后一个成员类型不完整的数组是灵活的数组成员
这里的
body
是一个灵活的数组成员。可能重复@KeithMiller:这是我的问题。哎呀,我完全误解了这个问题。我想你问过使用零长度数组的缺点是什么。通常不赞成没有任何解释的单链接回答。至少引用我的回答。同意。不幸的是,一周前我在研究同一个问题,无法更好地解释这一点,但大多数编译器都允许您侥幸逃脱,而且通常是在灵活数组成员编码之前完成的。是的,人们在使用时应该有书面体[1],但他们并不总是这样。这样的代码现在应该很少见了,所以你可能会在野外遇到它。@dmckee他们不是只让你作为结构的最后一个成员,而不是长度为0的独立数组逃脱吗?@DanielFischer依赖于编译器。有些人只是顺其自然,这样他们就不必对数组进行特殊处理。@DanielFischer:在很多情况下,能够定义一个大小为零的数组,并让它表示指向下一个结构元素所在位置的指针是很有用的。除了简单地删除在零长度数组上触发编译器错误的代码外,许多编译器不需要对典型编译器进行任何特殊处理。为什么编译器编写者要千方百计禁止可能有用的东西?我所看到的允许构造的唯一缺点是:@DanielFischer:struct{unsigned char a;unsigned char num字节[0];unsigned int num;}
这样的代码可能无法完全覆盖num
上的num
;要使其正常工作,必须在NumAsByte[0]
声明之前添加int-dummy[0]
,以强制数组的开头对齐单词。
char bla[0]; // invalid C code
struct email {
time_t send_date;
int flags;
int length;
char body[];
};