ruby-libvirtのソースコードを読んでいたら、何やら怪しげなマクロが。 67 #define generic_get(kind, v) \ 68 do { \ 69 vir##kind##Ptr ptr; \ 70 Data_Get_Struct(v, vir##kind, ptr); \ 71 if (!ptr) \ 72 rb_raise(rb_eArgError, #kind " has been freed"); \ 73 return ptr; \ 74 } while (0); 75 シャープだと!しかも2つだと!見たことないぞ! というわけで引数マクロについてちょっと実験してみました。 基本的な引数付きマクロ まずは基本的な引数マクロ。 1 #include <stdio.h> 2 3 #define test_puts(hoge) \ 4 do { \ 5 hoge