C 中可以连接变量名吗?具体来说,我有一个 struct 其中包含 6 个相似的变量,称为 class1, class2, class3, , ETC。

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

我还能怎样做呢?

有帮助吗?

解决方案

当你发现自己在增加一个整数后缀的变量名,认为 我应该用一个数组

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 ++编译器将在本BARF因为class的。你需要找出一个不同的名称,该字段,如果你打算编译这段代码为C ++。

其他提示

有动态语言,你可以做这样的事情 - C是不是这些语言之一。我同意思南 - 阵列或STL的载体是去的方式

作为一个思想实验 - 如果你有这些变量100000会发生什么?你有十万行代码初始化呢?

C预处理器可以串连符号,但您刚刚使用考虑阵列

您还可以做什么,是写一个哈希表的实现。 由于密钥的集合(这将是像变量名)的哈希映射的不随时间改变,对于每一个哈希表,你可以保持它的按键阵列用于高效地迭代。 但是,这将是一个总的(疯狂)矫枉过正,特别是用C)

几乎任何有可能在C,这是一个伟大的语言学习:)

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

简而言之,首先定义一个宏join_again(x,y)(x ## y),然后加入(x,y)join_again(x,y)join_again acro允许将循环顾问的值扩展到conventectenne_again(x,y) var名称。

欢呼皮埃尔·布伊(Pierre Bui)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top