在C中连接变量名?

时间:2009-12-02 00:25:26

标签: c variables names

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

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

我怎么能这样做?

5 个答案:

答案 0 :(得分:45)

当您发现自己在变量名称中添加整数后缀时,请考虑 我应该使用数组

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;
}

注意:由于class,C ++编译器会对此进行barf。如果您计划将此代码编译为C ++,则需要为该字段指定一个不同的名称。

答案 1 :(得分:6)

有动态语言你可以做这种事--C不是这些语言之一。我同意思南 - 数组或STL向量是可行的方法。

作为一项思想实验 - 如果您拥有100,000个变量,会发生什么?你有10万行代码来初始化它们吗?

答案 2 :(得分:1)

C预处理器可以concatenate个符号,但您是否考虑使用数组?

答案 3 :(得分:0)

您还可以做的是编写哈希映射的实现。 由于哈希映射的键集(类似于变量名称)不随时间变化,因此对于每个哈希映射,您可以保留其键的数组以便有效地迭代。 但这将是一个完全(疯狂)矫枉过正,特别是在C;)

在C语言中几乎可以做任何事情,这是一门很好的学习语言:)

答案 4 :(得分: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宏允许扩展循环couner的值,该值将连接到var名称。

干杯 Pierre Bui