C 中参数数量未知的函数

2024-01-07

我怎样才能编写(如果可能的话...)一个在 C99 中接受未知数量参数的函数(返回类型是常量)?


是的,您可以使用所谓的可变函数在 C 中完成此操作。 标准printf() http://pubs.opengroup.org/onlinepubs/9699919799/functions/printf.html and scanf() http://pubs.opengroup.org/onlinepubs/9699919799/functions/scanf.html例如,函数可以执行此操作。

将省略号(三个点)作为您希望“可变数量的参数”所在的最后一个参数。

要访问参数包括<stdarg.h> header:

#include <stdarg.h>

然后你就有了一个特殊的类型va_list它为您提供了传递的参数列表,您可以使用va_start, va_arg and va_end宏来迭代参数列表。

例如:

#include <stdarg.h>

int myfunc(int count, ...)
{
   va_list list;
   int j = 0;

   va_start(list, count); 
   for(j=0; j<count; j++)
   {
     printf("%d", va_arg(list, int));
   }

   va_end(list);

   return count;
}

调用示例:

myfunc(4, -9, 12, 43, 217);

完整的示例可以在以下位置找到:维基百科 http://en.wikipedia.org/wiki/Variadic_function#Variadic_functions_in_C.2C_Objective-C.2C_C.2B.2B.2C_and_D.

The count示例中的参数告诉被调用函数传递了多少个参数。这printf() and scanf()通过格式字符串找到它,但是一个简单的count论证也能做到这一点。有时,代码使用标记值,例如负整数或空指针(请参阅execl() http://pubs.opengroup.org/onlinepubs/9699919799/functions/execl.html例如)。

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

C 中参数数量未知的函数 的相关文章

  • WPF DataGrid 多选

    我读过几篇关于这个主题的文章 但很多都是来自 VS 或框架的早期版本 我想做的是从 dataGrid 中选择多行并将这些行返回到绑定的可观察集合中 我尝试创建一个属性 类型 并将其添加到可观察集合中 它适用于单个记录 但代码永远不会触发多个
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 随着时间的推移,添加到 List 变得非常慢

    我正在解析一个大约有 1000 行的 html 表 我从一个字符串中添加 10 个字符串 td 每行到一个list td
  • 为什么 GCC 不允许我创建“内联静态 std::stringstream”?

    我将直接前往 MCVE include
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • 需要帮助优化算法 - 两百万以下所有素数的总和

    我正在尝试做一个欧拉计划 http projecteuler net问题 我正在寻找 2 000 000 以下所有素数的总和 这就是我所拥有的 int main int argc char argv unsigned long int su
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • 如何定义一个可结构化绑定的对象的概念?

    我想定义一个concept可以检测类型是否T can be 结构化绑定 or not template
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat

随机推荐

  • 是否仍推荐使用旧版 Criteria API?

    我的团队在 Hibernate 3 x 下长期使用 hibernate Criteria API 最近 我们想将Hibernate版本升级到5 但是Criteria API似乎不再推荐了 但 JPA 看起来像是一个完全不同的 API 我们不
  • 无限滚动轮播(仅限 CSS)

    我正在尝试创建一个自动循环播放的轮播 最初我正在实施slick slider 但后来我发现了这种仅 CSS 的方法 body align items center background E3E3E3 display flex height
  • 如何加快Python中的嵌套交叉验证?

    据我发现 还有另外 1 个这样的问题 加速嵌套交叉验证 https stackoverflow com questions 49629112 speed up nested cross validation 但是 在尝试了该网站和微软上建议
  • 活动的每个片段中浮动操作按钮的不同实现

    这是关于在有 5 个片段的活动中协调浮动操作按钮的行为的问题 在我的应用程序中 我有一个 Activity 其中包含 ViewPager 和使用 FloatingActionButton 定义的 xml ViewPager 包含 Fragm
  • 如何在kdb中将多列合并为一列?

    我编写了下面的代码 可以运行 但我认为会有更好的方法来解决这个问题 我有这样的东西 table time 9 11 Bid1px 4 5 Bid2px 7 3 Bid3px 6 8 time Bid1px Bid2px Bid3px 9 4
  • 通过ajax加载JavaScript的良好实践方法

    免责声明 我对 AJAX 相当陌生 我环顾四周 不确定使用哪种方法来使用 ajax 加载 javascript 我使用 ajax 来请求每个页面需要自己的 6 10 个简短方法 总共可能有 5 6 个页面 因此总共大约有 35 个以上的方法
  • Java 局部变量、对象引用、实例变量在哪里

    我目前正在学习java的内存概念 栈和堆 我知道局部变量和方法调用住在一个叫做栈的地方 对象存在于堆中 但如果该局部变量包含一个对象怎么办 或者有一个对象引用 public void Something Duck d new Duck 24
  • 从命令行启动 Instruments

    我关注这个网站是为了开始使用 UI 自动化 http blog manbolo com 2012 04 08 ios automated tests with uiautomation 1 2 http blog manbolo com 2
  • 是否可以阻止“Rscript”清理其“tempdir”?

    我正在使用 R 通过Rscript和 H2O 但 H2O 正在崩溃 我想查看日志 但当 R 会话结束时 即 Rscript 完成时 包含它们的 R 临时目录似乎被删除 是否可以告诉 R Rscript 不要删除它使用的 tmp 文件夹 解决
  • 在 CollapsingToolbarLayout 上设置 contentcrim 颜色时出错

    我的应用程序最近开始在任何具有 CollapsingToolbarLayout 的 Activity 或片段上崩溃 并显示以下错误日志 Unable to start activity ComponentInfo com radioafri
  • Haskell:列表理解到组合

    受此启发article http www haskell org pipermail haskell cafe 2009 March 057221 html 我正在尝试将函数从列表理解转换为组合风格 我发现了一些有趣的事情 Example
  • 如何使用 swig 和 C# 处理字符串数组?

    我的 C 类有一个名为init int init int argc char argv 另外 我有一个回调 void callback int num char str 我的问题是 Swig 生成了一个奇怪的类SWIGTYPE p p ch
  • 将别名命名空间动态加载到另一个 Clojure 命名空间

    我正在尝试在运行时从文件加载名称空间 对于这个命名空间 我希望有一个通用别名 这样我就可以使用独立于加载文件的实际命名空间的统一限定名称来访问该命名空间中的函数 示例 不起作用 bar a clj ns bar a defn hello w
  • 如何访问gdb中寄存器偏移量的数据?

    我如何访问诸如0x14 edx x 16xb edx 0x14 The 0x14会给你你正在寻找的东西
  • pandas向量化运算来获取字符串的长度[重复]

    这个问题在这里已经有答案了 我有一个熊猫数据框 df pd DataFrame Donald Dump Make America Great Again Donald Shrimp columns text 我喜欢的是 Dataframe
  • 使用 Entity Framework 6 和 SQLite 的问题

    我正在尝试将实体框架与 SQLite 一起使用 我在将其集成到我的主应用程序中时遇到问题 因此我从头开始进行一些测试 完全按照http brice lambson blogspot com 2012 10 entity framework
  • 我们可以更改应用内结算产品 Play 商店的价格吗

    我已将应用内计费集成到我的应用程序中 但我找不到发布我的应用程序后是否可以更改产品价格 我发现我们无法更改价格subscription产品 但找不到任何东西Managed产品 发布应用后是否可以更改产品价格 如果是 那么需要多长时间才能影响
  • 如何将第三方 JavaScript 库添加到 Meteor 应用程序?

    我想添加一个 JavaScript 前端插件 例如jquery center js 到 Meteor 应用程序 如果我把它放在我的app 目录并刷新页面我收到此错误 您的应用程序崩溃了 这是最新的日志 节点 js 201扔 e proces
  • requirements.txt 中的“-e .”有什么作用? [复制]

    这个问题在这里已经有答案了 From https github com brandon rhodes luca blob master requirements txt https github com brandon rhodes luc
  • C 中参数数量未知的函数

    我怎样才能编写 如果可能的话 一个在 C99 中接受未知数量参数的函数 返回类型是常量 是的 您可以使用所谓的可变函数在 C 中完成此操作 标准printf http pubs opengroup org onlinepubs 969991