Cで引数の個数の違いによる多重定義を偽装する
幾つか制限はあるけど、見かけだけ、多重定義されているように見せかける方法を思いついた。
以下テストコード
#include <stdio.h> void foo0(void) { printf("foo0だよ\n"); } void foo1(int x) { printf("foo1:x=%dだよ\n",x); } void foo2(int x, int y) { printf("foo2:x=%d,y=%dだよ\n",x,y); } #define foo(...) \ (void (*[])()){foo0,foo1,foo2} \ [sizeof((int[]){0,__VA_ARGS__})/sizeof(int)-1](__VA_ARGS__) \ #if 0 // VC用 #define foo(...) \ { \ void (*func[])() ={foo0,foo1,foo2}; \ int s[] = {0,__VA_ARGS__}; \ func[sizeof(s)/sizeof(int)-1](__VA_ARGS__); \ } #endif int main() { foo(); foo(1); foo(3,4); return 0; }