variadic-functions相关内容

C 可变参数函数:如何指定给 va_arg 的类型

在 printf 之类的函数中,我们使用 stdarg.h 来处理可变参数. void print(int args,...){va_list ap;va_start(ap, args);int i = 0;for(i=0; i 我们想解析格式列表(提供给我们的可变参数函数的第一个参数)以跟踪格式列表中指定的参数的类型,然后使用适当的类型调用 va_arg. 我进行了第一个循环来解析格式 ..
发布时间:2021-09-16 18:56:13 其他开发

va_list 和 va_arg

我像这样使用 va_list: void foo(const char* firstArg, ...) {va_list 参数;va_start (args, firstArg);for (const char* arg = firstArg; arg != NULL; arg = va_arg(arg, const char*)) {//用 arg 做一些事情}va_end(args);} ..
发布时间:2021-09-16 18:56:10 其他开发

Linux 上的 va_list 不当行为

我有一些代码可以将可变参数转换为 va_list,然后将列表传递给一个函数,然后该函数调用 vsnprintf.这在 Windows 和 OS X 上运行良好,但在 Linux 上运行失败,结果很奇怪. 在以下代码示例中: #include #include #include #include char *myPrintfInner(const char *message, va_​​li ..
发布时间:2021-09-16 18:56:08 其他开发

操作可变参数的标准方法?

这是一个奇怪的问题,但是在将 va_list 的内容传递给另一个函数之前,是否有一种标准的方法来操纵它的内容?例如,假设我有两个函数,sum 和 vsum: int vsum(int n, va_​​list ap) {整数总计 = 0;for (int i = 0; i ..
发布时间:2021-09-16 18:56:05 其他开发

将 va_list 传递给其他函数

我一直在尝试将变量参数传递给 C 中的其他函数,但它在不同的运行时环境以及在同一环境中的不同运行中产生不一致的结果: int main(){int result = myprintf("某事\n %d", 9);返回结果;}int myprintf(const char *format, ...){printf("某事\n %d", 9);printf("\n");va_list 参数;va_s ..
发布时间:2021-09-16 18:55:59 其他开发

如何在 Java 中通过引用传递可变参数

我正在编写一个方法,它接收任意数量的参数并返回修改后的参数.我尝试过使用可变参数但它不起作用,您可以在这里看到代码的简化版本: public static void main(String[] args) {String hello = "你好";String world = "world";添加前缀(你好,世界);System.out.println("你好:" + 你好 + " 世界:" + ..
发布时间:2021-09-16 18:55:53 Java开发

可变函数和常量

可变参数函数究竟如何处理数字常量?例如考虑以下代码: myfunc(5, 0, 1, 2, 3, 4); 函数如下所示: void myfunc(int count, ...){} 现在,为了使用 va_arg 迭代单个参数,我需要知道它们的大小,例如int、short、char、float 等.但是对于我使用的数字常量,我应该假设什么大小在上面的代码中? 测试表明,仅仅假设它们的 ..
发布时间:2021-09-16 18:55:50 其他开发

如何将结构传递和访问 C 中的可变参数函数

您好,我想将结构传递给可变参数函数,并在 C 中使用所述结构内的值.我不知道如何访问传递的每个结构的内容. 这是一个示例情况 typedef struct {整数;bool dontIncludeFlag;} 数字;int 平均值(无符号计数,...){va_list ap;国际j;整数总和 = 0;va_start(AP,计数);for (j = 0; j 如何访问我传递的结构体参数 ..
发布时间:2021-09-16 18:55:48 其他开发

变量参数的 stdcall (callee-pops) 中的堆栈清理

我正在学习一些组装的乐趣(目前在 Windows 上使用 NASM),我有一个关于 stdcall 调用约定 和具有可变数量参数的函数.例如,一个 sum 函数接受 X 个整数并将它们加在一起. 由于在使用stdcall时被调用者需要清理/重置堆栈,但您只能使用ret的常量值,我一直想知道是否有什么问题用 popping 返回地址,移动 esp,然后自己跳回调用者,而不是使用 ret.我认为 ..
发布时间:2021-09-16 18:55:45 其他开发

C - Sprintf 的变量参数?

我有一个功能; void foo(const char* format, ...){字符缓冲区[1080];//处理 C 变量参数的方法?va_list argptr;va_start(argptr,格式);sprintf(缓冲区,格式,argptr);va_end(argptr);printf_s("%s.\n", 缓冲区);}int main(){int val = 53;foo("%d", ..
发布时间:2021-09-16 18:55:42 其他开发

如何确定 va_arg 列表的结尾?

我有一个函数 foo(char *n, ...);我需要获取并使用所有可选的 char 参数.我有一个使用 的想法 while(va_arg(argPtr, char) != NULL){...} 了解我何时到达列表的末尾.那么,它会起作用吗,如果在函数调用中我会做 foo(n, 't', 'm', '$', NULL); ? NULL 会被 va_arg 读取为字符吗?或者也许有一种 ..
发布时间:2021-09-16 18:55:39 其他开发

_Generic 结合可变参数函数?

在 C11 中,我可以创建一个原型如下所示的函数: void myVaFunc(const char* const conv, ...); 我可以这样运行: myVaFunc("ici", 1, "test", 2); 函数会知道(在解析第一个参数后)还有 3 个附加参数(4 个与初始参数),其类型因此 int, string(char pointer) 和 int.简单,但不是很优雅.最 ..
发布时间:2021-09-16 18:55:32 其他开发

为什么转发可变参数无效?

考虑可变参数函数参数: func foo(bar:Int...) ->() { } 这里foo 可以接受多个参数,例如foo(5,4).我很好奇 Int... 的类型及其支持的操作.例如,为什么这是无效的? func foo2(bar2:Int...) ->(){富(bar2);} 报错: 找不到接受所提供参数的“_conversion"重载 为什么转发可变参数无效? 编 ..
发布时间:2021-09-16 18:55:21 移动开发