📄 va-arg-3.c
字号:
/* Same as va-arg-2.c but using varargs.h. *//* The purpose of this test is to catch edge cases when arguments are passed in regs and on the stack. We test 16 cases, trying to catch multiple targets (some use 3 regs for argument passing, some use 12, etc.). We test both the arguments and the `lastarg' (the argument to va_start). */#ifdef NO_VARARGSint main(){ exit (0);}#else#include <varargs.h>extern __SIZE_TYPE__ strlen ();intto_hex (unsigned int a){ static char hex[] = "0123456789abcdef"; if (a > 15) abort (); return hex[a];}voidf0 (va_alist) va_dcl{ va_list ap; char *format; va_start (ap); format = va_arg (ap, char *); if (strlen (format) != 16 - 0) abort (); while (*format) if (*format++ != to_hex (va_arg (ap, int))) abort (); va_end(ap);}voidf1 (a1, va_alist) int a1; va_dcl{ va_list ap; char *format; va_start (ap); format = va_arg (ap, char *); if (strlen (format) != 16 - 1) abort (); while (*format) if (*format++ != to_hex (va_arg (ap, int))) abort (); va_end(ap);}voidf2 (a1, a2, va_alist) int a1, a2; va_dcl{ va_list ap; char *format; va_start (ap); format = va_arg (ap, char *); if (strlen (format) != 16 - 2) abort (); while (*format) if (*format++ != to_hex (va_arg (ap, int))) abort (); va_end(ap);}voidf3 (a1, a2, a3, va_alist) int a1, a2, a3; va_dcl{ va_list ap; char *format; va_start (ap); format = va_arg (ap, char *); if (strlen (format) != 16 - 3) abort (); while (*format) if (*format++ != to_hex (va_arg (ap, int))) abort (); va_end(ap);}voidf4 (a1, a2, a3, a4, va_alist) int a1, a2, a3, a4; va_dcl{ va_list ap; char *format; va_start (ap); format = va_arg (ap, char *); if (strlen (format) != 16 - 4) abort (); while (*format) if (*format++ != to_hex (va_arg (ap, int))) abort (); va_end(ap);}voidf5 (a1, a2, a3, a4, a5, va_alist) int a1, a2, a3, a4, a5; va_dcl{ va_list ap; char *format; va_start (ap); format = va_arg (ap, char *); if (strlen (format) != 16 - 5) abort (); while (*format) if (*format++ != to_hex (va_arg (ap, int))) abort (); va_end(ap);}voidf6 (a1, a2, a3, a4, a5, a6, va_alist) int a1, a2, a3, a4, a5, a6; va_dcl{ va_list ap; char *format; va_start (ap); format = va_arg (ap, char *); if (strlen (format) != 16 - 6) abort (); while (*format) if (*format++ != to_hex (va_arg (ap, int))) abort (); va_end(ap);}voidf7 (a1, a2, a3, a4, a5, a6, a7, va_alist) int a1, a2, a3, a4, a5, a6, a7; va_dcl{ va_list ap; char *format; va_start (ap); format = va_arg (ap, char *); if (strlen (format) != 16 - 7) abort (); while (*format) if (*format++ != to_hex (va_arg (ap, int))) abort (); va_end(ap);}voidf8 (a1, a2, a3, a4, a5, a6, a7, a8, va_alist) int a1, a2, a3, a4, a5, a6, a7, a8; va_dcl{ va_list ap; char *format; va_start (ap); format = va_arg (ap, char *); if (strlen (format) != 16 - 8) abort (); while (*format) if (*format++ != to_hex (va_arg (ap, int))) abort (); va_end(ap);}voidf9 (a1, a2, a3, a4, a5, a6, a7, a8, a9, va_alist) int a1, a2, a3, a4, a5, a6, a7, a8, a9; va_dcl{ va_list ap; char *format; va_start (ap); format = va_arg (ap, char *); if (strlen (format) != 16 - 9) abort (); while (*format) if (*format++ != to_hex (va_arg (ap, int))) abort (); va_end(ap);}voidf10 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, va_alist) int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10; va_dcl{ va_list ap; char *format; va_start (ap); format = va_arg (ap, char *); if (strlen (format) != 16 - 10) abort (); while (*format) if (*format++ != to_hex (va_arg (ap, int))) abort (); va_end(ap);}voidf11 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, va_alist) int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11; va_dcl{ va_list ap; char *format; va_start (ap); format = va_arg (ap, char *); if (strlen (format) != 16 - 11) abort (); while (*format) if (*format++ != to_hex (va_arg (ap, int))) abort (); va_end(ap);}voidf12 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, va_alist) int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12; va_dcl{ va_list ap; char *format; va_start (ap); format = va_arg (ap, char *); if (strlen (format) != 16 - 12) abort (); while (*format) if (*format++ != to_hex (va_arg (ap, int))) abort (); va_end(ap);}voidf13 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, va_alist) int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13; va_dcl{ va_list ap; char *format; va_start (ap); format = va_arg (ap, char *); if (strlen (format) != 16 - 13) abort (); while (*format) if (*format++ != to_hex (va_arg (ap, int))) abort (); va_end(ap);}voidf14 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, va_alist) int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14; va_dcl{ va_list ap; char *format; va_start (ap); format = va_arg (ap, char *); if (strlen (format) != 16 - 14) abort (); while (*format) if (*format++ != to_hex (va_arg (ap, int))) abort (); va_end(ap);}voidf15 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, va_alist) int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15; va_dcl{ va_list ap; char *format; va_start (ap); format = va_arg (ap, char *); if (strlen (format) != 16 - 15) abort (); while (*format) if (*format++ != to_hex (va_arg (ap, int))) abort (); va_end(ap);}main (){ char *f = "0123456789abcdef"; f0 (f+0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); f1 (0, f+1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); f2 (0, 1, f+2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); f3 (0, 1, 2, f+3, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); f4 (0, 1, 2, 3, f+4, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); f5 (0, 1, 2, 3, 4, f+5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); f6 (0, 1, 2, 3, 4, 5, f+6, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); f7 (0, 1, 2, 3, 4, 5, 6, f+7, 7, 8, 9, 10, 11, 12, 13, 14, 15); f8 (0, 1, 2, 3, 4, 5, 6, 7, f+8, 8, 9, 10, 11, 12, 13, 14, 15); f9 (0, 1, 2, 3, 4, 5, 6, 7, 8, f+9, 9, 10, 11, 12, 13, 14, 15); f10 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, f+10, 10, 11, 12, 13, 14, 15); f11 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, f+11, 11, 12, 13, 14, 15); f12 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, f+12, 12, 13, 14, 15); f13 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, f+13, 13, 14, 15); f14 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, f+14, 14, 15); f15 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, f+15, 15); exit (0);}#endif /* ! NO_VARARGS */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -