代码之家  ›  专栏  ›  技术社区  ›  Tyler Treat

在C中连接变量名?

  •  7
  • Tyler Treat  · 技术社区  · 14 年前

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

    我想通过for循环为每个变量分配一个值,但是如果不将变量名与for循环计数器的值连接起来,就看不到如何执行该操作。

    我还能怎么做?

    5 回复  |  直到 9 年前
        1
  •  43
  •   Sinan Ünür    14 年前

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

    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++,则需要为该字段找出一个不同的名称。

        2
  •  5
  •   Charlie Salts    14 年前

    在动态语言中,你可以做这类事情——C不是这些语言中的一种。我同意Sinan-阵列或STL矢量是可行的方法。

    作为一个思想实验-如果你有100000个这些变量会发生什么?您是否有100000行代码来初始化它们?

        3
  •  1
  •   amrox    14 年前

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

        4
  •  0
  •   glebm    14 年前

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

    在C语言中几乎任何事情都是可能的,这是一门很好的语言。

        5
  •  0
  •   Pierre Bui    14 年前

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

    简而言之,首先定义一个宏连接_(x,y)(x y) 然后再加入(x,y)再次加入(x,y) join_again宏允许扩展将连接到var名称的循环计数器的值。

    干杯 彼埃尔不