これってできたよなと思ったのでメモ。ちょっと使いたかったので・・・
こんな感じで書いて・・。
#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