【问题标题】:Pointer to array of runtime-determined size pre-C99指向 C99 之前运行时确定大小的数组的指针
【发布时间】:2020-10-04 11:28:50
【问题描述】:

在 C99 之前,C 标准是否允许定义或转换为 指向在运行时确定长度的数组的指针?

我知道标准在 C99 之前不允许可变长度数组,但是是否允许指向运行时确定大小的数组的指针对我来说并不明显,因为编译器知道在编译时为指针分配多少内存时间,不像数组。

gcc 10.1.0 允许它,即使使用-std=c90,但我很好奇标准是否允许它,而不是特定编译器是否允许。 This question 很像,不过答案没有讲标准。

这是一个代码示例:

#include <stdio.h>

int f() {
    int a;
    scanf("%d", &a)
    return a;
}
int main() {
    int dim1 = f();
    int dim2 = 2*dim1;

    int (*p)[dim1][dim2];  // is this allowed pre-C99?
    return 0;
}

【问题讨论】:

    标签: c standards variable-length-array pointer-to-array


    【解决方案1】:

    这是违反约束的。符合标准的 C89 编译器必须为此程序发出诊断。

    3.5.4.2 数组声明符

    约束

    指定数组大小的表达式应该是一个整数常量表达式,其值大于零。

    使用 gcc 使用 -std=c90 -pedantic 来获得(大部分)符合模式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-04
      • 2022-01-02
      • 2014-07-22
      • 2010-12-21
      相关资源
      最近更新 更多