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}
};
在我粘贴的代码中,似乎声明了一个名为“option”的结构,但我对结构名称后声明的数组感到困惑,这段代码做了什么?
感谢您的回答,请您对struct选项进行简要说明吗?它似乎已经在某个头文件中定义了一个结构。
答案 0 :(得分:2)
我完全赞同@Nicol Bolas,邮政编码,而不是图片。但是,我会告诉你这意味着什么,因为这是你在SO上的第一篇文章,可能不熟悉规则(尽管你应该read the guide以及如何编写MCVE)。
您的代码定义了struct option
和brace-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[] = {...};
答案 1 :(得分:0)
这只是声明并初始化这些结构的数组。
结构必须已在别处定义,所以现在创建它们的数组,并使用显示的值初始化每个元素(结构)。
答案 2 :(得分:0)
最后一个option
的值都设置为0
(或者,在指针的情况下,NULL
)。无论处理这个数组的代码是什么,都会期望这个标记struct
将用于标记数组的结尾,就像'\0'
对字符串(char*
)所做的一样。
从技术上讲,您可以使用sizeof(long_options) / sizeof(option)
获取此数组的大小。但是如果你将它传递给期望option*
的函数则不会;在那一点上,任何人都猜测阵列到底有多大。