假设我使用的是具有属性的对象.比方说:形状、 colored颜色 和大小.并将每个属性作为有效选项列表.例如,形状:圆形或正方形, colored颜色 :橙色、黄色、白色或红色,大小:大、中或小.
对于每个属性,我使用C struct 来处理它们.有关简单的示例,请参阅下面的代码:
#include <stdio.h>
typedef struct {
const char* name;
const int nb;
const char* const* list;
} valid_options_t;
void print_options (const valid_options_t* option) {
printf("Option Name : %s\n",option->name);
for (int i=0; i < option->nb; i++) printf("\t%s\n",option->list[i]);
printf("---------\n");
}
int main() {
const char* const my_size_optslist[] = {"large", "medium", "small"};
const valid_options_t my_size_opts = {.name="size", .nb=3, .list=my_size_optslist};
const char* const my_color_optslist[] = {"orange", "yellow", "white", "red"};
const valid_options_t my_color_opts = {.name="color", .nb=4, .list=my_color_optslist};
const char* const my_form_optslist[] = {"circle", "square"};
const valid_options_t my_form_opts = {.name="circle", .nb=2, .list=my_form_optslist};
print_options (&my_size_opts);
print_options (&my_color_opts);
print_options (&my_form_opts);
}
属性及其选项的名称是constant个字符串,因为它们是唯一可用的(不使用枚举类型,因为这些字符串在输入文本文件中使用).Everything is known at compile time.
此代码运行良好.但我想知道是否有可能将每个选项的两个init行合并到一行中,以避免声明仅在此处使用的my_xxx_optslist
个变量.
例如,是否有可能替换
const char* const my_size_optslist[] = {"large", "medium", "small"};
const valid_options_t my_size_opts = {.name="size", .nb=3, .list=my_size_optslist};
就像这样:
const valid_options_t my_size_opts = {.name="size", .nb=3, .list={"large", "medium", "small"}};