解決済
C言語について教えてください。
こんにちは。C言語について教えてください。構造体のメンバには関数が使えないとのことでしたので、メンバに関数へのポインタを追加しました。
struct s{
int b;
int c;
void (*d)(void);
}a;
void e(void);
s.d = e;
(*(s.d))();
簡単に書くとこのように代入して使おうと思っていますが、
関数eの中でメンバb・cを参照したい場合はどうすればいいのでしょうか?
本末転倒ですが、eの引数に構造体を与えるしかないのでしょうか。
C言語は一応勉強したことがありますが、使ってないせいかあまり掴めていないです。
よろしくお願いいたします。
回答(1)
1.

「eの引数に構造体を与える」
か、
別の呼び出し機構でthis 的なものを用意するか
(結局同じ?)
ありがとうございました。
C言語ではあまりこういう組み方は向かないようですね。
コメント(4)
>>1
関数でthis的なものを作ろうと思ったら、結局同じように引数に構造体を与えるしか思いつきませんでした。
何かいい方法はないでしょうかね^^
あと関係ないですが、質問文のaとsが逆になっていたので修正しようとしたのですが、はねられてしいました。。
回答があると質問は修正できませんでしたっけ?
#1>何かいい方法はないでしょうかね^^
構造体の中にポインタで含められようと、結局呼び出される関数は外部(大域的な名前(GCCを除く))なので、しょうがない。
構造体との関係づけをどうするか、
簡易な方法から大がかりな方法まであるかと思うけど、(大域変数的に渡すのもなんだし)Cでは結局引数で渡すしかない(C++だって暗黙にthisが渡される)
おおがかりにすると、C++的な機構を準備することになるので
いっそ、C++を使うのがいいのかも。
#1>回答があると質問は修正できませんでしたっけ?
質問の修正は、回答がつくまでです。
気はついたけど、直接題意とは関係ないので指摘しませんでした。
Cを使っているのは、ハードウェアの開発環境にC++が無いので仕方なしに…という状況です。
昔のC++は、単なる(Cのソースをはき出す)プリプロセッサだったから、そういうのを探せばいいのかも。

