连接C中的variables名?
是否可以连接C中的variables名? 具体来说,我有一个struct
,其中包含6个类似的variables,它称为class1
, class2
, class3
等
我想运行一个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名称。
欢呼皮埃尔·布伊