2016-05-09 213 views
-1
static struct option long_options[] = { 
    {"help", no_argument, 0, 'h'}, 
    {"config", required_argument, 0, 'c'}, 
    {"sampleIn", required_argument, 0, 's'}, 
    {"submitDir", required_argument, 0, 'd'}, 
    {"numEvents", required_argument, 0, 'n'}, 
    {"official", no_argument, 0, 'o'}, 
    {"noSubmit", no_argument, 0, 'x'}, 
    {0,0,0,0} 
}; 

在我貼的代碼使用的意思是,有似乎想聲明的命名「選項」一個結構,但我困惑的結構名稱後聲明數組有哪些呢這段代碼呢?這是什麼奇怪的「結構」

欣賞你的答案,你可以請一下關於結構選項的簡單解釋嗎?它看起來像一個已經在一些頭文件中定義的結構。

+3

請勿張貼的代碼的圖片。 *永遠。* –

+3

請更新我們的問題,以便代碼是問題文本的一部分。沒有理由發佈只有10行左右的代碼鏈接(不管是否是圖片)。只是把它放在問題上。 –

+0

它聲明瞭一個包含8個選項結構的數組。該數組被命名爲long_options,所以long_options [0]是第一個結構體,用第一組大括號中的參數進行初始化,long_options [1]是數組中的第二個結構體,依此類推。 –

回答

2

我完全同意@尼科爾布拉斯,郵政編碼,而不是圖片。但是,我會告訴你這是什麼意思,因爲這是你在SO上的第一篇文章,可能不熟悉規則(儘管你應該read the guide以及如何編寫MCVE)。

你的代碼定義了一個數組struct optionbrace-initializes它。該陣列被稱爲long_options。它的長度是在編譯時確定的,在你的情況下它的長度爲8.它被標記爲static,即它只在當前編譯單元中可見,或者更具體地說,它有internal linkage(除非你在函數,在這種情況下,它在函數調用中可見)。

PS:如果這是C++代碼(而不是C),則可以從該定義中省略struct,並且簡單地使用

static option long_options[] = {...}; 

在C中,則需要使用struct作爲類型的一部分,儘管。在C++中,它是可選的。

關於上次編輯:是的,類型struct option是之前(在頭文件中最有可能的)聲明,否則該聲明將已經長得很像

// defines a new struct type and brace-initializes an array of that type 
static struct option{...} long_options[] = {...}; 
0

這只是聲明和初始化這些結構的數組。

該結構必須已被別處定義,所以現在創建它們的一個數組,並且每個元素(一個結構)正在使用顯示的值進行初始化。

0

最後的option的值全部設置爲0(或者在指針的情況下爲NULL)。不管處理這個數組的代碼是什麼,都會期望這個標記struct將被用來標記數組的末尾,這與'\0'對字符串(char*)所做的很相似。

從技術上講,您可以像sizeof(long_options)/sizeof(option)那樣得到該數組的大小。但是,如果你把它傳遞給一個函數option*;在那個時候,人們猜測數組的實際大小有多大。