variadic- все статьи тега


Как сделать вариативный макрос (переменное количество аргументов)

Я хочу написать макрос в C, который принимает любое количество параметров, а не конкретное число пример: #define macro( X ) something_complicated( whatever( X ) ) здесь X - это любое количество параметров мне это нужно, потому что whatever перегружен и может быть вызван с 2 или 4 параметрами. Я попытался определить макрос дважды,но второе определение переписало первое! компилятор, с которым я работаю, - это g++ (более конкретно, mingw) ...

Вперед вызов функции с переменным числом аргументов в C

В C, можно ли переслать вызов функции с переменным числом аргументов? То есть, int my_printf(char *fmt, ...) { fprintf(stderr, "Calling printf with fmt %s", fmt); return SOMEHOW_INVOKE_LIBC_PRINTF; } пересылка вызова указанным выше способом, очевидно, не является строго необходимой в этом случае (поскольку вы можете регистрировать вызовы другими способами или использовать vfprintf), но кодовая база, над которой я работаю, требует, чтобы оболочка выполняла некоторую фактическую работу ...

Можно ли перебирать аргументы в вариативных макросах?

мне было интересно, можно ли перебирать аргументы, переданные в вариационный макрос в C99 или используя любые расширения GCC ? например, можно ли написать общий макрос, который принимает структуру и ее поля, передаваемые в качестве аргументов, и печатает смещение каждого поля в структуре ? что-то вроде этого: struct a { int a; int b; int c; }; /* PRN_STRUCT_OFFSETS will print offset of each of the fields within structure passed as the first argument. */ int main(int argc, c ...