C语言变参,记录

由于在C语言中没有函数重载,解决不定数目函数参数问题变得比较麻烦;即使采用C++,如果参数个数不能确定,也很难采用函数重载.对这种情况,有些人采用指针参数来解决问题.

 

uhmm用到的变参地方:

用的原因:

1,  SQL语言必须用常量

2SQL语言格式不相同,参数个数不相同

使用A

dyw_mysql(NULL,"DELETE FROM UHMM_UserLogin WHERE UserId='%s'",user_id);

使用B

dyw_mysql(NULL,"INSERTINTO UHMM_UserInfo

(UserId,UserName,UserType,Birth,Sex,Height,Mobile,Tel,Postcode,Address,EmerContact,EmerTel,Pathography)

VALUES

('%s','%s',%d,'%s','%s',%u,'%s','%s','%s','%s','%s','%s','%s')",

user_mark,name,user_type,calendar,sex,height,mobile,local_telepone,post_code,address,emergency_name_contact,emergency_telephpone_contact,path_ography);

 

A,B使用了同一个函数,但是参数不同,此为变参函数-------定义

 

C语言编程中有时会遇到一些参数个数可变的函数,例如printf()函数,其函数原型为:

 

int printf( const char* format, ...);

 

它除了有一个参数format固定以外,后面跟的参数的个数和类型是可变的(用三个点“…”做参数占位符),实际调用时可以有以下的形式:

printf("%d",i);

printf("%s",s);

printf("the number is %d ,string is:%s", i, s);   

 

包含头文件#include "stdarg.h"

dyw_mysql 内部的定义如下

gboolean dyw_mysql ( MYSQL_RES **res, const gchar *a1, ...)

{

    gchar strtmp[768];

    va_list a2; //申请一个列表数据类型

    va_start(a2,a1);//存储

    vsprintf(strtmp,a1,a2);//用数组保存参数a1的全部值,a1控制格式,a2控制值)

    va_end(va2);

}

 

你可能感兴趣的:(C语言变参,记录)