Tag: 可变参数

C ++ 11个可变数量的参数,相同的特定types

问题很简单,我将如何实现一个采用可变数量参数的函数(类似于可变参数模板),但是所有参数都具有相同的types,比如int。 我在想这件事情, void func(int… Arguments) 或者不会对types工作recursion静态断言?

va_end到底是什么? 是否总是需要调用它?

va_end – macros来重置arg_ptr 。 访问variables参数列表后, arg_ptr指针通常会用va_end()重置。 我明白,如果你想重新列表的话,这是必须的,但如果你不打算,这真的是需要的吗? 这只是一个很好的习惯,就像规则“总是有一个default:在你的switch ”?

如何包装可变长度参数的函数?

我期待在C / C ++中做到这一点。 我遇到了可变长度参数,但是这表明Python和C使用libffi解决scheme。 现在,如果我想用myprintf封装printf函数 我做的是如下所示: void myprintf(char* fmt, …) { va_list args; va_start(args,fmt); printf(fmt,args); va_end(args); } int _tmain(int argc, _TCHAR* argv[]) { int a = 9; int b = 10; char v = 'C'; myprintf("This is a number: %d and \nthis is a character: %c and \n another number: %d\n",a, v, b); return […]

从技术上讲,可变参数函数是如何工作的? printf如何工作?

我知道我可以使用va_arg来编写自己的可变参数函数,但是可变参数函数如何在汇编指令级别下工作呢? 例如, printf如何获取可变数目的参数? *没有规则,没有例外。 没有语言C / C ++,但是,这个问题可以回答他们两个 *注意:最初给出的答案如何printf函数可以在输出variables参数的同时输出它们? ,但似乎并不适用于提问者

是否有可能遍历variablesmacros中的参数?

我想知道是否有可能迭代传递给在C99 variadicmacros或使用任何GCC扩展的参数? 例如,是否有可能编写一个通用的macros,它采用一个结构和它的字段作为parameter passing,并打印结构中每个字段的偏移量? 像这样的东西: 结构{ int a; int b; int c; }; / * PRN_STRUCT_OFFSETS将打印每个字段的偏移量 在作为第一个论点的结构之内。 * / int main(int argc,char * argv []) { PRN_STRUCT_OFFSETS(struct a,a,b,c); 返回0; }

传递一个省略号给另一个可变参数

我有大约30个可变参数function。 每个人都接受一个path作为最后的参数,例如: bool do_foo(struct *f, int q, const char *fmt, …) 在每个函数中,我必须检查扩展的格式小于或等于一定的大小。 所以,我发现自己复制/粘贴相同的代码块来检查有多less个字符vsnprintf()没有打印,相应地设置errno并从写入中退出。 我想要做的是写一个函数来做到这一点,这将返回一个已知是安全大小的静态分配(扩展)的string,或者失败时新初始化的string,可以检查NULL。 检查还必须确定string是绝对path还是相对path,这会影响string的安全大小。 这是很多重复的代码,它开始闻起来。 有没有一种方法可以将我的函数入口中的elipsis的内容传递给另一个函数? 或者我必须先调用va_start() ,然后将va_list传递给辅助函数? 编辑: 我完全不反对把va_list传递给帮手,我只是想确保没有其他的东西存在。 在我看来,编译器明白可变参数开始的位置,所以我只是好奇,如果我能告诉它通过它们。

如何使可变macros(可变数量的参数)

我想用C写一个接受任意数量参数的macros,而不是一个特定的数字 例: #define macro( X ) something_complicated( whatever( X ) ) 其中X是任意数量的参数 我需要这个,因为whatever是超载,可以调用2或4参数。 我试过两次定义这个macros,但是第二个定义覆盖了第一个macros! 我正在使用的编译器是g ++(更具体地说,mingw)

可变参数列表中有哪些types的默认促销?

例如,我在C ++中使用8位CPU(AVR)的printf函数。 下面的代码是安全的: uint8_t a = 5; printf("%d", a); 这里%d期望int (16位在我的情况下,至less16位在任何情况下),但我通过8位整数。 C / C ++标准是否保证任何types小于inttypes都被提升为int ? float a和%f问题相同,需要double和其他类似的types。

传递可变数量的参数

说我有一个C函数,它需要一个可变数量的参数:我怎样才能调用另一个函数,它需要从里面的可变数量的参数,传递到第一个函数的所有参数? 例: void format_string(char *fmt, …); void debug_print(int dbg_lvl, char *fmt, …) { format_string(fmt, /* how do I pass all the arguments from '…'? */); fprintf(stdout, fmt); }