2016-05-09 12 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} 
}; 

のこの奇妙な用法の平均値は、「オプション」という名前の宣言構造体へのようにあるようですが、私は構造体名の後に宣言された配列について混乱しています何このコードは何ですか?何、私が貼り付けたコードで「構造体」

あなたの回答をお待ちしておりますが、structオプションについての簡単な説明がありますか?これは、いくつかのヘッダーファイルで既に定義されている構造体のようです。

+3

のように見えただろうとはい、タイプstruct optionは、(ヘッダファイルの中で最も可能性の高い)の前に宣言されました。 *これまで* –

+3

私たちの質問を更新してください。コードは質問のテキストの一部です。 10行程度しかないコード(画像でもそうでなくても)へのリンクを投稿する理由はありません。ちょうど質問に入れてください。 –

+0

8つのオプション構造体の配列を宣言しています。配列の名前はlong_optionsなので、long_options [0]は最初の構造体で、最初の中カッコの引数で初期化され、long_options [1]は配列内の2番目の構造体などです。 –

答えて

2

私は@Nicol Bolasと完全に同意します。郵便番号、写真ではありません。しかし、これはあなたの最初の投稿であり、規則に精通していない可能性があります(read the guideでも、MCVEを書くべきですが)。

コードでは、struct optionbrace-initializesの配列が定義されています。配列はlong_optionsと呼ばれます。その長さはコンパイル時に決定されます。あなたのケースでは長さが8です。それはstaticとマークされています。つまり、現在のコンパイル単位でのみ表示されます。またはもっと技術的にはinternal linkageです。この場合、関数呼び出しの間に表示されます)。

PS:これはC++のコード(およびないC)である場合は、定義からstructを省略することができ、単にCでは、あなたががタイプの一環としてstructを使用する必要が

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

使用。 C++では、オプションです。あなたの最後の編集について

:そう宣言は、コードの画像を投稿しないでください

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

これは、これらの構造体の配列を宣言して初期化することです。

構造体は別の場所に定義されている必要があります。したがって、構造体の配列が作成され、各要素(構造体)が示された値で初期化されています。

0

最後のoptionの値はすべて0(またはポインタの場合はNULL)に設定されています。この配列を処理しているコードが何であれ、'\0'が文字列(char*)の場合と同じように、このセンチネルstructが配列の最後をマークするために使用されることが予想されます。

技術的には、この配列のサイズはそのままsizeof(long_options)/sizeof(option)で取得できます。しかし、あなたがそれをoption*を期待する関数に渡すならば、そうではありません。その時点で、アレイの実際の大きさは誰でも推測できます。

関連する問題