func-vararg-mixed.c
来自「用于进行gcc测试」· C语言 代码 · 共 118 行
C
118 行
/* { dg-options "-std=gnu99" } *//* C99 6.5.2.2 Function calls. Test passing varargs of the combination of decimal float types and other types. */#include <stdarg.h>extern void abort (void);static int failcnt = 0; /* Support compiling the test to report individual failures; default is to abort as soon as a check fails. */#ifdef DBG#include <stdio.h>#define FAILURE { printf ("failed at line %d\n", __LINE__); failcnt++; }#else#define FAILURE abort ();#endif/* Supposing the list of varying number of arguments is: unsigned int, _Decimal128, double, _Decimal32, _Decimal64. */static _Decimal32vararg_d32 (unsigned arg, ...){ va_list ap; _Decimal32 result; va_start (ap, arg); va_arg (ap, unsigned int); va_arg (ap, _Decimal128); va_arg (ap, double); result = va_arg (ap, _Decimal32); va_end (ap); return result;}static _Decimal32vararg_d64 (unsigned arg, ...){ va_list ap; _Decimal64 result; va_start (ap, arg); va_arg (ap, unsigned int); va_arg (ap, _Decimal128); va_arg (ap, double); va_arg (ap, _Decimal32); result = va_arg (ap, _Decimal64); va_end (ap); return result;}static _Decimal128vararg_d128 (unsigned arg, ...){ va_list ap; _Decimal128 result; va_start (ap, arg); va_arg (ap, unsigned int); result = va_arg (ap, _Decimal128); va_end (ap); return result;}static unsigned intvararg_int (unsigned arg, ...){ va_list ap; unsigned int result; va_start (ap, arg); result = va_arg (ap, unsigned int); va_end (ap); return result;}static doublevararg_double (unsigned arg, ...){ va_list ap; float result; va_start (ap, arg); va_arg (ap, unsigned int); va_arg (ap, _Decimal128); result = va_arg (ap, double); va_end (ap); return result;}intmain (){ if (vararg_d32 (3, 0, 1.0dl, 2.0, 3.0df, 4.0dd) != 3.0df) FAILURE if (vararg_d64 (4, 0, 1.0dl, 2.0, 3.0df, 4.0dd) != 4.0dd) FAILURE if (vararg_d128 (1, 0, 1.0dl, 2.0, 3.0df, 4.0dd) != 1.0dl) FAILURE if (vararg_int (0, 0, 1.0dl, 2.0, 3.0df, 4.0dd) != 0) FAILURE if (vararg_double (2, 0, 1.0dl, 2.0, 3.0df, 4.0dd) != 2.0) FAILURE if (failcnt != 0) abort (); return 0;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?