当前位置: 首页 > news >正文

破解asp网站后台密码深圳网站建设服务商

破解asp网站后台密码,深圳网站建设服务商,昆山建设局网站,h5网站开发框架可变参数列表 可变参数宏--__VA_ARGS__C风格不定参使用补充知识&#xff1a;函数调用时参数的压栈顺序及内存使用使用不定参模拟实现printf C风格不定参数的使用 可变参数宏–VA_ARGS #include <stdio.h>//...表示不定参&#xff0c;__VA_ARGS__使用不定参 // __FILE__ …

可变参数列表

  • 可变参数宏--__VA_ARGS__
  • C风格不定参使用
    • 补充知识:函数调用时参数的压栈顺序及内存使用
    • 使用不定参模拟实现printf
  • C++风格不定参数的使用

可变参数宏–VA_ARGS

#include <stdio.h>//...表示不定参,__VA_ARGS__使用不定参
// __FILE__ 文件名
//__LINE__ 行号
//__VA_ARGS__ 用于在宏替换部分中,表示可变参数列表;
//当可变参数的个数为0时,##起到把前面多余的","去掉的作用,否则会编译出错
#define LOG(fmt,...) printf("[%s:%d]" fmt,__FILE__,__LINE__,##__VA_ARGS__);int main()
{LOG("可变参数列表");//最终展开的代码相当于printf("[%s:%d]" "可变参数列表",__FILE__,__LINE__)//如果不加##,会报错//printf("%d""nihao",6);可以编译通过return 0;
}

在这里我之前一直有一个误区:
1.我认为printf("%d""nihao",6);是不合法的,因为格式化参数后面没有加,,直到今天认识了可变参数宏,才认识到
2."%d""nihao"会自动连接

C风格不定参使用

使用之前需要自己定义一个va_list 变量
va_start()函数 语法

void va_start(va_list ap,param);
参数ap为参数自身;
参数param为第一个参数。

va_arg()函数用于调用可变参数列表

type va_arg(va_list ap,type);
参数ap为可变参数自身;参数type为要获取的参数的指定类型,返回这个指定类型的值,并把ap的位置指向变参表的下一个变量位置

va_end()函数用于停止使用可变参数。

void va_end(va_list ap);
参数ap为参数自身。

简单使用

void print(int cnt,...)
{va_list ap;va_start(ap,cnt);//获取cnt参数之后的第一个参数的地址即第一个不定参地址for(int i=0;i<cnt;++i){int num=va_arg(ap,int);//获取不定参printf("param[%d]:%d\n",i,num);}va_end(ap);//使用完将ap指针置空}

补充知识:函数调用时参数的压栈顺序及内存使用

printf(const char* format,…)为例

  1. printf函数是一个不定参函数。
  2. 编译器通过format的%占位符的个数来获取参数的个数。
  3. 假设函数压栈顺序是从左至右,format先入栈,各个参数再入栈,最后pc入栈入栈完之后,想知道参数的个数就要读取format,但要读取format就得知道参数的个数,陷入了一个死循环。
  4. 如果函数压栈顺序是从右至左,未知个数的参数先入栈,format再入栈,最后压pc入栈。这时候要想知道参数的个数只需要将栈顶指针加2即可读取到format。
  5. 函数调用栈从高往低使用

使用不定参模拟实现printf

int vasprintf(char **strp, const char *fmt, va_list ap);

vasprintf 是一个 C 库函数,它可以通过可变参数创建一个格式化的字符串,并将其存储在动态分配的内存中。它的使用方法与 printf 类似,但它不会将结果打印到标准输出流中,而是将其存储在一个指向字符数组的指针中

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);}va_end(ap);}

C++风格不定参数的使用

需要借助C++11内的万能引用与完美转发及可变参数模版包

#include <iostream>
#include <cstdarg>
#include <memory>
#include <functional>//特化
void CgagaPrint()
{std::cout<<std::endl;
}template<class T,class ...Args>
void CgagaPrint(const T& v,Args&& ...args)
{std::cout<<v;if((sizeof ...(args))>0){//完美转发CgagaPrint(std::forward<Args>(args)...);}else{CgagaPrint();}
}int main()
{CgagaPrint("nihao",6,5,4);
}
http://www.yayakq.cn/news/828890/

相关文章:

  • 互联网app推广怎样做网站seo优化
  • 网站开发咨询深圳专业画册设计公司
  • 百度站长平台网站改版工具网站设计与制作的论文报告
  • 营销型 手机网站WordPress代收插件
  • 重庆企业建站程序wordpress文章到微信
  • 网站开发+演讲加工厂网站建设
  • 小网站开发框架企业宣传类网站建设
  • 做信息图的网站有哪些做经营行网站需要什么手续
  • 昭通做网站公司论坛前端模板
  • 阜阳建设工程质量监督局网站苏州专业高端网站建设企业
  • 免费网站从哪里申请网页美工设计核心素养
  • 有没一些网站只做临床药学wordpress 火车头 作者
  • 化妆品建设网站的目的移动互联网服务管理中心官网
  • 用html制作简单的购物网站佛山公共交易资源平台
  • 网站做微信链接怎么做北京网站设计费用
  • 佛山专业网站建设团队免费建设视频网站
  • 门户网站开发请示湘潭做网站价格优选磐石网络
  • 怎么做查询网站吗工业设计大赛
  • 房地产开发公司网站北京ui培训机构排行
  • 网站建设模板制作建筑材料采购网站
  • 专业app网站建设做网站猫腻大吗
  • app手机网站模板免费下载微信开放平台怎么注册
  • 企业网站建设公司有哪些搜狗竞价推广效果怎么样
  • 宁波技术好的企业网站制作企业微信网页版
  • 自己做的网站如何赚钱吗管理系统怎么做
  • asp.net 价格查询网站wordpress商业主题
  • 山西网站推广盘锦949公社最新招聘
  • 网站开发团队奖惩企业咨询项目计划书
  • 为网站网站做代理怎么判网站系统分析的步骤有哪些
  • 网站开发员纵向发展jsp 网站连接数据库