⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stdarg-2.c

📁 linux下编程用 编译软件
💻 C
字号:
#include <stdarg.h>extern void abort (void);int foo_arg, bar_arg;long x;double d;va_list gap;voidfoo (int v, va_list ap){  switch (v)    {    case 5:      foo_arg = va_arg (ap, int);      foo_arg += va_arg (ap, double);      foo_arg += va_arg (ap, long long);      break;    case 8:      foo_arg = va_arg (ap, long long);      foo_arg += va_arg (ap, double);      break;    case 11:      foo_arg = va_arg (ap, int);      foo_arg += va_arg (ap, long double);      break;    default:      abort ();    }}voidbar (int v){  if (v == 0x4002)    {      if (va_arg (gap, int) != 13 || va_arg (gap, double) != -14.0)	abort ();    }  bar_arg = v;}voidf1 (int i, ...){  va_start (gap, i);  x = va_arg (gap, long);  va_end (gap);}voidf2 (int i, ...){  va_start (gap, i);  bar (i);  va_end (gap);}voidf3 (int i, ...){  va_list aps[10];  va_start (aps[4], i);  x = va_arg (aps[4], long);  va_end (aps[4]);}voidf4 (int i, ...){  va_list aps[10];  va_start (aps[4], i);  bar (i);  va_end (aps[4]);}voidf5 (int i, ...){  va_list aps[10];  va_start (aps[4], i);  foo (i, aps[4]);  va_end (aps[4]);}struct A { int i; va_list g; va_list h[2]; };voidf6 (int i, ...){  struct A a;  va_start (a.g, i);  x = va_arg (a.g, long);  va_end (a.g);}voidf7 (int i, ...){  struct A a;  va_start (a.g, i);  bar (i);  va_end (a.g);}voidf8 (int i, ...){  struct A a;  va_start (a.g, i);  foo (i, a.g);  va_end (a.g);}voidf10 (int i, ...){  struct A a;  va_start (a.h[1], i);  x = va_arg (a.h[1], long);  va_end (a.h[1]);}voidf11 (int i, ...){  struct A a;  va_start (a.h[1], i);  bar (i);  va_end (a.h[1]);}voidf12 (int i, ...){  struct A a;  va_start (a.h[1], i);  foo (i, a.h[1]);  va_end (a.h[1]);}intmain (void){  f1 (1, 79L);  if (x != 79L)    abort ();  f2 (0x4002, 13, -14.0);  if (bar_arg != 0x4002)    abort ();  f3 (3, 2031L);  if (x != 2031)    abort ();  f4 (4, 18);  if (bar_arg != 4)    abort ();  f5 (5, 1, 19.0, 18LL);  if (foo_arg != 38)    abort ();  f6 (6, 18L);  if (x != 18L)    abort ();  f7 (7);  if (bar_arg != 7)    abort ();  f8 (8, 2031LL, 13.0);  if (foo_arg != 2044)    abort ();  f10 (9, 180L);  if (x != 180L)    abort ();  f11 (10);  if (bar_arg != 10)    abort ();  f12 (11, 2030, 12.0L);  if (foo_arg != 2042)    abort ();  return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -