Почему typename
никогда не вызывается - это вопрос, который вы должны задать разработчику кодового фрагмента ...
Ключевое слово _Generic
является функцией C11.Идея состоит в том, чтобы генерировать различный код в зависимости от типа переменной.
C не имеет оператора typeof
, подобного Java, таким образом, то, что в Java выглядит как
...
if(typeof(p) == typeof(double)) {
System.out.println("Got type 1");
}
if(typeof(p) == typeof(char)) {
System.out.println("Got type 2");
}
...
, может бытьдостигается через _Generic
в C11 через
#include <stdio.h>
#define PRINT_MY_TYPE_NUMBER(x) _Generic((x), \
double: printf("Got type 1\n"),\
char: printf("Got type 2\n") \
)
int main(int c, char** v) {
double p = 10;
PRINT_MY_TYPE_NUMBER(p));
}
Примечание : _Generic
не поддерживает произвольные, а только «простые» типы.
Идея isCompatible(variable, type)
возвращает true
, если variable
имеет тип, совместимый с type
.Это зависит от того, будет ли передано type
, и, следовательно, оно будет передано type
, поэтому неявно переданное type
сделает isCompatible
бесполезным ИМХО.