代码之家  ›  专栏  ›  技术社区  ›  Oleksandr Novik

C中空数组的性质是什么?

  •  1
  • Oleksandr Novik  · 技术社区  · 3 年前

    #include <stdio.h>
    
    int main(void) {
        int array[0];
        printf("%d", array);
        return 0;
    }
    

    1 回复  |  直到 3 年前
        1
  •  6
  •   dbush    3 年前

    大小为0的数组被视为违反约束。所以拥有这样一个数组并尝试使用它会触发 undefined behavior .

    C standard 关于数组声明符的约束:

    除了可选的类型限定符和关键字 static [ ] * 如果表达式是常量表达式,则其值应大于零。 元素类型不得为不完整或函数类型。可选的类型限定符和关键字

    GCC将允许零长度数组作为扩展,但前提是它是 struct . 这是指定