26 Mart 2018 Pazartesi

_Generic - C11

Giriş 
C11 ile geliyor

Örnek
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ız
printf("%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