別の変数に基づいて変数を設定する関数があります。
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);
しかし、プリプロセッサ ディレクティブは実行時ではなくコンパイル時に置き換えられるという明らかな理由により、これは機能しません。これにはもっと良い方法があるかどうかわかりませんか?