- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
#include <intrin.h>
#include <stdarg.h>
#include <stdio.h>
int func()
{
va_list vl;
int i;
int arg,Z=1;
va_start(vl,*(int *)_AddressOfReturnAddress());
for(i=0;i<5;i++)
{
arg=va_arg(vl,int);
Z=arg*Z;
}
return(Z);
}
int main(void)
{
printf("%d",func(1,2,3,4,5));
getchar();
return 0;
}
гуру-вычисление факториала пяти одного красавчика с форума wasm.ru... был выведен, как пример функции с переменным числом параметров без единого явного параметра... грязный хак с адресом возврата на стеке - моя идея)))
#define va_start1(ap, v) (ap = (va_list)(v) + sizeof(void*))
если вам хочется под gcc собрать))
Это не круто.
Надо чтобы цикл обрывался, как только очередной параметр становится единицей.
а ведь личинка varargs есть:
The varargs directive works only with external routines and only with the cdecl calling convention.
В стек запихивается массив, в eax пишется адрес массива, (в данном случае пишется указатель на кусок стека, но если так передать динмассив или явно заданный в блоке констант массив, то будет по другому), а в edx пишется длина массива минус 1.
Заминусуйте меня. Я не прав. Мне стыдно.
//----------------------------------------------
Неа. Так нельзя в D7.
Зато можно так:
лол чё.
Тебе скрин показать?
А, я забыл написать function(a: array of integer): integer;
звучит как название модной болезни