问题标签 [variadic]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
4492 浏览

c - 可变参数宏中标记的串联

在 C 中,是否可以在可变参数宏中连接每个变量参数?

例子:

普通##运算符对可变参数宏具有特殊含义(避免空参数列表的逗号)。当与 with 一起使用时,连接__VA_ARGS__仅与第一个标记一起发生。

例子:

建议?

0 投票
1 回答
252 浏览

objective-c - obj-C 中的可变参数函数跳过第一个参数

我在将可变数量的参数传递给函数时遇到问题:

问题是函数跳过了第一个参数。我对该函数的调用如下所示:

我可以在第一个位置传递一个虚拟对象并给出所需的结果,但必须有更好的解决方案。谢谢!

0 投票
1 回答
407 浏览

c++ - C++ 可变参数模板异常示例

下面的构造是什么意思?

它由 gcc 4.4.5+ 编译,执行时输出0

0 投票
2 回答
4178 浏览

c++ - 是否可以生成参数包?

考虑以下伪代码:

是否可以编写一个模板unique,使其生成一个仅由 s 中唯一类型组成的参数包T,以便worker<x,y,x,z>直接从xy、 、z、 、 、 、 、 、 、 按顺序派生,给定T的 s 是非最终类?

0 投票
4 回答
12534 浏览

c - 计算参数数量的宏

我有一个来自第三方 C 库的可变参数函数:

argc表示传递的可选参数的数量。正如这里所建议的,我用一个计算参数数量的宏来包装它。为了阅读方便,这里是宏:

我像这样包装它:

PP_NARG宏适用于接受一个或多个参数的函数。例如,PP_NARG("Hello", "World")计算结果为2

问题是,当没有传递参数时,PP_NARG()计算结果为1而不是0
我了解这个宏是如何工作的,但我想不出修改它的想法,以便它在这种情况下也能正确运行。

有任何想法吗?


编辑
我找到了一种解决方法PP_NARG,并将其作为答案发布。
我仍然有包装可变参数函数的问题。当__VA_ARGS__为空时,my_func扩展为func(0, )触发编译错误。

0 投票
2 回答
367 浏览

c++ - 简化 __VA_ARGS__ 问题:无法提取 NULL

我得到以下代码:

头文件:

cpp文件:

主文件:

工作正常!!

但是这个:

不工作..如果我在头文件中为 anyBody 注释宏

有可能是这样的:

现在我的问题:

是否可以嵌套一些宏,例如

在他们中间 ?

我读过整个“变量参数计数”的东西今天还没有真正在 cpp 中设计吗?

如果你看一下函数 anyHtml() 和 anyBody()。这是解决此问题的“好”解决方案还是某种肮脏的新手黑客?我仍然是 cpp 的新手,主要是 perl 和 java.. 为此我想得到一些反馈以进一步了解它..

现在..足够了:-)

欢迎你告诉我你想说什么.. :-)

- - 编辑

好吧,我很抱歉..

输出应该是

但它给了

如果我同时使用

如果我做

这些错误没有出现..

没有这个宏,我必须输入:

我知道非常特别.. :-(

- - 编辑

感谢您解决我的问题!

宏定义中的分号解决了嵌套问题...

anyHtml() 和 body() 函数呢...

使用是否正确

并在字符串操作之后进行转换?

还是脏?

0 投票
2 回答
11475 浏览

c - 如何编写接受任何类型的(一个)参数的 C 函数

我正在为 C 中的列表实现简单的库,但我在编写find函数时遇到了问题。

我希望我的函数接受任何类型的参数来查找,包括: find(my_list, 3)find(my_list, my_int_var_to_find). 我已经知道什么是列表元素的类型

现在我已经找到了几种方法来处理这个问题:

  • 不同类型的后缀不同的函数:int findi(void* list, int i)int findd(void* list, double d)-但我不喜欢这种方法,这对我来说似乎是多余的,而且 API 令人困惑。

  • 使用联合:

    但是通过这种方式,我强制用户既要了解any_type联合,又要在调用find. 我想避免这种情况。

  • 使用可变参数函数:int find(void* list, ...). 我喜欢这种方法。但是,我担心参数数量没有限制。用户可以自由写作,int x = find(list, 1, 2.0, 'c')虽然我不知道它应该是什么意思。

我也看到了对这个问题的回答:C:为一个函数参数发送不同的结构,但这无关紧要,因为我想接受非指针参数。

处理此功能的正确方法是什么?

0 投票
2 回答
22401 浏览

function - 如何处理 Scheme 中未指定数量的参数?

例如((fn-stringappend string-append) "a" "b" "c") 我知道如何处理这个(f x y z)。但是如果有未知数量的参数怎么办?有没有办法处理这种问题?

0 投票
1 回答
1559 浏览

scheme - Scheme中的可变参数函数

我必须在 Scheme 中定义一个采用以下形式的可变参数函数: (define (n-loop procedure [a list of pairs (x,y)])其中对的列表可以是任意长度。

每对指定一个下限和上限。也就是说,以下函数调用:(n-loop (lambda (x y) (inspect (list x y))) (0 2) (0 3))产生:

显然,汽车和 cdr 将不得不参与我的解决方案。但是使这变得困难的规定如下。根本不使用赋值语句或迭代循环(while 和 for)。

我可以使用 while 和 for 来处理它来索引对列表,但看来我必须使用递归。我不想要任何代码解决方案,除非您认为有必要进行解释,但是有人对如何攻击这有建议吗?

0 投票
3 回答
101 浏览

c - 使用可变变量格式化

c89 gcc 4.7.4

我只是在试验这样的宏:

并像这样使用:

输出给出完全相同的格式。我只是想知道fmt在我的第一个宏中使用参数有什么好处?它似乎并不真正需要。我怎么能利用它?