【问题标题】:What does "type var[]" mean?“类型 var []”是什么意思?
【发布时间】:2017-05-26 00:18:24
【问题描述】:

我不小心写了这段代码:

int main(string args[]) {
  stderr.printf ("Usage: %s", args[0]);
  return 1;
}

我的意思是:

int main(string[] args) {
  stderr.printf ("Usage: %s", args[0]);
  return 1;
}

区别在于参数的定义。奇怪的是valac 并没有抱怨第一个版本。

那么,如果我说type var[] 而不是type[] var,这对编译器意味着什么?

从生成的 C 代码看来,括号完全被忽略了。

在编译和运行此代码时也会出现段错误。

PS:我的 Vala 版本是 0.32.1(和 0.34.8 显示相同的行为)。

【问题讨论】:

  • 不知道 Vala,但还有其他语言允许这两种形式,它们在 afaik 中是等价的。

标签: arrays syntax vala


【解决方案1】:

在 var 名称之后放置方括号将创建一个固定大小的数组。例如,如果您执行string args[1],您将获得一个大小为 1 的数组。

在本教程的底部简要讨论: https://chebizarro.gitbooks.io/the-vala-tutorial/content/arrays.html

【讨论】:

  • 如果括号内没有参数,那将没有任何意义。
  • 因为 Vala 在运行时不执行边界检查,你可能能够访问超出范围的数组元素。通过不说明数组的大小,您正在创建一个大小为 0 的数组。然后您可以访问 args[1] 而不会引发错误,但这是非常不安全的,因为其他东西可能正在使用该内存。
猜你喜欢
  • 2014-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-20
  • 2018-11-24
  • 2021-06-17
  • 1970-01-01
相关资源
最近更新 更多