【发布时间】:2009-12-31 20:22:38
【问题描述】:
我有一个函数,它传递一个整数列表,直到一个值为“-1”并计算最小值。
如果函数被多次调用,它应该返回所有调用之间的最小值。
所以我写了这样的东西:
int min_call(int num, ...)
{
va_list argptr;
int number;
va_start(argptr, num);
//static int min = va_arg(argptr, int); //////// the questioned line
static int all_min = -1;
int min = va_arg(argptr, int);
if (min != -1)
{
while ((number = va_arg(argptr, int)) != -1)
{
if (number < min)
{
min = number;
}
}
}
if (min < all_min || all_min == -1)
{
all_min = min;
}
return all_min;
}
我想知道有关标记线的一些信息...为什么我不能调用它 - 编译器说因为用于初始化静态 int 的表达式不是常量。
出于某种原因,我记得我可以初始化一个静态变量,并且知道初始化语句只会被调用一次(第一次),它是用 C++ 编写的。 如果该行可用,它将为我节省几个变量。
在这件事上C和C++有区别吗?
【问题讨论】:
-
另一件事。我建议不要将 all_min 初始化为 -1,而是包含
并将 all_min 初始化为 INT_MIN。 -
你的意思是
INT_MAX,也请看我的回答。