2017-05-25 152 views
1

我不小心写了这个代码:“type var []”是什么意思?

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代码看来,括号完全被忽略。

此外编译并运行此代码segfaults。

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

+0

不知道瓦拉,但也有其他语言,允许两者表格,而且它们在这里也是相同的。 – Carcigenicate

回答

2

在var名称之后放置括号将创建一个固定大小的数组。比如你做string args[1],你会得到数组的大小1.

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

+0

尽管如此,括号内没有任何参数也没有任何意义。 –

+0

由于Vala在运行时不执行边界检查,因此您可能能够访问超出范围的数组元素。通过不指定数组的大小,您可以创建一个大小为0的数组。然后,您可以在不引发错误的情况下访问args [1],但这是非常不安全的,因为其他内容可能会使用该内存。 –

相关问题