解決済

お蔵入り

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言語は一応勉強したことがありますが、使ってないせいかあまり掴めていないです。
よろしくお願いいたします。

2008-04-02 14:38の質問
プログラミング  C言語  ポインタ  関数へのポインタ  構造体  メンバ  
プログラミング
プログラミング の情報はこちらです
www.sgk.co.jp/
この質問と回答を読んで役に立った場合は「役に立つ質問」に投票してください。投票が多い質問は、役に立つ質問一覧に掲載され、より多くの人に見てもらうことができます。
Ads By Google

回答(1)

1.

2008-04-02 14:59:16ベスト
関数e から構造体s のメンバb,cには、アクセスできないと思います。
「eの引数に構造体を与える」
か、
別の呼び出し機構でthis 的なものを用意するか
(結局同じ?)
回答レベル : アドバイス

ありがとうございました。
C言語ではあまりこういう組み方は向かないようですね。

Ads By Google

コメント(4)

#1.  imq
2008-04-02 17:13:28

>>1
関数でthis的なものを作ろうと思ったら、結局同じように引数に構造体を与えるしか思いつきませんでした。
何かいい方法はないでしょうかね^^


あと関係ないですが、質問文のaとsが逆になっていたので修正しようとしたのですが、はねられてしいました。。
回答があると質問は修正できませんでしたっけ?

#2.  BLUEPIXY
2008-04-03 01:48:18

#1>何かいい方法はないでしょうかね^^
構造体の中にポインタで含められようと、結局呼び出される関数は外部(大域的な名前(GCCを除く))なので、しょうがない。
構造体との関係づけをどうするか、
簡易な方法から大がかりな方法まであるかと思うけど、(大域変数的に渡すのもなんだし)Cでは結局引数で渡すしかない(C++だって暗黙にthisが渡される)
おおがかりにすると、C++的な機構を準備することになるので
いっそ、C++を使うのがいいのかも。
#1>回答があると質問は修正できませんでしたっけ?
質問の修正は、回答がつくまでです。
気はついたけど、直接題意とは関係ないので指摘しませんでした。

#3.  imq
2008-04-03 13:56:54

Cを使っているのは、ハードウェアの開発環境にC++が無いので仕方なしに…という状況です。

#4.  BLUEPIXY
2008-04-03 15:29:29

昔のC++は、単なる(Cのソースをはき出す)プリプロセッサだったから、そういうのを探せばいいのかも。

トラックバック

トラックバックURL: