我有一个根据另一个变量设置变量的函数。
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,......仅在运行时确定。对于各种(100s)不同的情况具有多个这样的条件看起来不好。在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)
在您的示例中,您根据相同的变量而不是另一个变量设置变量值,如果是这种情况,并且您想要将其从0更改为1,反之亦然,您可以无条件地执行此操作:< / p>
button_x.on = !button_x.on;
如果您有许多具有相同行为概念的人,请考虑使用数组并迭代它。
答案 1 :(得分:1)
在C中,以下条件:
if (!x)
x = 1;
相当于:
x = 1;
如果变量是布尔值(开/关),我假设是在讨论按钮的情况。