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

iis配置网站无法访问网络系统管理员在哪里

iis配置网站无法访问,网络系统管理员在哪里,人教版优化设计电子书,山南网站制作目录 1. 可变参数函数#xff08;Variadic Function#xff09; 2. va_list 及相关宏 3. va_list 的用途 4. 与 printf、vsnprintf 等函数的关系 5. 在实际场景中的示例 5.1 API_SendAtCommandParam 函数 5.2 va_arg 直接取参数 6. 常见问题 7. 结论 在 C 语言中Variadic Function 2. va_list 及相关宏 3. va_list 的用途 4. 与 printf、vsnprintf 等函数的关系 5. 在实际场景中的示例 5.1 API_SendAtCommandParam 函数 5.2 va_arg 直接取参数 6. 常见问题 7. 结论 在 C 语言中va_list 是一个专门用于处理可变参数函数variadic function的类型。可变参数函数指的是像 printf(const char *format, ...) 这样使用省略号...来接收不定数量或类型参数的函数。要想在函数内部获取这些“不定参数”就要用到 va_list 及其相关的宏和函数。下面做详细介绍 1. 可变参数函数Variadic Function 在 C 语言中函数可以声明成类似下面的形式 int exampleFunction(const char *format, ...);这里的 ... 表示这个函数可以接收除固定参数 format 之外的任意数量、任意类型的额外参数C 语言本身不会自动帮你识别它们的类型需手动解析。 一个典型示例就是标准库的 printf 函数原型 int printf(const char *format, ...);它可以根据 format 字符串中的占位符如 %d, %s, %f等来解析后续传入的参数。 2. va_list 及相关宏 C 语言提供以下专门的机制用来处理可变参数 va_list 它是一种类型用来声明一个存储可变参数信息的变量。例如 va_list args;va_start(va_list, last_fixed_param) 用来初始化这个 va_list 变量让它从函数形参中“最后一个固定参数”后面开始读取不定参数。例如 void exampleFunction(const char *format, ...) {va_list args;va_start(args, format); // 初始化args从format后面获取可变参数... }va_arg(va_list, type) 用来按指定类型依次获取下一个可变参数值。例如 int i va_arg(args, int); // 取一个 int double d va_arg(args, double);// 取一个 double char *s va_arg(args, char*); // 取一个字符串指针va_end(va_list) 用来清理可变参数列表。当函数对不定参数读取完毕后应当调用 va_end(args)。例如 va_end(args);va_copy(va_list dest, va_list src) (C99 引入) 用来复制一个可变参数列表在某些情形需要重复遍历参数时使用。 3. va_list 的用途 在一个可变参数函数内部当你想要处理形如 (const char *fmt, ...) 中的 “... 部分就必须 声明一个 va_list 变量用 va_start(args, last_fixed_param) 初始化它根据需要多次调用 va_arg(args, type) 获取后续的每个不定参数在处理完后调用 va_end(args) 进行清理 例如在一个简化的“打印函数”中 #include stdarg.h // 包含va_list等定义 #include stdio.hvoid simplePrint(const char *format, ...) {va_list args;va_start(args, format); // 初始化args从format后面取不定参数// 假设我们只想取一个 int 和一个 doubleint i va_arg(args, int); double d va_arg(args, double);// 这里可以使用 i, dprintf(format%s, i%d, d%f\n, format, i, d);va_end(args); }当调用 simplePrint(test, 42, 3.14);时va_arg(args, int) 会得到 42va_arg(args, double) 会得到 3.14。 4. 与 printf、vsnprintf 等函数的关系 标准库的 printf、fprintf、vsnprintf 等都使用了可变参数机制 printf(const char *format, ...) / snprintf(char *buf, size_t size, const char *format, ...) 这类函数使用省略号接收不定参数然后在函数内部完成对这些参数的解析与格式化输出。 vprintf(const char *format, va_list args) / vsnprintf(char *buf, size_t size, const char *format, va_list args) 是针对已有 va_list 的版本。如果你已经拿到了 va_list args就可以使用 vprintf/vsnprintf 直接处理。 也就是说“v”系列函数如 vprintf、vsnprintf正是可变参数 va_list 相结合的结果。 5. 在实际场景中的示例 5.1 API_SendAtCommandParam 函数 就像我们之前给出的示例 #include stdarg.h #include stdio.hAPI_Status API_SendAtCommandParam(const char *at_template, ...) {char cmd[128];va_list args;va_start(args, at_template); // 初始化args从at_template之后开始获取可变参int n vsnprintf(cmd, sizeof(cmd), at_template, args); va_end(args);if (n 0 || n (int)sizeof(cmd)) {return API_PARAM_ERROR;}if (comSendBuf(cmd, n) ! 0) {return API_ERROR;}return API_OK; }在这里 我们的函数定义了一个不定参数 (const char *at_template, ...)。函数内部声明 va_list args;。调用 va_start(args, at_template); 来初始化 args。然后把 args 交给 vsnprintf 来格式化到 cmd 中。最后 va_end(args); 进行清理。 5.2 va_arg 直接取参数 如果我们不想使用 vsnprintf 之类函数来拼接字符串而是自行解析每个参数可以像这样 void exampleFunc(const char *info, ...) {va_list args;va_start(args, info);int a va_arg(args, int);char c (char) va_arg(args, int); // char在va_arg中传递时要按int取double d va_arg(args, double);// ...va_end(args); }6. 常见问题 为什么要 va_end 这是可变参数的协议要求用于清理资源或使处理器栈保持一致。忽略可能导致移植性问题。 如果不知道参数数量咋办 一般通过format字符串或某个“终止标识”来知道需要获取多少参数与 printf 同理。C 语言本身不自动帮你检测参数数量。 va_arg(args, type) 中的 type 必须跟传入参数类型一致吗 必须一致否则会导致解析错误、内存访问混乱。 变长宏variadic macros 与 va_list 有何不同** 变长宏是一种宏特性以 ... 结尾的宏定义在编译期处理多余参数。va_list 是函数层面的不定参数在运行期处理。 7. 结论 va_list 是 C 语言用来处理不定参数函数的一种类型它与 va_start / va_arg / va_end 等宏配合使用能够在函数里逐个获取传入的可变数量/类型参数。典型用法在函数内部先 va_start(args, last_fixed_param)然后多次 va_arg(args, type) 依次读出每个参数最后 va_end(args)。printf、snprintf、vsnprintf 等函数就是使用可变参数或 va_list来实现的在变长参数的解析或格式化方面非常常见。
http://www.hkea.cn/news/14387086/

