Можете ли вы сопоставить любой составной тип с _Generic в C?

#c #generics #macros

#c #дженерики #макросы

Вопрос:

Я хотел бы определить, выполняется ли вызов макроса для структурного типа. Наивный подход не сработал:

 #define IS_STRUCT(x) _Generic((x), struct *: 1, default: 0);
 

as _Generic требует полного типа в спецификации и struct * не является таковым…

Есть ли какой-либо другой рабочий трюк, который позволил бы выбрать общие структуры?

Комментарии:

1. Как вы ожидаете использовать этот макрос? Может быть лучший способ добиться того, чего вы хотите.

2. @dbush: я хочу использовать его в другом макросе, который проверяет, является ли тип (тип переменной) указателем. Я знаю, что текущий консенсус заключается в том, что это невозможно, однако я отвергаю это и ищу решение 🙂

3. Вы имеете в виду, что что-то передается переменной функции, т.Е. С помощью va_arg ? Если это так, вам необходимо каким-либо образом предоставить информацию о типе функции, например printf , спецификаторы формата.

4. @dbush: Нет, я имею в виду обычный тип указателя, т. Е.: мне нужен макрос IS_POINTER(x), который будет оценивать int * значение 1 и int 0 и т.д.

5. Но как вы будете использовать эту информацию? Это звучит как проблема XY . Как вы думаете, какую проблему решит знание того, является ли идентификатор указателем (или структурным указателем)?