无论如何使用for循环与字符串宏?

时间:2016-08-12 04:26:21

标签: c++ macros

我有以下定义:

#define STRING_OBJECT_1 "bird"
#define STRING_OBJECT_2 "dog"
#define STRING_OBJECT_3 "cat"
#define STRING_OBJECT_4 "human"
#define STRING_OBJECT_5 "cow"
#define STRING_OBJECT_6 "snake"
#define STRING_OBJECT_7 "penguin"
#define STRING_OBJECT_8 "monkey"

我希望仅使用STRING_OBJECT编号STRING_OBJECT_ + "(number string)",因此基本上不能直接输入STRING_OBJECT_1

无论如何在C ++中使用带有字符串宏的循环吗?

2 个答案:

答案 0 :(得分:5)

  

无论如何在C ++中使用带有字符串宏的循环吗?

不,没有。

在编译源代码以创建目标代码之前处理宏。

for循环中的变量值是在运行时设置的。因此,他们无法使用宏。

最好的办法是用数组变量扩充代码,并在for循环中使用数组变量。

#define STRING_OBJECT_1 "bird"
...
#define STRING_OBJECT_8 "monkey"

std::string object_array[] = {STRING_OBJECT_1, ..., STRING_OBJECT_8};

for ( int i = 0; ... )
{
   do_something(object_array[i]);
}

答案 1 :(得分:2)

,你不能这样做。宏不属于 C / C ++ 语言。

预处理器替换为其值编译时间。您无法在运行时中更改宏。