相关文章:

  • 中山网站的建设wordpress文章图片点击放大浏览
  • 170个可带链接锚文本外链的网站论坛临海app开发
  • 龙岩网站建设运营电商平台有哪些软件
  • 广西建设厅网站是什么怎么建立本地网站
  • 济南集团网站建设泰安人才网
  • 苏州企业网站建设服务中心玉林市网站建设
  • 网站建设就找奇思网络网站建设做什么会计分录
  • 建设一个功能简单的网站长春建站企业
  • 佛山家居企业网站建设网站建设公司招网站设计
  • 新类型 网站河北注册公司流程和费用
  • 网站字体加载不出来怎么办网页制作软件属于什么软件类别
  • 后台的企业网站模板wordpress页面加载
  • 网络求职做阿姨哪个网站好前端如何优化seo
  • 10m带宽做下载网站html好看的网站
  • 推广网站的论坛如何自己做官网首页
  • 网站建设解决方做公益做的好的的网站
  • 公司网站设计制作山东网站制作团队
  • 企业如何建站做非洲出口的网站
  • 路南网站建设环保网站建设费用
  • 关注公众号推广2元一个智谋网站优化公司
  • 微信端网站设计规范新手从零基础建站初级网站建设
  • 一个网站绑定多个域名2022年国内互联网公司排名
  • 做五金的有哪些外贸网站宿迁网站建设制作
  • 网站设计的主题企业网站报价模板下载
  • 自己网站怎么推广app首页界面设计
  • 宽屏大气通用企业网站源码asp模板源码程序生成静态html南通海洲建设集团网站
  • 呼和浩特市网站建设网站需要什么资质
  • 网站建设如何站内搜索正保建工网校
  • 建立网站纯文字版本免费软件你懂我意思正能量
  • 沧县官厅网站建设网站源码交易网