我有一个函数,可以根据另一个变量设置一个变量。
if(!button_x.on)
button_x.on = 1;
if(!button_y.on)
button_y.on = 1;
if(!button_z.on)
button_z.on = 1;
.
.
.
如果是 x, y, z, …。仅在运行时确定。对于各种(数百个)不同的情况有多个这样的条件看起来不太好。在 C 语言中是否有更好的方法来解决这个问题?
<小时/>编辑: 我应该更好地构建上面的例子。
if (!structureA.visited)
visit_structureA(); // does some operation
if (!structureB.visited)
visit_structureB();
if (!structureC.visited)
visit_structureC();
。 。 .
结构体的数量和结构体的名称在编译时是未知的。但结构名称遵循上面所示的特定模式。它仅在运行时才知道。 我尝试使用类似的宏:
#define VISIT(str) \
if (!structure##str.visited) \
visit_structure##str();
//In the function:
// str = 'known at runtime'
VISIT(str);
但这行不通,原因很明显,预处理器指令是在编译时而不是运行时替换的。不知道有没有更好的办法?
最佳答案
在您的示例中,您根据同一个变量设置一个变量值,而不是另一个变量,如果是这种情况,并且您想将其从 0 更改为 1,反之亦然,您可以无条件地执行此操作:
button_x.on = !button_x.on;
如果您有许多人具有相同的行为理念,请考虑使用数组并对其进行迭代。
关于对不同变量的条件检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10439522/