C言語マクロで関数ポインタを利用する
以前、マクロで関数を定義しているものを配列に入れて、関数ポインタのように順繰りに処理をさせたいことがありましたが、スキル不足でできませんでした。
マクロに関数ポインタを定義するような人は殆どいないのか、情報がありません。
だったら、自分でやってみればいいのでは? ということで、やってみることにしました。
まずは単純に、マクロに関数ポインタを定義してみます。
#include <stdio.h> int func1(void); #define macro_func1 (*func1)() int main(int argc, char *argv[]) { macro_func1; return 0; } int func1(void) { printf("func1\n"); return 0; }
これで、マクロに関数ポインタを定義できることがわかりました。
次に、これを配列に入れることができるのか、試してみました。
#include <stdio.h> int func1(void); int func2(void); int func3(void); #define macro_func1 (*func1)() #define macro_func2 (*func2)() #define macro_func3 (*func3)() int main(int argc, char *argv[]) { int macro_func_array[3] = { macro_func1, macro_func2, macro_func3 }; int i; for (i = 0; i < 3; i++) { macro_func_array[i]; } return 0; } int func1(void) { printf("func1\n"); return 0; } int func2(void) { printf("func2\n"); return 0; } int func3(void) { printf("func3\n"); return 0; }
これでやりたいことはできました。
これをするくらいなら、変数に関数ポインタをそのまま入れるほうがいい気がするのでやる意味ないですね。