【发布时间】:2011-02-16 15:03:22
【问题描述】:
我正在尝试将变量的值传递给 C 中的宏,但我不知道这是否可行。示例:
#include <stdio.h>
#define CONCVAR(_n) x ## _n
int main () {
int x0, x1, x2, x3, x4, x5, x6, x7, x8, x9;
int i;
for (i = 0; i <= 9; i++) CONCVAR(i) = i*5;
return 0;
}
在这里,我正在尝试使用宏为所有 x_ 变量赋值,使用 ## 标记。我知道我可以使用数组轻松实现这一点,但这仅用于学习目的。
CONCVAR(i) 被替换为 xi,而不是 x1(如果 i == 1)。我知道定义和宏是如何工作的,都是关于替换的,但我想知道是否可以将 i 的值而不是字母 i 传递给宏。
【问题讨论】:
-
你应该简单地使用数组。它永远不会以这种方式工作,即使它会,除了它只是可怕的代码之外,几乎没有什么可以从中学到的。如果您想在数组后面达到峰值,请改用指针(并为脚上的许多洞做好准备)。
-
@delnan:这看起来更像是使用/理解
##而不是使用数组的练习,但我不确定。 en.wikipedia.org/wiki/C_preprocessor#Token_concatenation -
作为一般经验法则,每个类似于函数或接受参数的宏都是不好的编程习惯。
-
@Lundin:嗯,它可以有它的用途。是的,相当罕见,在这些情况下,您可能会考虑使用具有您正在模拟的功能的高级语言 - 但与某些实际项目可能使用的三元组不同。
-
@Lundin 我知道这不是一个重要的功能,但我很好奇。
标签: c c-preprocessor