📄 stdarg-1.c
字号:
#include <stdarg.h>extern void abort (void);int foo_arg, bar_arg;long x;double d;va_list gap;va_list *pap;voidfoo (int v, va_list ap){ switch (v) { case 5: foo_arg = va_arg (ap, int); break; default: abort (); }}voidbar (int v){ if (v == 0x4006) { if (va_arg (gap, double) != 17.0 || va_arg (gap, long) != 129L) abort (); } else if (v == 0x4008) { if (va_arg (*pap, long long) != 14LL || va_arg (*pap, long double) != 131.0L || va_arg (*pap, int) != 17) abort (); } bar_arg = v;}voidf0 (int i, ...){}voidf1 (int i, ...){ va_list ap; va_start (ap, i); va_end (ap);}voidf2 (int i, ...){ va_list ap; va_start (ap, i); bar (d); x = va_arg (ap, long); bar (x); va_end (ap);}voidf3 (int i, ...){ va_list ap; va_start (ap, i); d = va_arg (ap, double); va_end (ap);}voidf4 (int i, ...){ va_list ap; va_start (ap, i); x = va_arg (ap, double); foo (i, ap); va_end (ap);}voidf5 (int i, ...){ va_list ap; va_start (ap, i); va_copy (gap, ap); bar (i); va_end (ap); va_end (gap);}voidf6 (int i, ...){ va_list ap; va_start (ap, i); bar (d); va_arg (ap, long); va_arg (ap, long); x = va_arg (ap, long); bar (x); va_end (ap);}voidf7 (int i, ...){ va_list ap; va_start (ap, i); pap = ≈ bar (i); va_end (ap);}voidf8 (int i, ...){ va_list ap; va_start (ap, i); pap = ≈ bar (i); d = va_arg (ap, double); va_end (ap);}intmain (void){ f0 (1); f1 (2); d = 31.0; f2 (3, 28L); if (bar_arg != 28 || x != 28) abort (); f3 (4, 131.0); if (d != 131.0) abort (); f4 (5, 16.0, 128); if (x != 16 || foo_arg != 128) abort (); f5 (0x4006, 17.0, 129L); if (bar_arg != 0x4006) abort (); f6 (7, 12L, 14L, -31L); if (bar_arg != -31) abort (); f7 (0x4008, 14LL, 131.0L, 17, 26.0); if (bar_arg != 0x4008) abort (); f8 (0x4008, 14LL, 131.0L, 17, 27.0); if (bar_arg != 0x4008 || d != 27.0) abort (); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -