cのプリプロセッサの##演算子使って関数定義。

これってできたよなと思ったのでメモ。ちょっと使いたかったので・・・

こんな感じで書いて・・。

#include <stdio.h>

#define func_def(func_name, type, arg) \
void func_name(type arg) { \
printf("%s\n", arg); \
}
#define test(nnn, type, arg) func_def(test ## nnn, type, arg)

test(1, char *, name)
test(2, char *, name)

int main(int argc, char **argv)
{
        test1("hello1");
        test2("hello2");

        return 0;
}

gcc -Eで確認。

# 2 "test.c" 2









void test1(char * name) { printf("%s\n", name); }
void test2(char * name) { printf("%s\n", name); }

int main(int argc, char **argv)
{
 test1("hello1");
 test2("hello2");

 return 0;
}

コンパイルして実行。

[masami@moonlight:~]% ./a.out
./a.out
hello1
hello2