使用未知数量的参数调用可变参数函数

2023-11-29

假设我有一个接受可变数量参数的函数:我想从其他地方调用这个函数,构建参数列表,但事先不知道我需要多少个参数。

抱歉,没有很好地解释,希望这段代码能让我的问题更清楚:

void foo(int n, ...) {
    va_list vl;
    va_start(vl,n);

    for (int i = 0; i<n; i++) {
      // Do something to each passed variable
    }
}

该函数是从这个函数调用的:

void bar(int howManyParams) {

  // Here I want to call foo() with howManyParams parameters
  // (values are irrelevant for the question)
  // 
  // I.e. for howManyParams = 1, we should call foo(0)
  //      for howManyParams = 2, we should call foo(0,0)
  //      for howManyParams = 3, we should call foo(0,0,0)
  // etc.
  //

}

实际上在运行时构建一个可变长度的参数列表——我很确定你正在尝试做的事情——是相当棘手的。在标准 C 中根本无法做到这一点,但是您可以尝试各种技巧。

也许最好的是“外部函数接口库”,位于http://sourceware.org/libffi/ .

另请参阅 C 常见问题解答列表中的问题 15.13:http://c-faq.com/varargs/invvarargs.html


另请参阅之前的 Stackoverflow 问题:
带有未知参数的 C 后期绑定
如何在 C 中通过传递多个参数的指针来调用函数?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用未知数量的参数调用可变参数函数 的相关文章

  • 为什么相同的代码在同一台计算机上的执行时间可能不同?

    我是 C 编程新手 我编写了代码并希望获得它的运行时 这就是我所做的 每次运行代码时 我都会得到不同的运行时值 这样对吗 或者我的代码有问题吗 int main int argc char argv time t start end sta
  • 如何在 Visual Studio 2010 中增强 XAML 设计器?

    当我使用 XAML 设计器时 进入设计器和退出设计器是如此困难和缓慢 当我这样做时 Visual Studio 卡了一段时间 有什么方法可以增强 XAML 设计器和编辑器吗 Ant 保存 XAML 文件时非常慢 这通常意味着您可能有复杂的
  • c和java语言中的换行符

    现在行分隔符取决于系统 但在 C 程序中我使用 n 作为行分隔符 无论我在 Windows 还是 Linux 中运行它都可以正常工作 为什么 在java中 我们必须使用 n 因为它与系统相关 那么为什么我们在c中使用 n 作为新行 而不管我
  • 用 C++ 进行服装建模 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在编写一些软件 最终会绘制一个人体框架 可以配置各种参数 并且计划是在假人身上放置某种衣服 我研究
  • 如何使用MemoryCache代替Timer来触发一个方法?

    以下方法通过等待已运行操作的结果来处理并发请求 对数据的请求可能会使用相同 不同的凭据同时出现 对于每组唯一的凭据 最多可以有一个GetCurrentInternal呼叫正在进行中 当准备就绪时 该呼叫的结果将返回给所有排队的服务员 pri
  • 使用Physics.Raycast 和Physics2D.Raycast 检测对象上的点击

    我的场景中有一个空的游戏对象 带有 2D 组件盒碰撞器 我将脚本附加到该游戏对象 void OnMouseDown Debug Log clic 但是当我点击我的游戏对象时 没有任何效果 你有什么想法 如何检测我的盒子碰撞器上的点击 使用光
  • 如何检查QProcess是否正确执行?

    QProcess process sdcompare QString command sdcompare QStringList args sdcompare command sdcompare diff args sdcompare lt
  • 向 Nhibernate 发出 SQL 查询

    如何将此 SQL 查询发送给 Nhibernate SELECT Customer name FROM Company INNER JOIN Customer ON Company CompanyId Customer CompanyId
  • 如何修复此错误“GDI+ 中发生一般错误”?

    从默认名称打开图像并以默认名称保存 覆盖它 我需要从 Image Default jpg 制作图形 将其放在 picturebox1 image 上并在 picurebox1 上绘制一些图形 它有效 这不是我的问题 但我无法保存 pictu
  • 在新的浏览器进程中打开 URL

    我需要在新的浏览器进程中打开 URL 当浏览器进程退出时我需要收到通知 我当前使用的代码如下 Process browser new Process browser EnableRaisingEvents true browser Star
  • 单元测试一起运行时失败,单独运行时通过

    所以我的单元测试遇到了一些问题 我不能只是将它们复制并粘贴到这里 但我会尽力而为 问题似乎是 如果我一项一项地运行测试 一切都会按预期进行 但如果我告诉它一起运行测试 则 1 5 将通过 TestMethod public void Obj
  • 如何从 .resx 文件条目获取注释

    资源文件中的字符串有名称 值和注释 The ResXResourceReader类让我可以访问名称和值 有办法看评论吗 你应该能够得到Comment via ResXDataNode class http msdn microsoft co
  • 生成(非常)大的非重复整数序列而不进行预洗牌

    背景 我编写了一个简单的媒体客户端 服务器 我想生成一个不明显的时间值 随从客户端到服务器的每个命令一起发送 时间戳中将包含相当多的数据 纳秒分辨率 即使它不是真正准确 因为现代操作系统中计时器采样的限制 等 我想做的 在 Linux 上
  • Rx 中是否有与 Task.ContinueWith 运算符等效的操作?

    Rx 中是否有与 Task ContinueWith 运算符等效的操作 我正在将 Rx 与 Silverlight 一起使用 我正在使用 FromAsyncPattern 方法进行两个 Web 服务调用 并且我想这样做同步地 var o1
  • 将 log4net 与 Autofac 结合使用

    我正在尝试将 log4net 与 Autofac 一起使用 我粘贴了这段代码http autofac readthedocs org en latest examples log4net html http autofac readthed
  • 私有模板函数

    我有一堂课 C h class C private template
  • std::async 与重载函数

    可能的重复 std bind 重载解析 https stackoverflow com questions 4159487 stdbind overload resolution 考虑以下 C 示例 class A public int f
  • .NET中的LinkedList是循环链表吗?

    我需要一个循环链表 所以我想知道是否LinkedList是循环链表吗 每当您想要移动列表中的 下一个 块时 以循环方式使用它的快速解决方案 current current Next current List First 电流在哪里Linke
  • 为什么在setsid()之前fork()

    Why fork before setsid 守护进程 基本上 如果我想将一个进程与其控制终端分离并使其成为进程组领导者 我使用setsid 之前没有分叉就这样做是行不通的 Why 首先 setsid 将使您的进程成为进程组的领导者 但它也
  • 如何将 Roslyn 语义模型返回的类型符号名称与 Mono.Cecil 返回的类型符号名称相匹配?

    我有以下代码 var paramDeclType m semanticModel GetTypeInfo paramDecl Type Type Where paramDeclType ToString returns System Col

