C言語のマクロで、引数によって持ってくる構造体を選ぶようなことはできますか?
やりたいことは下記のような感じです
構造体に番号がついていて指定した番号の構造体が取得したいです
配列じゃなくて、マクロでやりたいのです
好きな番号の構造体の値が取ってこれれば、出力はポインタでもコピーでも何でも良いのですが・・・
どなたか分かる方いましたらご教授いただけますと幸いです
:
:
typedef struct _HOGE {
[tab=30]int value;
}HOGE
HOGE hoge1;
HOGE hoge2;
HOGE hoge8;
void main(void) {
[tab=30]HOGE *hoge_local;
[tab=30]hoge1->value = 1;
[tab=30]hoge2->value = 2;
[tab=30]hoge8->value = 8;
[tab=30]hoge_local = GET_MACRO(8); /* こんな感じでhoge8の内容が取りたい */
[tab=30]printf("value = %d", hoge_local->value); /* こんな感じでvalue=8と出力されてほしい */
}
マクロの引数によって取ってくる変数を選ぶ
-
chilling_s
Re: マクロの引数によって取ってくる変数を選ぶ
ありがとうございます。
##8で変数名に変換できるのですね。
しかし、##はプリプロセッサディレクティブである為、固定値のみしか使えないのですよね?
8の部分を変数を使って指定したいのですが、他に代案ありますでしょうか?
説明足らず大変申し訳ありません。
##8で変数名に変換できるのですね。
しかし、##はプリプロセッサディレクティブである為、固定値のみしか使えないのですよね?
8の部分を変数を使って指定したいのですが、他に代案ありますでしょうか?
説明足らず大変申し訳ありません。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: マクロの引数によって取ってくる変数を選ぶ
>8の部分を変数を使って指定したいのですが、他に代案ありますでしょうか?
マクロでどうにかなる問題ではないので、同じ構造体で番号違いなら配列にすれば良いのではないでしょうか?
マクロでどうにかなる問題ではないので、同じ構造体で番号違いなら配列にすれば良いのではないでしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
chilling_s
Re: マクロの引数によって取ってくる変数を選ぶ
ありがとうございます。softya(ソフト屋) さんが書きました:>8の部分を変数を使って指定したいのですが、他に代案ありますでしょうか?
マクロでどうにかなる問題ではないので、同じ構造体で番号違いなら配列にすれば良いのではないでしょうか?
そうですね、マクロで簡潔にできればと思いましたが残念ながらそれはできなそうですね。
配列に出来れば良いのですが添字が大きく飛び飛びでメモリ不足になる為、NGでした。
今回は番号毎に構造体変数を1個1個定義します。
Re: マクロの引数によって取ってくる変数を選ぶ
連想配列を使用するか、chilling_s さんが書きました:配列に出来れば良いのですが添字が大きく飛び飛びでメモリ不足になる為、NGでした。
あらかじめ使用する添字が分かっていればその添字一覧を配列に格納し、二分探索で対応する位置を求める、という方法があります。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)