C言語なら俺に聞け! Part 122

このエントリーをはてなブックマークに追加
658デフォルトの名無しさん
引数の値によって処理の異なる関数を呼び出すことは出来ますか。
if文を使わずに計算コストを掛けないのがいいです。
659デフォルトの名無しさん:2006/02/23(木) 00:59:06
でき
660デフォルトの名無しさん:2006/02/23(木) 00:59:46
関数のポインタの配列やswitchじゃ不満なのかね
661デフォルトの名無しさん:2006/02/23(木) 01:00:19
不満です
662デフォルトの名無しさん:2006/02/23(木) 01:01:04
>>658
できる
663デフォルトの名無しさん:2006/02/23(木) 01:03:02
>>661
理由を書けや糞野郎
664658:2006/02/23(木) 01:03:06
やり方教えてください。
マクロを使って置き換えられないかと思ったのですが出来ませんでした。
665デフォルトの名無しさん:2006/02/23(木) 01:04:47
sprintf(array,"%s%s",*array,"追加文字");
のような処理がしたいのですが、これだとarrayの同一アドレスを参照することにより
エラーが発生するのだと思うのですが、このような追加処理をする関数ってありますか?
666658:2006/02/23(木) 01:05:18
#define fnc(x) f_x()

x=1;
fnc(1);
x=2;
fnc(2);
みたいな感じで出来ませんかね?
667訂正:2006/02/23(木) 01:06:10
#define fnc(x) f_x()

x=1;
fnc(x);
x=2;
fnc(x);
みたいな感じで出来ませんかね?
668デフォルトの名無しさん:2006/02/23(木) 01:07:17
>>665
strcat(array,"追加文字");

でダメ?
669デフォルトの名無しさん:2006/02/23(木) 01:09:32
>>666
キサマ答えたのになにが不満なんだよ
670デフォルトの名無しさん:2006/02/23(木) 01:10:59
>>669
662さんですか。
やり方教えてください。
671665:2006/02/23(木) 01:12:41
>>668
それです!!ありがとうございます!
672デフォルトの名無しさん:2006/02/23(木) 01:18:49
>>662
それってポリモルフィズムだかなんだかの概念ですよね?
結局型チェックしてそれに応じて関数呼び出すから
if文で使い分けするのとコスト変わらない気がするんですが。
673658:2006/02/23(木) 01:19:24
関数のポインタの配列で調べたらわかりました!
ありがとうございました!
674672:2006/02/23(木) 01:20:37
あ、値か…
675674:2006/02/23(木) 01:23:27
あ、Cか…
676デフォルトの名無しさん:2006/02/23(木) 01:50:05
ウザ・・・
677デフォルトの名無しさん:2006/02/23(木) 02:06:04
関数呼び出しのオーパヘッドがかかってしまうのですがif文の方が速いですよね?
他に方法無いですか?

int f1()
{
return 1;
}

int f2()
{
return 2;
}


int main(void)
{
int x=1;
int (*fnc[2])();
fnc[0]=f1;
fnc[1]=f2;

(*fnc[x])();
}