10

是否可以在 C 中连接变量名?具体来说,我有一个struct包含 6 个类似变量的变量,称为class1class2class3等。

我想通过一个 for 循环来为每个变量分配一个值,但是如果不以某种方式将变量名称与 for 循环计数器的值连接起来,我就看不到如何做到这一点。

我还能怎么做?

4

5 回答 5

48

当您发现自己为变量名添加整数后缀时,认为我应该使用数组

struct mystruct {
    int class[6];
};

int main(void) {
    struct mystruct s;
    int i;
    for (i = 0; i < 6; ++i) {
        s.class[i] = 1000 + i;
    }

    return 0;
}

注意: C++ 编译器会因为class. 如果您打算将此代码编译为 C++,则需要为该字段找出一个不同的名称。

于 2009-12-02T00:26:55.753 回答
6

有一些动态语言可以做这种事情——C 不是这些语言之一。我同意 Sinan - 数组或 STL 向量是要走的路。

作为一个思想实验——如果你有 100,000 个这些变量会发生什么?你会有 100,000 行代码来初始化它们吗?

于 2009-12-02T00:29:25.420 回答
1

C 预处理器可以连接符号,但您是否考虑过只使用数组?

于 2009-12-02T00:30:31.767 回答
0

您还可以做的是编写哈希映射的实现。由于散列映射的键集(类似于变量名)不会随时间变化,因此对于每个散列映射,您可以保留其键的数组以进行有效迭代。但这完全是(疯狂的)矫枉过正,尤其是在 C 语言中;)

在 C 中几乎任何事情都是可能的,它是一门很棒的学习语言 :)

于 2009-12-02T00:35:03.630 回答
0

也许 CERT-C 安全编码规则 PRE05-C“在连接标记或执行字符串化时理解宏替换”可以帮助您。有关详细信息,请查看此链接: https ://www.securecoding.cert.org/confluence/display/seccode/PRE05-C.+Understand+macro+replacement+when+concatenating+tokens+or+performing+stringification .

简而言之,首先定义一个宏 JOIN_AGAIN(x,y) (x##y) 然后 JOIN(x,y) JOIN_AGAIN(x,y) JOIN_AGAIN 宏允许扩展将连接到变量名。

干杯皮埃尔·布伊

于 2010-02-07T08:59:05.833 回答