题
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)