Cでもジェネリックが使える
関数オーバーロードみたいな感じ
前に任意の型を引数に取る関数の実装を行ったが、なかなか無理があった。
あれではまだ満足出来ない。
与えた引数の型からマクロが呼び出す関数を変えるようにしたい。
_Genericは関数マクロに適用出来る。
_Genericを使う事で、引数の型に応じて呼び出す関数を変えられる。
文法は
#define マクロ名(引数) _Generic((判断に用いる引数), 引数の型: 型が一致した時に呼び出す関数)(関数に渡す引数))の形式で書く。
たとえば
#include <stdio.h>
#define YOSHINANI_PRINT(x) _Generic((x), \
int: printf("%d\n", x), \
char: printf("%c\n", x), \
char *: printf("%s\n", x))このように書くとYOSHINANI_PRINTに渡した値の型によってprintfの引数をよしなにして出力してくれる。
便利じゃん