迭代通过定义

时间:2013-11-02 13:42:51

标签: c dynamic c-preprocessor

我正在 C 计划中工作,我遇到了一个问题。我有这个

#define NUMBER_OF_OPTIONS 5 

#define NAME_OPTION1 "Partida Rapida"
#define NAME_OPTION2 "Elige Nivel"
#define NAME_OPTION3 "Ranking"
#define NAME_OPTION4 "Creditos"
#define NAME_OPTION5 "Exit"


for (iterator = 1; iterator <= NUMBER_OF_OPTIONS; iterator++){

    menu_options[iterator-1]= NAME_OPTION + iterator
}

我希望“NAME_OPTION + iterator”获取相应#define.的值。例如,如果变量“iterator”等于1,我希望menu_options[iterator-1]取值{{1 },这是“Partida Rapida”。

我怎么能得到这个?

3 个答案:

答案 0 :(得分:3)

基本上,你不能。 {C <1}}宏由C预处理器处理,并在代码中出现该宏的任何地方进行文本替换。宏#define尚未定义,因此编译器应该抱怨。 C不允许在字符串上附加数字,或者特别是在NAME_OPTION之类的符号上添加数字。使用NAME_OPTION.数组,然后可以使用迭代器引用它。

答案 1 :(得分:2)

您不能使用定义,您可以这样做:

const char *menu_options[5] = {
   "Partida Rapida",
   "Elige Nivel",
   "Ranking",
   "Creditos",
   "Exit"
};

答案 2 :(得分:1)

如果你使用#define宏,你只需告诉预处理器在代码编译成机器代码之前用别的东西替换每个出现的定义字。 在这种情况下,NUMBER_OF_OPTIONS将被替换为5,但是没有出现NAME_OPTION *,因此不会替换任何内容,并且您可能会在预处理时遇到错误。

Piere的解决方案显示了如何做到这一点,但我非常怀疑在char *数组上有一个迭代器,所以你必须使用整数索引迭代给定的数组。