C语言可变参数 code实现
// C语言可变参数测试(整数输入)
void TestIntFunc(int n, ...)
{
long long* p1 = (long long*)(&n); // 因为是64位系统,因此采用long long,堆栈地址存取是64位的
for (int i = 0; i < n; i++) {
printf("%lld, ", p1[i + 1]);
}
printf("\n");
}
int main (void)
{
printf("%d, %d, %d\n", sizeof(int), sizeof(long),sizeof(long long));
logSwitch = 1;
TestIntFunc(6, 1, 2, 8, 18, 32, 17);
return 0;
}
#include <stdarg.h> #include <stdio.h> int sum(int, ...); int main() { printf("15 和 56 的和 = %d\n", sum(2, 15, 56) ); return 0; } int sum(int num_args, ...) { int val = 0; va_list ap; int i; va_start(ap, num_args); for(i = 0; i < num_args; i++) { val += va_arg(ap, int); } va_end(ap); return val; }
#include <stdio.h>
#include <stdarg.h>
char buffer[80];
int vspfunc(char *format, ...)
{
va_list aptr;
int ret;
va_start(aptr, format);
ret = vsprintf(buffer, format, aptr);
va_end(aptr);
return(ret);
}
int main()
{
int i = 5;
float f = 27.0;
char str[50] = "runoob.com";
vspfunc("%d %f %s", i, f, str);
printf("%s\n", buffer);
return(0);
}
1 #include <stdio.h> 2 #include <stdarg.h> 3 #include <time.h> 4 5 #define LOG3(fmt, ...) printf(fmt, ##__VA_ARGS__) 6 //#define LOG3(fmt, ...) printf("<%s:%s>:"fmt"\r\n", __FILE__, __FUNCTION__, ##__VA_ARGS__) 7 void log4(int line, char *format, ...) 8 { 9 clock_t start =clock(); 10 printf("<time:%f> ", (float)start / CLOCKS_PER_SEC); 11 12 va_list aptr; 13 char buffer[80]; 14 va_start(aptr, format); 15 printf(format, aptr); 16 va_end(aptr); 17 18 printf(" <File:%s, line:%d>\n", __FILE__, line); 19 } 20 21 int main(int argc, char** argv) 22 { 23 char *str = "hello"; 24 int num = 10086; 25 log4(__LINE__, "hello Word 1 !!!"); 26 LOG3("this is test __VA_ARGS__\n"); 27 LOG3("this is test __VA_ARGS__:%s, %d \n", str, num); 28 LOG3(""); 29 30 log4(__LINE__, "hello Word 2 !!!"); 31 return 0; 32 }
输出:
1 <time:0.126000> hello Word 1 !!! <File:E:\code\test1\main.cpp, line:177> 2 this is test __VA_ARGS__ 3 this is test __VA_ARGS__:hello, 10086 4 <time:0.126000> hello Word 2 !!! <File:E:\code\test1\main.cpp, line:182>



参考链接
C语言函数之可变参数原理:va_start、va_arg及va_end
记录每天生活的点点滴滴,呵呵呵呵呵呵

浙公网安备 33010602011771号