|
|
1
198
要传递椭圆,必须将它们转换为va_列表,并在第二个函数中使用该va_列表。明确地;
|
|
|
2
54
如果不知道要传递多少参数,就无法调用printf,除非你想使用淘气的、不可移植的技巧。
通常使用的解决方案是始终提供vararg函数的另一种形式,因此
|
|
|
3
51
Variadic Functions 可以是 dangerous . 下面是一个更安全的技巧:
|
|
|
4
27
在华丽的C++ 0x中,你可以使用可变模板:
|
|
|
5
7
可以对函数调用使用内联程序集。(在这段代码中,我假设参数是字符)。
|
|
|
6
4
虽然您可以通过首先将格式化程序存储在本地缓冲区来解决传递格式化程序的问题,但这需要堆栈,有时可能是需要处理的问题。我试着跟在后面,好像效果不错。
希望这有帮助。 |
|
|
7
3
您也可以尝试宏。
|
|
|
8
1
罗斯的溶液洗了一点。只有当所有参数都是指针时才有效。另外,语言实现必须支持省略前面的逗号,如果
|
|
9
-1
假设你有一个典型的变量函数。因为变量之前至少需要一个参数
或者你呢? 如果将变量函数包装在宏中,则不需要前面的参数。考虑这个例子:
这显然要方便得多,因为您不必每次都指定初始参数。 |
|
|
10
-5
我不确定这是否适用于所有的编译器,但迄今为止它对我有效。
您可以添加…如果你想的话,可以放在里面,但你不需要它。这是因为va_start使用给定变量的地址作为起点。在本例中,我们给它一个对func()中变量的引用。所以它使用这个地址并在堆栈上读取该地址之后的变量。内部函数func()从func()的堆栈地址读取。因此,只有当两个函数使用相同的堆栈段时,它才起作用。 如果将任何var作为起点,va_start和va_arg宏通常都可以工作。因此,如果需要,您可以将指针传递给其他函数并使用这些函数。您可以很容易地生成自己的宏。所有的宏都是类型化内存地址。然而,让它们适用于所有编译器和调用约定是令人讨厌的。因此,使用编译器附带的那些通常比较容易。 |
|
|
MaPo · Linux,设置锁定ICMP_过滤器选项 1 年前 |
|
Doohyeon Won · 内联函数上的奇怪现象?[关闭] 1 年前 |
|
|
Bobby · 复合字面值总是左值吗? 1 年前 |
|
9-Pin · C: 嵌套结构的堆栈内存分配 1 年前 |