Захотелось поделится некоторыми соображениями по поводу функций с переменным число параметров. В языке C в старом его 32-битовом варианте использовались функции с многоточием, например f(n, p1, ...). При этом n - количество параметров, p1 - первый параметр. Количество всех параметров определяется n. А далее взяв указатель на параметр p1 (&p1) можно путем инкрементирования получить все остальные параметры, ведь общее их количество мы знаем. В 64-битовой системе такое не проходит. Ведь часть параметров передается через стек. В руководствах предлагается использовать тип va_list и макрос va_start (stdarg.h). Можно в дальнейшем об этом поговорить отдельно.
Сегодня мне бы хотелось изложить идею, которую я до конца не реализовал, но хотел бы. А может быть вы реализуете. Идея основывается на встроенном ассемблере. О нем речь будет еще впереди, а здесь я приведу только готовое решение. |