C语言可变参数/不定参函数

一:不定参宏函数

#define LOG(fmt,...) printf("[%s,%d]"fmt,__FILE__,__LINE__,##__VA_ARGS__);
//##是允许你不用%s,我注释的那句就是没有##的写法
int main(){
    printf("[%s,%d]:%s,%d\n",__FILE__,__LINE__,"加油",666);
    //LOG("%s","你好");
	LOG("你好");


	return 0;
}

二:单一类型不定参

va_list那几句是套路,记住就好了。中间是处理,按具体情况来


#include
 #include 
  
//C语言版不定参数

//应对单类型
void printNum(int n,...) //n是几个参数的意思
{
	va_list ap;
	va_start(ap,n);//让ap指向n之后的第一个可变参数
	for(int i=0;i

三:多类型不定参

vasprintf 它可以通过可变参数创建一个格式化的字符串,并将其存储在动态分配的内存中。其存储在一个指向字符数组的指针中。


#include
 #include 
   #include 
//C语言版不定参数

//应对多类型
void myprint(const char* fmt,...)
{
 va_list ap;
va_start(ap,fmt);

char* res;
int ret=vasprintf(&res,fmt,ap);//用于处理传不同类型的
if(ret!=-1) {
	printf(res);
	free(res);//不能忘 这是用vasprintf的必要要求
	
}
va_end(ap);
}
int main(){
  
  myprint("%s\n","你好");
 myprint("%s%s\n","你好","加油");
 myprint("%s%s%d\n","你好","加油",666);

	return 0;
}

加油!

你可能感兴趣的:(c语言)