Const 自引用结构
Const self-referential structures
我正在用 C 语言编写
我定义了一个由自引用结构构成的新类型 (noFunc_menuEntry)。
struct noFunc_menuEntry_tag {
const char *text;
struct noFunc_menuEntry_tag *up_entry;
struct noFunc_menuEntry_tag *down_entry;
struct noFunc_menuEntry_tag *back_entry;
struct noFunc_menuEntry_tag *enter_entry;
};
typedef struct noFunc_menuEntry_tag noFunc_menuEntry;
我需要像这样定义一系列变量:
menuEntry_1 = {title_1, &menuEntry_2, &menuEntry_4, &menuEntry_1, &menuEntry_5};
menuEntry_2 = {title_2, &menuEntry_3, &menuEntry_1, &menuEntry_1, &menuEntry_6};
等等。
所以我需要将变量的声明和定义分开,因为每个变量都依赖于其他变量。在头文件中我写了声明
noFunc_menuEntry menuEntry_1, menuEntry_2, menuEntry_3, menuEntry_4, menuEntry_5, menuEntry_6;
等等...,并且在函数的 .c 文件中我已经初始化了变量:
void menu_init(void)
{
menuEntry_1.text = title;
menuEntry_1.up_entry = &menuEntry_2
}
其他成员和变量依此类推。
但是我希望我的变量是 const
:
const noFunc_menuEntry menuEntry_1, menuEntry_2, menuEntry_3, menuEntry_4, menuEntry_5, menuEntry_6;
所以我的问题是关于将我定义的类型的 const
变量的声明和定义分开。我能怎么做?我做错了什么吗?
当然,如果我只是在声明中添加 const
,编译器会在我初始化变量时向我报告错误(我正在尝试编写只读变量)。
如果你想让这些变量成为const
,那么你必须在没有函数的情况下进行初始化。
但首先,让我们处理类型定义中的 const
:
typedef struct noFunc_menuEntry_tag noFunc_menuEntry;
struct noFunc_menuEntry_tag {
const char *text;
const noFunc_menuEntry *up_entry;
const noFunc_menuEntry *down_entry;
const noFunc_menuEntry *back_entry;
const noFunc_menuEntry *enter_entry;
};
然后是头文件的声明:
extern const noFunc_menuEntry menuEntry_1;
extern const noFunc_menuEntry menuEntry_2;
...
最后是源文件中的定义和初始化:
const noFunc_menuEntry menuEntry_1 = {title_1, &menuEntry_2, &menuEntry_4, &menuEntry_1, &menuEntry_5};
const noFunc_menuEntry menuEntry_2 = {title_2, &menuEntry_3, &menuEntry_1, &menuEntry_1, &menuEntry_6};
...
你可以 use an array,因为一堆 item_i
意味着你可能需要。
typedef struct noFunc_menuEntry_tag {
const char *text;
const struct noFunc_menuEntry_tag *up_entry;
const struct noFunc_menuEntry_tag *down_entry;
const struct noFunc_menuEntry_tag *back_entry;
const struct noFunc_menuEntry_tag *enter_entry;
} noFunc_menuEntry;
int main(void) {
const noFunc_menuEntry menuEntry[4] = {
{"", &menuEntry[0], &menuEntry[1], &menuEntry[2], &menuEntry[3]},
{"", &menuEntry[0], &menuEntry[1], &menuEntry[2], &menuEntry[3]},
{"", &menuEntry[0], &menuEntry[1], &menuEntry[2], &menuEntry[3]},
{"", &menuEntry[0], &menuEntry[1], &menuEntry[2], &menuEntry[3]},
};
return 0;
}
在 header 的声明中使用 extern const
。 extern
只会声明程序中使用的变量,不会分配任何内存。
然后继续在 main 中定义它
const noFunc_menuEntry menuEntry_1 = {title_1, &menuEntry_2, &menuEntry_4, &menuEntry_1, &menuEntry_5}; .. so on
我正在用 C 语言编写
我定义了一个由自引用结构构成的新类型 (noFunc_menuEntry)。
struct noFunc_menuEntry_tag {
const char *text;
struct noFunc_menuEntry_tag *up_entry;
struct noFunc_menuEntry_tag *down_entry;
struct noFunc_menuEntry_tag *back_entry;
struct noFunc_menuEntry_tag *enter_entry;
};
typedef struct noFunc_menuEntry_tag noFunc_menuEntry;
我需要像这样定义一系列变量:
menuEntry_1 = {title_1, &menuEntry_2, &menuEntry_4, &menuEntry_1, &menuEntry_5};
menuEntry_2 = {title_2, &menuEntry_3, &menuEntry_1, &menuEntry_1, &menuEntry_6};
等等。
所以我需要将变量的声明和定义分开,因为每个变量都依赖于其他变量。在头文件中我写了声明
noFunc_menuEntry menuEntry_1, menuEntry_2, menuEntry_3, menuEntry_4, menuEntry_5, menuEntry_6;
等等...,并且在函数的 .c 文件中我已经初始化了变量:
void menu_init(void)
{
menuEntry_1.text = title;
menuEntry_1.up_entry = &menuEntry_2
}
其他成员和变量依此类推。
但是我希望我的变量是 const
:
const noFunc_menuEntry menuEntry_1, menuEntry_2, menuEntry_3, menuEntry_4, menuEntry_5, menuEntry_6;
所以我的问题是关于将我定义的类型的 const
变量的声明和定义分开。我能怎么做?我做错了什么吗?
当然,如果我只是在声明中添加 const
,编译器会在我初始化变量时向我报告错误(我正在尝试编写只读变量)。
如果你想让这些变量成为const
,那么你必须在没有函数的情况下进行初始化。
但首先,让我们处理类型定义中的 const
:
typedef struct noFunc_menuEntry_tag noFunc_menuEntry;
struct noFunc_menuEntry_tag {
const char *text;
const noFunc_menuEntry *up_entry;
const noFunc_menuEntry *down_entry;
const noFunc_menuEntry *back_entry;
const noFunc_menuEntry *enter_entry;
};
然后是头文件的声明:
extern const noFunc_menuEntry menuEntry_1;
extern const noFunc_menuEntry menuEntry_2;
...
最后是源文件中的定义和初始化:
const noFunc_menuEntry menuEntry_1 = {title_1, &menuEntry_2, &menuEntry_4, &menuEntry_1, &menuEntry_5};
const noFunc_menuEntry menuEntry_2 = {title_2, &menuEntry_3, &menuEntry_1, &menuEntry_1, &menuEntry_6};
...
你可以 use an array,因为一堆 item_i
意味着你可能需要。
typedef struct noFunc_menuEntry_tag {
const char *text;
const struct noFunc_menuEntry_tag *up_entry;
const struct noFunc_menuEntry_tag *down_entry;
const struct noFunc_menuEntry_tag *back_entry;
const struct noFunc_menuEntry_tag *enter_entry;
} noFunc_menuEntry;
int main(void) {
const noFunc_menuEntry menuEntry[4] = {
{"", &menuEntry[0], &menuEntry[1], &menuEntry[2], &menuEntry[3]},
{"", &menuEntry[0], &menuEntry[1], &menuEntry[2], &menuEntry[3]},
{"", &menuEntry[0], &menuEntry[1], &menuEntry[2], &menuEntry[3]},
{"", &menuEntry[0], &menuEntry[1], &menuEntry[2], &menuEntry[3]},
};
return 0;
}
在 header 的声明中使用 extern const
。 extern
只会声明程序中使用的变量,不会分配任何内存。
然后继续在 main 中定义它
const noFunc_menuEntry menuEntry_1 = {title_1, &menuEntry_2, &menuEntry_4, &menuEntry_1, &menuEntry_5}; .. so on