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、…の場合。実行時にのみ決定されます。さまざまな(数百の)異なるケースに対して複数のそのような条件を持つことは見栄えがよくありません。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 に答える