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

📄 stdarg-4.c

📁 linux下编程用 编译软件
💻 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 + -