質問
Cで変数名を連結することは可能ですか?具体的には、私は struct
これには 6 つの同様の変数が含まれており、 class1
, class2
, class3
, 、など。
for ループを実行して各変数に値を割り当てたいのですが、何らかの方法で変数名と for ループ カウンターの値を連結せずにそれを行う方法がわかりません。
他にどうやってこれを行うことができますか?
解決
あなた自身が変数名に整数の接尾辞を追加見つかったら、と思うの の私はのの配列を使用している必要があります。
struct mystruct {
int class[6];
};
int main(void) {
struct mystruct s;
int i;
for (i = 0; i < 6; ++i) {
s.class[i] = 1000 + i;
}
return 0;
}
注:のC ++コンパイラが原因class
の本で嘔吐します。あなたがC ++として、このコードをコンパイルすることを計画している場合、そのフィールドに別の名前を把握する必要があります。
他のヒント
あなたはこの種のものを行うことができます動的言語があります。私はシナンに同意する - 配列やSTLベクトルが移動するための方法です。
。思考実験として - あなたはこれらの変数10万を持っている場合、何が起こるのでしょうか?あなたはそれらを初期化するコードの100,000行を持っていますか?
Cプリプロセッサは CONCATENATE のシンボルができますが、あなただけの使用を検討しています配列?
あなたも何ができるか、ハッシュマップの実装を記述しています。 ハッシュマップのキーのセット(つまり、変数名のようになります)時間の経過とともに変化しないため、各ハッシュマップのためにあなたが効率的に反復するためにそのキーの配列を保つことができます。 しかし、それは、合計(クレイジー)やり過ぎだろう、特にCで;)
ほとんど何でもそれは学ぶために偉大な言語ですが、Cで可能です。)
おそらく、CERT-C セキュア コーディング ルール PRE05-C「トークンの連結または文字列化の実行時のマクロ置換について理解する」が役に立つかもしれません。詳細については、次のリンクを参照してください。https://www.securecoding.cert.org/confluence/display/seccode/PRE05-C.+理解+マクロ+置換+いつ+連結+トークン+または+実行+文字列化.
要するに、最初にマクロjoin_again(x、y)(x ## y)を定義し、[x、y)join_again(x、y)join_again macroを使用すると、ループカウンダーの値を拡張できます。 var名。
乾杯 ピエール・ブイ