m5knt

底が浅い男がなんとはなしに...

マクロの可変引数が空の場合の判定が結構面倒にょろ

カンマの数を数えるのは結構簡単なんですが空と一つを区別するには結構ややこしいことに気づいて誰かやってるだろうってことで検索なんかして見つけるわけなんですがその実装がややこしくもっと楽な実装あるんじゃないか考えてみました

参考 https://gustedt.wordpress.com/2010/06/08/detect-empty-macro-arguments/

自分はカンマ数えて 0 ならトークンくっつけてマクロ参照できれば空ってな感じにして見ました

#define HAS_COMMA(...) HAS_COMMA_(__VA_ARGS__, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0)
#define HAS_COMMA_(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19,...) a19

#define JOIN2(x,y) JOIN2_(x,y)
#define JOIN2_(x,y) x ## y
#define JOIN3(x,y,z) JOIN3_(x,y,z)
#define JOIN3_(x,y,z) x ## y ## z

#define ISEMPTY(...) JOIN2(ISEMPTY0_, HAS_COMMA(__VA_ARGS__))(__VA_ARGS__)
#define ISEMPTY0_1(...) 0

#define ISEMPTY0_0(...) HAS_COMMA(JOIN3(ISEMPTY1, __VA_ARGS__, _))
#define ISEMPTY1_ ,

テストは参考サイトの物を利用したんですが ISEMPTY( ( void ) ) の結果に違いが出ました、まあこの考慮はいらんでしょって思うことにして完成にしようと思うんですがどんなもんでしょうね~