- 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... был выведен, как пример функции с переменным числом параметров без единого явного параметра... грязный хак с адресом возврата на стеке - моя идея)))
rat4 07.02.2011 12:18 # 0
ReL 07.02.2011 12:21 # +1
rat4 07.02.2011 12:42 # −1
ReL 07.02.2011 12:47 # −1
rat4 07.02.2011 13:12 # −1
ReL 07.02.2011 13:27 # −1
rat4 07.02.2011 15:56 # +1
ReL 07.02.2011 21:31 # −2
rat4 08.02.2011 10:03 # 0
ReL 08.02.2011 10:49 # 0
#define va_start1(ap, v) (ap = (va_list)(v) + sizeof(void*))
если вам хочется под gcc собрать))
gegMOPO4 08.02.2011 15:47 # −1
rat4 08.02.2011 16:05 # +3
ReL 08.02.2011 16:33 # 0
TarasB 07.02.2011 15:15 # +3
Это не круто.
Надо чтобы цикл обрывался, как только очередной параметр становится единицей.
rat4 07.02.2011 16:48 # +1
Анонимус 07.02.2011 17:19 # 0
TarasB 07.02.2011 17:57 # +2
bugmenot 07.02.2011 18:22 # 0
а ведь личинка varargs есть:
The varargs directive works only with external routines and only with the cdecl calling convention.
ReL 07.02.2011 18:35 # 0
TarasB 07.02.2011 19:30 # 0
bugmenot 07.02.2011 20:37 # +1
TarasB 08.02.2011 10:32 # −1
ReL 07.02.2011 21:31 # 0
guest 08.02.2011 00:49 # −1
ReL 08.02.2011 09:15 # −2
TarasB 08.02.2011 10:32 # 0
ReL 08.02.2011 10:36 # 0
TarasB 08.02.2011 13:13 # 0
В стек запихивается массив, в eax пишется адрес массива, (в данном случае пишется указатель на кусок стека, но если так передать динмассив или явно заданный в блоке констант массив, то будет по другому), а в edx пишется длина массива минус 1.
ReL 08.02.2011 13:38 # +1
TarasB 08.02.2011 14:33 # −1
bugmenot 08.02.2011 15:02 # +3
guest 08.02.2011 14:04 # +1
Заминусуйте меня. Я не прав. Мне стыдно.
guest 08.02.2011 14:02 # −1
//----------------------------------------------
Неа. Так нельзя в D7.
Зато можно так:
TarasB 08.02.2011 14:32 # 0
лол чё.
Тебе скрин показать?
А, я забыл написать function(a: array of integer): integer;
gpr 07.02.2011 16:00 # +2
bugmenot 07.02.2011 16:24 # +12
звучит как название модной болезни
Lure Of Chaos 07.02.2011 16:52 # 0