函数参数列表中的三个点是什么意思?

2024-03-11

我遇到了这样的函数定义:

char* abc(char *f, ...)
{
}

三个点是什么意思?


这些类型的函数称为可变参数函数 (维基百科链接 https://en.wikipedia.org/wiki/Variadic_function)。他们使用省略号(即三个点)来指示函数可以处理的参数数量可变。您可能使用过此类函数的一个地方(也许没有意识到)是与各种printf函数,例如(来自 ISO 标准):

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

省略号允许您创建事先未知参数数量的函数,并且您可以使用stdargs.h功能 (va_start, va_arg and va_end) 来获取具体参数。

你必须知道types您提取的论点的一部分,并有某种方式决定何时完成。这printf函数使用格式字符串(对于类型和计数)来执行此操作,而下面的示例代码始终假设const char *作为具有哨兵值的类型NULL来决定完成。

这个链接here http://www.eskimo.com/%7Escs/cclass/int/sx11b.html有一篇关于变量参数列表使用的很好的论文printf.


作为示例,以下程序包含一个函数outStrings(),这允许您打印任意数量的字符串:

#include <stdio.h>
#include <stdarg.h>

void outStrings(const char *strFirst, ...) {
    // First argument handled specially.

    printf("%s", strFirst);
    va_list pArg;
    va_start(pArg, strFirst);

    // Just get and process each string until NULL given.

    const char *strNext = va_arg(pArg, const char *);
    while (strNext != NULL) {
        printf("%s", strNext);
        strNext = va_arg(pArg, const char *);
    }

    // Finalise processing.

    va_end(pArg);
}

int main(void) {
    char *name = "paxdiablo";
    outStrings("Hello, ", name, ", I hope you're feeling well today.\n", NULL);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

函数参数列表中的三个点是什么意思? 的相关文章

随机推荐

  • 在 Flutter Canvas 中使用 Gradient 和 Paint 对象

    我可以使用以下示例绘制半圆 Flutter如何画半圆 半圆 https stackoverflow com questions 57748469 flutter how to draw semicircle half circle 但是 那
  • 根据外键选择填充 django-admin 中的值

    我有一个带有外键引用的模型 看起来像这样 class Plan models Model template models ForeignKey PlanTemplate throttle models IntegerField defaul
  • 设置 Java 应用程序的全局字体

    我需要为我的应用程序设置默认字体 有没有一种不依赖 LaF 的方法可以做到这一点 弄清楚了 致电 setUIFont new javax swing plaf FontUIResource new Font MS Mincho Font P
  • CloudFoundry 时区

    我开发了一个非常以 JodaTime 日期时间为中心的应用程序 日历等 在我的本地计算机上一切正常 我已在 cloudfoundry 部署了我的应用程序 但日历中没有可见的日期 我猜这和cloudfoundry的时区有关 我已将本地运行的应
  • 在谷歌应用程序脚本中以 HTML 形式获取谷歌文档[重复]

    这个问题在这里已经有答案了 如何在谷歌应用程序脚本中获取 HTML 形式的谷歌文档 例如 我可以像这样获取文档正文 DocumentApp getActiveDocument getBody 但是当我登录时什么也没有 function do
  • 如何从 iOS SDK 中的 Facebook 对象获取 Facebook 用户 ID?

    我看到 Facebook 对象中提供了访问令牌 但我没有看到 Facebook 用户 ID 我可以向 我 发出图形请求以获取 Facebook Id 但我不想进行额外的 api 调用 现在有一种简单的方法可以做到这一点 假设你已经有一个FB
  • 将图像转换为 pdf php

    我在用csxi http www chestysoft com ximage twainupload asp将文档扫描为图像 但我必须将 pdf 文件上传到服务器 如何在 php 中将图像转换为 PDF 或者有什么方法可以让 csxi 将文
  • 用于应用程序本地部署的 MSVC 2015 通用 CRT

    据宣布 通用 CRT 将是一个可重新分发的 DLL 这样应用程序本地部署仍然是可能的 我已经安装了 Visual Studio 2015 Express Edition 并且在 SDK 目录中查找 ucrtbase dll 但找不到任何内容
  • 如何添加第三方 Java JAR 文件以在 PySpark 中使用

    我有一些 Java 第三方数据库客户端库 我想通过访问它们 java gateway py 例如 要使客户端类 不是 JDBC 驱动程序 通过 Java 网关可供 Python 客户端使用 java import gateway jvm o
  • 将压缩半字节组合成压缩字节

    给定一个或多个 m128i or m256i每个 16 位元素包含一个半字节 将它们组合并打包为每个 8 位元素一个字节的最快方法是什么 即 hi lt lt 4 lo对于相邻的 16 位元素 这是我想出的最好方法 不幸的是它与标量代码相当
  • 如果内容太宽,请在 HTML 标记中插入省略号 (...)

    我有一个具有弹性布局的网页 如果调整浏览器窗口的大小 该网页会更改其宽度 在这个布局中有标题 h2 其长度可变 实际上是我无法控制的博客文章的标题 目前 如果它们比窗口宽 它们会分成两行 是否有一个优雅的 经过测试的 跨浏览器 解决方案 例
  • 如何在IOS的UIView中仅使文本/标题覆盖的部分透明

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试创建一个UIView with text the text可能会不断变化 在其之上 我只想要text其中的一部分UIView透明
  • 模拟对象上的异步回调不等待

    我试图模拟单元测试的复杂情况 mockController new Mock
  • 无法连接到 (LocalDB)\MSSQLLocalDB -> 用户“User-PC\User”登录失败

    当我尝试通过 SQL Server Management Studio 连接 LocalDB MSSQLLocalDB 时 出现错误 我还尝试使用默认数据库作为 master 登录 错误是相同的 Here is the Server det
  • JavaScript 中的嵌套层数是否有限制?

    假设您有一个非常复杂的算法 需要数十个 for 循环 JavaScript 对循环的嵌套深度有限制还是没有限制 深层嵌套 for 循环的最佳实践是什么 我尝试在 MDN 上搜索 但找不到我要找的内容 Edit 我正在寻找是否有内置限制 例如
  • Java - 接口扩展自身

    我已经使用这个网站大约 6 个月了 是时候问我的第一个问题了 因为我找不到这个问题的答案 至少不是我能理解的答案 在这段代码中 为什么这个接口要扩展自身 public interface PositionedVertex
  • DecorView子框架布局

    有人可以向我解释一下 为什么我的布局上的 DecorView 的子级是 FrameLayout 而我还没有定义它 这是xml布局
  • 观察者模式是否违反了单一责任原则?

    如果使用观察者设计模式的应用程序具有subject具有以下职责的类 1 管理和通知观察者 即提供注册和注销函数并调用所有观察者通知函数 和 2 它最初的责任 即班级在成为班级之前正在做什么subject 这个类是否违反了单一职责原则 它显然
  • jsPDF 不完整或损坏的 PNG 文件

    使用 jsPDF 添加常规 png 图像没有问题 但现在我从服务器发送生成的图像 并且浏览器控制台在渲染 PDF 文件时显示此错误 PNG 文件不完整或损坏 显然图像不是不完整或损坏的 因为我可以看到服务器的响应并且图像很好 另外 为了避免
  • 函数参数列表中的三个点是什么意思?

    我遇到了这样的函数定义 char abc char f 三个点是什么意思 这些类型的函数称为可变参数函数 维基百科链接 https en wikipedia org wiki Variadic function 他们使用省略号 即三个点 来