【发布时间】:2023-04-01 11:29:01
【问题描述】:
#define BRICK_HOLLOW(I) brick_ ## I ## _hollow
#define BRICK_SOLID(I) brick_ ## I ## _solid
struct wall {
int brick_0_hollow;
int brick_0_solid;
int brick_1_hollow;
int brick_1_solid;
}mywall;
for (int i = 0; i < 2; i++)
{
mywall.BRICK_HOLLOW(i) = 20;
mywall.BRICK_SOLID(i) = 10;
}
预期输出:
上面的for循环必须扩展为
mywall.brick_0_hollow = 20
mywall.brick_0_solid = 10
mywall.brick_1_hollow = 20
mywall.brick_1_solid = 10
但代码只是将 int 替换为字符串。所以我得到了
mywall.brick_i_hollow = 20
未在结构声明中定义并引发编译错误。 有没有办法用整数值代替变量“int i”而不是使用双重间接的字符串?
【问题讨论】:
-
你可能想在你的标签中指定你正在编码的语言。所以这个问题也会出现在这个类别中。
-
否;预处理器在主编译之前运行,因此它产生的字符串是在编译器正确查看代码之前决定的。
标签: c for-loop macros int concatenation