PHP有一个用于获取所有函数参数的func_get_args(),而JavaScript有一个functions对象。
我用C语言写了一个非常简单的max()
int max(int a, int b) {
if (a > b) {
return a;
} else {
return b;
}
}我敢肯定,在大多数语言中,您可以为其内置的max() (或等效的)提供任意数量的参数。你能用C语言做到这一点吗?
我以为这个question可能就是我想要的,但我不这么认为。
请记住,我也还在学习。:)
非常感谢。
发布于 2010-09-09 21:56:04
您可以编写一个接受参数数量的变量参数函数,例如
#include <stdio.h>
#include <stdarg.h>
int sum(int numArgs, ...)
{
va_list args;
va_start(args, numArgs);
int ret = 0;
for(unsigned int i = 0; i < numArgs; ++i)
{
ret += va_arg(args, int);
}
va_end(args);
return ret;
}
int main()
{
printf("%d\n", sum(4, 1,3,3,7)); /* prints 14 */
}该函数假定每个变量参数都是整数(请参阅va_arg调用)。
发布于 2010-09-09 21:55:35
是的,C有可变函数的概念,这类似于printf()允许可变数量的参数的方式。
最大值函数将如下所示:
#include <stdio.h>
#include <stdarg.h>
#include <limits.h>
static int myMax (int quant, ...) {
va_list vlst;
int i;
int num;
int max = INT_MIN;
va_start (vlst, quant);
for (i = 0; i < quant; i++) {
if (i == 0) {
max = va_arg (vlst, int);
} else {
num = va_arg (vlst, int);
if (num > max) {
max = num;
}
}
}
va_end (vlst);
return max;
}
int main (void) {
printf ("Maximum is %d\n", myMax (5, 97, 5, 22, 5, 6));
printf ("Maximum is %d\n", myMax (0));
return 0;
}这将输出以下内容:
Maximum is 97
Maximum is -2147483648注意quant变量的使用。通常有两种方法来指示参数的结束,要么是前面的计数( 5),要么是后面的标记值。
后者的一个例子是一个指针列表,将NULL作为最后一个传递。由于此max函数需要能够处理整个整数范围,因此定点解决方案是不可行的。
printf函数使用前一种方法,但略有不同。它没有特定的计数,而是使用格式字符串中的%字段来确定其他参数。
发布于 2010-09-09 21:57:41
实际上,这是两个问题。首先,C99只要求一个C实现可以处理至少:
现在,对于你真正的问题,是的,在C99中有所谓的可变函数和宏。声明的语法是参数列表中的...。可变函数的实现与stdarg.h头文件中的宏一起使用。
https://stackoverflow.com/questions/3677136
复制相似问题