是否可以在C中连接变量名?具体来说,我有一个struct
,其中包含6个类似的变量class1
,class2
,class3
等。
我想通过for循环来为每个变量分配一个值,但是如果没有以某种方式将变量名与for循环计数器的值连接起来,我就看不出怎么做。
我怎么能这样做?
答案 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