Это третья статья по теме "Функции C с переменным числом параметров" (см. статья 1 и статья 2). Как было написано ранее, с переходом к 64-битовому программированию, перебирать параметры с помощью инкремента (перехода от одного параметра к другому в стеке) проблематично, ведь в стек помещаются только параметры, начиная с 7-ого, а шесть первых помещаются а регистры процессора. Соответственно во второй статье был предложен вариант использования ассемблерного модуля, который просматривает в начале регистры, а потом переходит к стеку (если известно количество параметров).
В действительности в C уже давно есть механизм правильной обработки функций с переменным числом параметров. Для 64-битовых систем он работает вполне корректно. Это макрос va_arg (см. программу main120.c). Он определен в stdarg.h. Ниже представлен пример его использования (переменной nm как раз и присваивается очередной параметр). Ну, в общем, довольно красиво. Трансляция программы осуществляется как обычно: |