0

我有一个基于另一个变量设置变量的函数。

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, ...。仅在运行时确定。对于各种(100 多个)不同的情况有多个这样的条件看起来并不好。有没有更好的方法在 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);

但这显然不起作用,因为预处理器指令在编译时而不是运行时被替换。我不确定是否有更好的方法?

4

2 回答 2

1

在您的示例中,您根据相同的变量设置变量值,而不是另一个,如果是这种情况,并且您想将其从 0 更改为 1,反之亦然,您可以无条件地这样做:

button_x.on = !button_x.on;

如果您有许多具有相同行为理念的人,请考虑使用数组并对其进行迭代。

于 2012-05-03T21:26:51.517 回答
1

在 C 中,以下条件:

if (!x)
  x = 1;

相当于:

x = 1;

如果变量是布尔值(开/关),我认为如果我们谈论按钮就是这种情况。

于 2012-05-03T21:27:19.607 回答