假设我有一个带有可变数量参数的函数:我想从其他地方调用这个函数,构建参数列表,但事先不知道我需要多少个参数.
对不起,没有得到很好的解释,希望这段代码能让我的问题更加清晰:
void foo(int n, ...) {
va_list vl;
va_start(vl,n);
for (int i = 0; i<n; i++) {
// Do something to each passed variable
}
}
从这一个调用该函数:
void bar(int howManyParams) {
// Here I want to call foo() with howManyParams parameters
// (values are irrelevant for the question)
//
// I.e. for howManyParams = 1, we should call foo(0)
// for howManyParams = 2, we should call foo(0,0)
// for howManyParams = 3, we should call foo(0,0,0)
// etc.
//
}
解决方法:
实际上在运行时构建一个可变长度的参数列表 – 这是我非常肯定你要做的 – 非常棘手.在标准C中根本无法做到这一点,但你可以尝试各种技巧.
也许最好的是http://sourceware.org/libffi/的“外部函数接口库”.
另见C FAQ列表中的问题15.13:http://c-faq.com/varargs/invvarargs.html
另请参阅以前的Stackoverflow问题:
C late binding with unknown arguments
How to call functions by their pointers passing multiple arguments in C?
标签:c-3,c,variadic-functions 来源: https://codeday.me/bug/20190829/1760500.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。