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);

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值