C Language Controlla se una variabile è di un certo tipo qualificato


Esempio

#include <stdio.h> 

#define is_const_int(x) _Generic((&x),  \
        const int *: "a const int",     \
        int *:       "a non-const int", \
        default:     "of other type")

int main(void)
{
    const int i = 1;
    int j = 1;
    double k = 1.0;
    printf("i is %s\n", is_const_int(i));
    printf("j is %s\n", is_const_int(j));
    printf("k is %s\n", is_const_int(k));
}

Produzione:

i is a const int
j is a non-const int
k is of other type

Tuttavia, se il tipo di macro generica è implementato in questo modo:

#define is_const_int(x) _Generic((x), \
        const int: "a const int",     \
        int:       "a non-const int", \
        default:   "of other type")

L'output è:

i is a non-const int
j is a non-const int
k is of other type

Questo perché tutti i qualificatori di tipo vengono rilasciati per la valutazione dell'espressione di controllo di un'espressione primaria _Generic .