问题标签 [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.
c - 可变参数宏中标记的串联
在 C 中,是否可以在可变参数宏中连接每个变量参数?
例子:
普通##
运算符对可变参数宏具有特殊含义(避免空参数列表的逗号)。当与 with 一起使用时,连接__VA_ARGS__
仅与第一个标记一起发生。
例子:
建议?
objective-c - obj-C 中的可变参数函数跳过第一个参数
我在将可变数量的参数传递给函数时遇到问题:
问题是函数跳过了第一个参数。我对该函数的调用如下所示:
我可以在第一个位置传递一个虚拟对象并给出所需的结果,但必须有更好的解决方案。谢谢!
c++ - C++ 可变参数模板异常示例
下面的构造是什么意思?
它由 gcc 4.4.5+ 编译,执行时输出0
。
c++ - 是否可以生成参数包?
考虑以下伪代码:
是否可以编写一个模板unique
,使其生成一个仅由 s 中唯一类型组成的参数包T
,以便worker<x,y,x,z>
直接从x
、y
、 、z
、 、 、 、 、 、 、 按顺序派生,给定T
的 s 是非最终类?
c - 计算参数数量的宏
我有一个来自第三方 C 库的可变参数函数:
argc
表示传递的可选参数的数量。正如这里所建议的,我用一个计算参数数量的宏来包装它。为了阅读方便,这里是宏:
我像这样包装它:
该PP_NARG
宏适用于接受一个或多个参数的函数。例如,PP_NARG("Hello", "World")
计算结果为2
。
问题是,当没有传递参数时,PP_NARG()
计算结果为1
而不是0
。
我了解这个宏是如何工作的,但我想不出修改它的想法,以便它在这种情况下也能正确运行。
有任何想法吗?
编辑:
我找到了一种解决方法PP_NARG
,并将其作为答案发布。
我仍然有包装可变参数函数的问题。当__VA_ARGS__
为空时,my_func
扩展为func(0, )
触发编译错误。
c++ - 简化 __VA_ARGS__ 问题:无法提取 NULL
我得到以下代码:
头文件:
cpp文件:
主文件:
工作正常!!
但是这个:
不工作..如果我在头文件中为 anyBody 注释宏
有可能是这样的:
现在我的问题:
是否可以嵌套一些宏,例如
在他们中间 ?
我读过整个“变量参数计数”的东西今天还没有真正在 cpp 中设计吗?
如果你看一下函数 anyHtml() 和 anyBody()。这是解决此问题的“好”解决方案还是某种肮脏的新手黑客?我仍然是 cpp 的新手,主要是 perl 和 java.. 为此我想得到一些反馈以进一步了解它..
现在..足够了:-)
欢迎你告诉我你想说什么.. :-)
- - 编辑
好吧,我很抱歉..
输出应该是
但它给了
如果我同时使用
如果我做
这些错误没有出现..
没有这个宏,我必须输入:
我知道非常特别.. :-(
- - 编辑
感谢您解决我的问题!
宏定义中的分号解决了嵌套问题...
anyHtml() 和 body() 函数呢...
使用是否正确
并在字符串操作之后进行转换?
还是脏?
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:为一个函数参数发送不同的结构,但这无关紧要,因为我想接受非指针参数。
处理此功能的正确方法是什么?
function - 如何处理 Scheme 中未指定数量的参数?
例如((fn-stringappend string-append) "a" "b" "c")
我知道如何处理这个(f x y z)
。但是如果有未知数量的参数怎么办?有没有办法处理这种问题?
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 来处理它来索引对列表,但看来我必须使用递归。我不想要任何代码解决方案,除非您认为有必要进行解释,但是有人对如何攻击这有建议吗?
c - 使用可变变量格式化
c89 gcc 4.7.4
我只是在试验这样的宏:
并像这样使用:
输出给出完全相同的格式。我只是想知道fmt
在我的第一个宏中使用参数有什么好处?它似乎并不真正需要。我怎么能利用它?