📄 stdarg-4.c
字号:
#include <stdarg.h>extern void abort (void);long x, y;inline void __attribute__((always_inline))f1i (va_list ap){ x = va_arg (ap, double); x += va_arg (ap, long); x += va_arg (ap, double);}voidf1 (int i, ...){ va_list ap; va_start (ap, i); f1i (ap); va_end (ap);}inline void __attribute__((always_inline))f2i (va_list ap){ y = va_arg (ap, int); y += va_arg (ap, long); y += va_arg (ap, double); f1i (ap);}voidf2 (int i, ...){ va_list ap; va_start (ap, i); f2i (ap); va_end (ap);}longf3h (int i, long arg0, long arg1, long arg2, long arg3){ return i + arg0 + arg1 + arg2 + arg3;}longf3 (int i, ...){ long t, arg0, arg1, arg2, arg3; va_list ap; va_start (ap, i); switch (i) { case 0: t = f3h (i, 0, 0, 0, 0); break; case 1: arg0 = va_arg (ap, long); t = f3h (i, arg0, 0, 0, 0); break; case 2: arg0 = va_arg (ap, long); arg1 = va_arg (ap, long); t = f3h (i, arg0, arg1, 0, 0); break; case 3: arg0 = va_arg (ap, long); arg1 = va_arg (ap, long); arg2 = va_arg (ap, long); t = f3h (i, arg0, arg1, arg2, 0); break; case 4: arg0 = va_arg (ap, long); arg1 = va_arg (ap, long); arg2 = va_arg (ap, long); arg3 = va_arg (ap, long); t = f3h (i, arg0, arg1, arg2, arg3); break; default: abort (); } va_end (ap); return t;}voidf4 (int i, ...){ va_list ap; va_start (ap, i); switch (i) { case 4: y = va_arg (ap, double); break; case 5: y = va_arg (ap, double); y += va_arg (ap, double); break; default: abort (); } f1i (ap); va_end (ap);}intmain (void){ f1 (3, 16.0, 128L, 32.0); if (x != 176L) abort (); f2 (6, 5, 7L, 18.0, 19.0, 17L, 64.0); if (x != 100L || y != 30L) abort (); if (f3 (0) != 0) abort (); if (f3 (1, 18L) != 19L) abort (); if (f3 (2, 18L, 100L) != 120L) abort (); if (f3 (3, 18L, 100L, 300L) != 421L) abort (); if (f3 (4, 18L, 71L, 64L, 86L) != 243L) abort (); f4 (4, 6.0, 9.0, 16L, 18.0); if (x != 43L || y != 6L) abort (); f4 (5, 7.0, 21.0, 1.0, 17L, 126.0); if (x != 144L || y != 28L) abort (); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -