Как вызов делается, откуда? Рукописный C-код? Сгенерированная хрень? Какова однородность типов аргументов? Какую проблему решаем?
А то можно же было бы в самом простом случае собирать аргументы в массив и евоный адрес передавать. А массив – можно фиксированного размера, а можно через malloc(). А можно и VLA (хотя, лучше избегать). Через ... и va_arg() тоже можно. Даже разнообразное. Но нужно или число аргументов, или признак конца, или ещё что-то, если нет фиксированной схемы.
А можно ещё прикол типа чтобы функция возвращала указатель на функцию... Тогда можно паровозик с вагончиками: f(1)(2)(3)(4). Но это больше для прикола. Разницы между разделением запятыми и скобками не много.
Ещё были трюк, где макрос считал число аргументов.
no subject
Date: 2021-02-12 09:52 (UTC)Какова однородность типов аргументов?
Какую проблему решаем?
А то можно же было бы в самом простом случае собирать аргументы в массив и евоный адрес передавать.
А массив – можно фиксированного размера, а можно через malloc(). А можно и VLA (хотя, лучше избегать).
Через ... и va_arg() тоже можно. Даже разнообразное.
Но нужно или число аргументов, или признак конца, или ещё что-то, если нет фиксированной схемы.
А можно ещё прикол типа чтобы функция возвращала указатель на функцию... Тогда можно паровозик с вагончиками: f(1)(2)(3)(4). Но это больше для прикола. Разницы между разделением запятыми и скобками не много.
Ещё были трюк, где макрос считал число аргументов.
Занятные вещи, которые могут не пригодится, на пофантазировать:
https://en.cppreference.com/w/c/language/generic
https://en.cppreference.com/w/c/language/compound_literal