2017-05-25 148 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],但這是非常不安全的,因爲其他內容可能會使用該內存。 –

相關問題