私は逆の順序でそれを行います。
static struct option long_options[]
はwhile
ループが実行されますどのように多くの時間を一度、独立して、すべてのために宣言される変数のオプションのために使用されています。
しかし、あなたは(あなたのリンクから抽出された)、全体としてそれを見る必要があります。
...
while (1)
{
...
static struct option long_options[] =
{
/* These options set a flag. */
{"verbose", no_argument, &verbose_flag, 1}, // <-- IMPORTANT HERE !
{"brief", no_argument, &verbose_flag, 0}, // <-- IMPORTANT HERE !
/* These options don’t set a flag.
We distinguish them by their indices. */
{"add", no_argument, 0, 'a'},
{"append", no_argument, 0, 'b'},
{"delete", required_argument, 0, 'd'},
{"create", required_argument, 0, 'c'},
{"file", required_argument, 0, 'f'},
{0, 0, 0, 0}
};
...
}
...
そして、あなたの宣言のリファレンスとして変数が、この場合verbose_flag
には、それはそうでなければ、反復回数を超える利用可能であるべきです次の反復で変数を緩めて、もう存在しないものを参照します。これは未定義の動作です。そのため、verbose_flag
はファイルに対してグローバルになっています。変数がこのファイルからのみ使用可能であり、別のものからは使用できないことを保証するために静的にされます。
出典
2016-04-06 06:32:43
dkg
これは 'verbose_flag'のみをカバーし、' long_options'は少し違っていることに注意してください。 – hyde