#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 . Как вы думаете, какую проблему решит знание того, является ли идентификатор указателем (или структурным указателем)?