rusi/test/varargs.c

52 lines
1.2 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#включить "тест.з"
#включить "stdvv.c"
#include "common.c"
#включить <stdarg.h>
цел сумма1(цел х, ...) {
va_list ap;
va_start(ap, x);
для (;;) {
цел у = va_arg(ap, цел);
если (у == 0)
возврат х;
х += у;
}
}
цел сумма2(цел х, ...) {
va_list ap;
va_start(ap, x);
для (;;) {
двойн у = va_arg(ap, двойн);
х += у;
цел з = va_arg(ap, цел);
если (з == 0)
возврат х;
х += з;
}
}
пусто формат(символ *буф, символ *формат, ...) {
va_list ap;
va_start(ap, формат);
va_list ap2;
va_copy(ap2, ap);
vsprintf(буф, формат, ap2);
va_end(ap2);
}
цел главн() {
ПРОВЕРИТЬ(6, сумма1(1, 2, 3, 0));
ПРОВЕРИТЬ(55, сумма1(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0));
ПРОВЕРИТЬ(21, сумма2(1, 2.0, 3, 4.0, 5, 6.0, 0));
ПРОВЕРИТЬ(210, сумма2(1, 2.0, 3, 4.0, 5, 6.0, 7, 8.0, 9, 10.0, 11, 12.0, 13, 14.0, 15, 16.0, 17, 18.0, 19, 20.0, 0));
ПРОВЕРИТЬ(0, ({ символ буф[100]; формат(буф, "%d %d", 2, 3); strcmp(буф, "2 3"); }));
printf("OK\n");
возврат 0;
}