是否可以将<;标准h>';s在C中的宏中?
我试图创建一个包含两个参数的函数,但是宏会重新映射该函数以调用另一个隐藏函数,该函数包含的数据比传入的数据多。我将要传递到隐藏函数中的数据是是否可以将<;标准h>';s在C中的宏中?,c,function,macros,arguments,C,Function,Macros,Arguments,我试图创建一个包含两个参数的函数,但是宏会重新映射该函数以调用另一个隐藏函数,该函数包含的数据比传入的数据多。我将要传递到隐藏函数中的数据是\uuuu LINE\uuuuu和\uuuu FILE\uuuu以及来自主函数的数据 问题是visible函数需要能够传入任意数量的参数。下面的代码是该问题的简化示例 #include <stdio.h> #include <stdarg.h> ////////////////////////////////////////////
\uuuu LINE\uuuuu
和\uuuu FILE\uuuu
以及来自主函数的数据
问题是visible函数需要能够传入任意数量的参数。下面的代码是该问题的简化示例
#include <stdio.h>
#include <stdarg.h>
///////////////////////////////////////////////////////////
// This is what I would like to be able to do
#define average(count, ...) _average(__LINE__, count, ...)
///////////////////////////////////////////////////////////
// The average function
double _average(int _line, int count, ...) {
// Just a use for the extra variable
printf("Calculating the average of some numbers\n");
printf("on line %i\n", _line);
// The data contained within the "..."
va_list args;
va_start(args, count);
// Sum up all the data
double sum = 0;
for (int i = 0; i < count; i++) {
sum += va_arg(args, int);
}
// Return the average
return sum / count;
}
int main() {
printf("Hello, World!\n");
// Currently, this is what I have to do as the method I would prefer doesn't work...
printf("Average: %f\n", _average(__LINE__, 3, 5, 10, 15));
// Is there a way to use the above macro like the following?
// printf("Average 2: %f\n", average(3, 2, 4, 6));
return 0;
}
要定义可变宏,请在参数列表中指定
…
,并使用\uuu VA\u ARGS\uuu
引用它们:
#define average(count, ...) _average(__LINE__, count, __VA_ARGS__)
要定义可变宏,请在参数列表中指定
…
,并使用\uuu VA\u ARGS\uuu
引用它们:
#define average(count, ...) _average(__LINE__, count, __VA_ARGS__)
请注意,如果您在计数后需要一个空列表,那么生活会变得更加棘手-这是可行的,但解决方案并不完全令人满意(使用GCC扩展不可移植,或者丢失检查,或者…)。但是如果在计数之后总是有至少一个参数,那么这是很好的。您可以在“注意”中找到关于这个问题的讨论,如果您在计数后需要一个空列表,那么生活会变得更加棘手-这是可行的,但解决方案并不完全令人满意(使用GCC扩展不可移植,或丢失检查,或…)。但是如果在计数之后总是有至少一个参数,那么这是很好的。你可以在网站上找到关于这个问题的讨论