Cで変数名を連結することは可能ですか? 具体的には、、、 などstruct
と呼ばれる 6 つの同様の変数を含む があります。class1
class2
class3
for ループを実行して各変数に値を割り当てたいのですが、変数名を for ループ カウンターの値と何らかの方法で連結しないと、その方法がわかりません。
他にどうすればこれを行うことができますか?
変数名に整数の接尾辞を追加していることに気付いたときは、 array を使用するべきだったと考えてください。
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++ としてコンパイルする場合は、そのフィールドに別の名前を付ける必要があります。
この種のことを実行できる動的言語がありますが、C はこれらの言語の 1 つではありません。私はシナンに同意します-配列またはSTLベクトルが道です。
思考実験として - これらの変数が 100,000 個あるとどうなるでしょうか? それらを初期化するのに 100,000 行のコードが必要ですか?
C プリプロセッサはシンボルを連結できますが、配列だけを使用することを考えたことはありますか?
おそらく、CERT-C セキュア コーディング ルール PRE05-C 'トークンの連結時または文字列化の実行時のマクロ置換について理解する' が役に立ちます。詳細については、次のリンクをご覧ください: https://www.securecoding.cert.org/confluence/display/seccode/PRE05-C.+Understand+macro+replacement+when+concatenating+tokens+or+performing+stringification .
要するに、最初にマクロ JOIN_AGAIN(x,y) (x##y) を定義し、次に JOIN(x,y) JOIN_AGAIN(x,y) を定義します。変数名。
乾杯ピエール・ブイ
また、ハッシュ マップの実装を作成することもできます。ハッシュ マップのキーのセット (変数名のようなもの) は時間の経過とともに変化しないため、ハッシュ マップごとに、効率的に反復するためにキーの配列を保持できます。しかし、それは、特に C では、完全に (クレイジーな) やり過ぎです ;)
C ではほとんど何でも可能です。学習するのに最適な言語です :)