随机推荐

  • 如何以编程方式计算上下文切换?

    在Windows下 有没有办法以编程方式计算同一进程的上下文切换 最好的事情是每当线程切换时都会调用回调 有一个性能计数器这对你有用 您所要做的就是读取它的值 您可以找到有关如何交互式执行此操作的说明here 但也可以使用其 API 来使用
  • Woocommerce 自定义产品类别下拉问题

    我正在为店面主题开发一个儿童主题 我使用产品类别小部件作为标题下的下拉菜单 这完全符合我的需求 尽管我需要相同的 如果可能 下拉菜单显示在每个类别页面上 而不仅仅是主页上 我正在定制这段代码这几乎做到了 WooCommerce Extra
  • 年和年代有什么区别?

    The DateTimeFormatter类文档定义单独的符号u年度和y时代年份 https docs oracle com javase 8 docs api java time format DateTimeFormatter html
  • 拖动手势时将矩形限制为屏幕边缘

    我刚刚开始使用 SwiftUI 我希望找到最好的方法来解决在拖动手势期间将该矩形保持在屏幕边界内的问题 现在它会离开边缘 直到到达正方形的中间 我想是因为我正在使用 CGPoint 我尝试做一些数学来限制矩形 它只在左侧成功 但这似乎是一种
  • Gremlin 日期过滤方法

    有没有办法查询 titan gremlin 的日期 例如查找过去 X 天内的所有结果 任何帮助将非常感激 最好的方法是简单地将日期存储为 Long 值 并可能在边缘中的此类字段上建立索引 以便您可以利用limit interval等 请参阅
  • 将范围导出为图像

    一段时间以来 我和我的同事一直在使用各种方法来创建模板来轻松制作志愿者职位空缺表格 理想情况下 该项目的负责人只需输入详细信息 职位空缺表格就会自动生成 此时 我已经自动完成了表单 但我们仍然需要复制范围并将其手动粘贴到绘图中以将其另存为图
  • 我可以向 JSON-LD 中的给定 @type 添加自定义属性吗?

    我正在开发一个网站 允许用户探索大量唱片 所有数据当前都存储在一个 JSON 文件中 我将其转换为 JSON LD 以便使其具有语义并可供搜索引擎抓取 Schema org 有一个标准类型音乐专辑 它没有我为每个专辑存储 并呈现给用户 的某
  • C# - 国际设置的 Excel 数字格式问题

    我正在尝试使用 c 3 5 写入 Excel 2003 电子表格 但是我无法让它在不同的国家 地区设置中正常运行 国家 地区设置为英语或德语 这两个设置有不同的小数和千位设置 除非用户更改了 选项 屏幕的 国际 设置中的小数点和千位分隔符
  • 下拉列表项的工具提示

    我有一个下拉列表 我想为下拉列表项添加工具提示 我尝试使用以下代码 但它不起作用 for int d 0 d
  • JQUERY 通过参数 ID 获取元素

    只是想知道 jquery 的等效语法是什么 var elm id my id var elm document getElementById elm id thanks 我想你正在寻找的是 var elm id my id var elm
  • Eclipse CDT clean 在 Windows 上失败:尝试运行 rm -rf

    我在 Windows 7 上使用带有 CDT 的 Juno 当我尝试使用 MinGW 提供的内部构建器或 make 清理项目时 Eclipse 运行 X 命令 射频 并且清理操作失败 从控制台使用外部构建器 mingw32 make 进行日
  • Hive/Hadoop 中的唯一密钥生成

    从大数据 Hive 表中选择一组记录时 需要为每条记录创建唯一的键 在顺序操作模式下 通过调用像 max id 这样的东西很容易生成唯一的 id 由于 hive 并行运行任务 我们如何在不影响 hadoop 性能的情况下生成唯一键作为选择查
  • 需要处理来自非活动(.java)类的点击

    我有一个主要的 Activity 类 其中包含大量代码 数据 所以我想让它简短易读 所以我想创建一个 java 文件来根据要求处理一些功能 喜欢 Button b Button findviewById R id b1 b setOnCli
  • Android 应用程序 CPU 使用率高

    我正在编写一个应用程序 该应用程序必须在较长时间内执行高 CPU 使用率的操作 该操作像服务一样启动 但是android系统因为CPU使用率高而杀死了该应用程序 那么我该怎么做才能减少CPU使用率呢 并使系统不停止我的服务 服务 impor
  • 登录不应该是 GraphQL 中的查询吗?

    In the tutorial在 GraphQL 身份验证上 login is a Mutation type Mutation post url String description String Link signup email St
  • Android 双向滚动

    这更多的是一个大众答案而不是一个问题 我只是不知道如何发布它 版主如果你能告诉我是否有这样的事情 这个问题被问死了 然后我需要做类似的事情 所以我解决了这个问题 这篇文章的答案是如何在android中创建3x3双向滚动视图 下面是如何创建双
  • 如何将 data.frame 列从 Factor 转换为数字 [重复]

    这个问题在这里已经有答案了 我有一个data frame谁的班级栏是Factor 我想将其转换为数字 以便我可以使用相关矩阵 gt str breast data frame 699 obs of 10 variables class Fa
  • 此 linq 代码中的多个 orderby

    如何添加第二个商品来订购 我也想按 goalScored 元素排序 var theteams from teams in xdoc Descendants team orderby int teams Element points desc
  • 使用 Java 在 PostgreSQL 中存储时间的最推荐方法是什么?

    我在 PostgreSQL 数据库中存储两个日期 第一个是网页的访问数据 第二个日期是网页的最后修改日期 这是一个长整型 我有些怀疑存储这些值的最佳策略是什么 我只需要日 月 年和小时 秒 这仅用于统计建议 那么 有些疑问 最好存储尽可能长
  • 使用未知数量的参数调用可变参数函数

    假设我有一个接受可变数量参数的函数 我想从其他地方调用这个函数 构建参数列表 但事先不知道我需要多少个参数 抱歉 没有很好地解释 希望这段代码能让我的问题更清楚 void foo int n va list vl va start vl n