Giriş
C11 ile geliyor
Örnek
Elimizde şöyle bir macro olsun.
Elimizde şöyle bir macro olsun.
#define ICE_P(x) _Generic((1? (void *) ((x)*0) : (int *) 0), int*: 1, void*: 0)
Çağırmak için şöyle yaparız. Çıktı olarak 1 ve 0 alırızprintf("%d %d\n", ICE_P(1), ICE_P(x));
Örnek
Elimizde şöyle bir metod olsun
int test(char * a, char * b, char * c, bool d, int e);
Metodun imzasına göre 1 veya 2 değerini dönmek için şöyle yaparız. Çıktı olarak 1 alırız#define WEIRD_LIB_FUNC_TYPE(T) _Generic(&(T), \
int (*)(char *, char *, char *, bool, int): 1, \
int (*)(char *, char *, char *, bool): 2, \
default: 0)
printf("test's signature: %d\n", WEIRD_LIB_FUNC_TYPE(test));
// will print 1 if 'test' expects the extra argument, or 2 otherwise
Hiç yorum yok:
Yorum Gönder