658 :
デフォルトの名無しさん:
引数の値によって処理の異なる関数を呼び出すことは出来ますか。
if文を使わずに計算コストを掛けないのがいいです。
でき
関数のポインタの配列やswitchじゃ不満なのかね
不満です
664 :
658:2006/02/23(木) 01:03:06
やり方教えてください。
マクロを使って置き換えられないかと思ったのですが出来ませんでした。
sprintf(array,"%s%s",*array,"追加文字");
のような処理がしたいのですが、これだとarrayの同一アドレスを参照することにより
エラーが発生するのだと思うのですが、このような追加処理をする関数ってありますか?
666 :
658: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);
みたいな感じで出来ませんかね?
>>665 strcat(array,"追加文字");
でダメ?
670 :
デフォルトの名無しさん:2006/02/23(木) 01:10:59
>>669 662さんですか。
やり方教えてください。
671 :
665:2006/02/23(木) 01:12:41
672 :
デフォルトの名無しさん:2006/02/23(木) 01:18:49
>>662 それってポリモルフィズムだかなんだかの概念ですよね?
結局型チェックしてそれに応じて関数呼び出すから
if文で使い分けするのとコスト変わらない気がするんですが。
673 :
658:2006/02/23(木) 01:19:24
関数のポインタの配列で調べたらわかりました!
ありがとうございました!
674 :
672:2006/02/23(木) 01:20:37
あ、値か…
675 :
674:2006/02/23(木) 01:23:27
あ、Cか…
ウザ・・・
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])();
}