【问题标题】:Understanding to declare array length理解声明数组长度
【发布时间】:2015-09-27 18:38:37
【问题描述】:

所以,我用这个制作了一个 VLA:

int main()
{
    const size_t LEN = 200; // as I know it's read-onlyy
    int array[LEN];
}

所以我确定在 C1 中不再需要 VLA。在今天的 C99 中,它们是可选的...对于这个动机,不建议使用该代码。

但如果我这样做:

#define MYLEN 100
int main()
{
    int xar[MYLEN];
}

int main()
{
    int xar[100];
    const size_t MYLEN = sizeof(xar) / sizeof(int);
}

我想我有:

  • 在第一种情况下,我在编译时有一个常量变量,但它更符合逻辑且没有类型。
  • 在第二种情况下,类型变量(只读)

但是使用define指令更有效,因为它是C语言的典型。你建议使用什么?

反正VLA可以用在main里面但是没那么有意义。

【问题讨论】:

  • 这是基于某种观点的。
  • 很难理解您问题中的所有内容。
  • @PCLuddite 你不明白什么?
  • 考虑 this post 处理这两种方法之间的差异。

标签: c coding-style


【解决方案1】:

发布的代码没有定义 VLA,因为大小在编译时总是已知的。

这将是 VLA 的一个示例:

int myFunction( int size )
{
    int myArray[size];
}

【讨论】:

  • 为什么它们不是 VLA?
  • 这个答案是错误的。问题中的第一个版本是一个 VLA。只要[] 中的表达式依赖于一个对象,这就是一个 VLA。这就是 C 标准的定义。
  • 只是为了澄清@JensGustedt 先生所说的,const 变量不是C 中的编译时间常数,它称为const-qualified。
猜你喜欢
  • 2012-12-17
  • 2013-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-28
  • 2022-07-21
  • 2020-08-04
  • 2019-12-15
相关资源
最近更新 更多