回答受付が終了しました

C言語についての質問です。 呼び出す関数名に変数を交えることは可能ですか? void MyFunc_0(void){ (中略) } void MyFunc_1(void){ (中略) } (中略)

補足

{がついてないとか不等号がおかしいとか言う奴は要らないので

C言語関連34閲覧xmlns="http://www.w3.org/2000/svg">500

回答(3件)

0

#include<stdio.h> typedef void ( *FUNC )( void ); void MyFunc_0(void){ printf( "0\n" ); } void MyFunc_1(void){ printf( "1\n" ); } void MyFunc_2(void){ printf( "2\n" ); } void MyFunc_3(void){ printf( "3\n" ); } void MyFunc_4(void){ printf( "4\n" ); } int main(void) { FUNC func[] = { MyFunc_0, MyFunc_1, MyFunc_2, MyFunc_3, MyFunc_4 }; for(int i=0; i<5; i++){ func[i](); } }

0

C言語では、コンパイル語には変数名や関数名というのは存在しなくなってしまうので、 (マシン語には変数名や関数名という概念は無く、全てはアドレスで解決されます) 動的に変数名を変化させて……という事はできません。 全てはアドレスなので、形の同じ関数を複数作って、そのアドレスを切り替える事で、 似たようなことは可能です。 既に書かれている関数ポインタと言うやつなのですが、 C言語の文法の一番最後の方でやっと出てくるぐらい難しいです……。 一応ここらへんに解説はありますが、多分???になりそうな気がします。 http://wisdom.sakura.ne.jp/programming/c/c54.html https://yttm-work.jp/lang/c/c_0024.html

2

>呼び出す関数名に変数を交える 関数ポインタの配列にすると、それっぽいことが可能です ……「関数ポインタ」などというこましゃくれた専門用語はあなたは知らないハズであり(知ってたら訊いてない)、それは典型的な教科書の後ろの方に載っているので、そこを読みます

2人がナイス!しています