连接C中的variables名?

是否可以连接C中的variables名? 具体来说,我有一个struct ,其中包含6个类似的variables,它称为class1class2class3

我想运行一个for循环来分配每个variables的值,但我不明白如何做到这一点,没有多less连接variables名称与for循环计数器的值。

我还能怎么做?

当你发现自己给variables名添加一个整数后缀时, 应该认为我应该使用一个数组

 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 ++编译器会在这里禁止。 如果您打算将此代码编译为C ++,则需要为该字段指定一个不同的名称。

有dynamic的语言,你可以做这种事情 – C不是这些语言之一。 我同意思南 – 数组或STL向量是要走的路。

作为一个思想实验 – 如果有10万个这样的variables会发生什么? 你会有100,000行代码来初始化它们吗?

C预处理器可以连接符号,但你有没有考虑过使用数组?

你也可以做的是写一个哈希映射的实现。 由于哈希映射的键集(这将像variables名称)不会随着时间而改变,因此对于每个哈希映射,您可以保留一个键数组以便高效地迭代。 但是,这将是一个完全(疯狂)的矫枉过正,尤其是在C;)

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

也许是CERT-C安全编码规则PRE05-C“在连接记号或者执行string化时理解macrosreplace”可以帮助你。 有关详细信息,请参阅以下链接: https : //www.securecoding.cert.org/confluence/display/seccode/PRE05-C.+Understand+macro+replacement+when+concatenating+tokens+or+performing+stringification 。

简而言之,首先定义一个macrosJOIN_AGAIN(x,y)(x ## y),然后JOIN(x,y)JOIN_AGAIN(x,y)JOIN_AGAINmacros允许扩展循环couner的值,该循环couner将被连接到var名称。

欢呼皮埃尔·布伊