Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 零长度数组_C_Arrays - Fatal编程技术网

C 零长度数组

C 零长度数组,c,arrays,C,Arrays,在C语言中使用零长度数组的优点是什么 例如: 以下是您的答案:大小为0的数组在C中无效 char bla[0]; // invalid C code 根据标准: (C99,6.7.5.2p1)“如果表达式是常数表达式,则其值应大于零。” 因此,list声明在您的程序中无效 结构的最后一个成员类型不完整的数组是灵活的数组成员 这里的body是一个灵活的数组成员。可能重复@KeithMiller:这是我的问题。哎呀,我完全误解了这个问题。我想你问过使用零长度数组的缺点是什么。通常不赞成没有任何解

在C语言中使用零长度数组的优点是什么

例如:


以下是您的答案:

大小为
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[];
};