标签:system 它的 list 运算 初始化 out put version param
void log( int log_level, const char* file_name, int line_num, const char* format, ... ) { ............. .............. va_list arg_list; va_start( arg_list, format ); memset( arg_buffer, ‘\0‘, LOG_BUFFER_SIZE ); vsnprintf( arg_buffer, LOG_BUFFER_SIZE - 1, format, arg_list ); printf( "%s\n", arg_buffer ); fflush( stdout ); va_end( arg_list ); }
1.在C中,当我们无法列出传递函数的所有实参的类型和数目时,可以用省略号指定参数表
2.函数参数的传递原理
函数参数是以数据结构:栈的形式存取,从右至左入栈。
for (int i = 0; i < a; ++i)
{
cout << *temp << endl;
temp++;
}
}
int main()
{
int a = 1;
int b = 2;
int c = 3;
int d = 4;
fun(4, a, b, c, d);
system("pause");
return 0;
}
Output::
1
2
3
4
#include<iostream>
#include<stdlib.h>
#include<stdio.h>
#include <string.h>
#include <stdarg.h>
/*函数原型声明,至少需要一个确定的参数,注意括号内的省略号*/
int demo( const char*, ... );
int main( void )
{
demo("DEMO", "This", "is", "a", "demo!", "");
return 0;
}
/*ANSI标准形式的声明方式,括号内的省略号表示可选参数*/
int demo( const char* msg, ... )
{
/*定义保存函数参数的结构*/
const char* c = "";
va_list argp;//va_list type is a (char*)
int argno = 0;
const char *para = NULL;
/*argp指向传入的第一个可选参数,msg是最后一个确定的参数*/
va_start( argp, msg );
while (1){
para = va_arg( argp, char*);
if ( strcmp( para, c) == 0 )
break;
printf("Parameter #%d is: %s\n", argno, para);
argno++;
}
/*将argp置为NULL*/
va_end( argp );
return 0;
}
Parameter #0 is: This
Parameter #1 is: is
Parameter #2 is: a
Parameter #3 is: demo!
#include <stdio.h> #include <stdarg.h> void SYSTEM(const char * format, ...) { char buff[4069]; va_list list; va_start(list, format); vsnprintf(buff, 4069, format, list); va_end(list); printf("%s\n", buff); } void main() { SYSTEM("%d_%s", 6, "abc"); }
输出:
6_abc
va_list arg_list va_start(arg_list, format) va_end( arg_list ) 原理的理解
标签:system 它的 list 运算 初始化 out put version param
原文地址:https://www.cnblogs.com/zhangkele/p/10086197.html