为什么这个c++代码能编译不能运行呢?

来源:百度知道 编辑:UC知道 时间:2024/06/08 23:03:59
#include <stdarg.h>
#include <iostream.h>
int add_all(int num,...)
{
va_list vl;
int ret;
while(num> 0)
{
ret +=va_arg(vl, int);
num--;
}
return ret;
}

void main()
{
int num = add_all(5, 1, 2, 3, 4, 5);
cout<<num;
}

没有初始化列表,va_arg在使用之前一定要分配空间(相当于new),再初始化.va_list vl只是定义了,但没有指向值.用完以后释放(相当于free),所以你的程序我帮你加入了这两个就可以了(va_start(vl,num);和va_end(vl);),但是结果还是预期结果,是因为你的ret(累加)没有初值.所以结论是你对C/C++的变量都不知道去初始化,C++只有全局变量有初始化,其它变量都没有初始化,所以用一个变量,当关系到初始值的问题(比如累加变量)就应该初始化.
#include <stdarg.h>
#include <iostream.h>

int add_all(int num,...)
{
va_list vl;
int ret=0;
va_start(vl,num);
while(num> 0)
{
ret +=va_arg(vl, int);
num--;
}
va_end(vl);
return ret;
}

void main()
{
int num = add_all(5, 1, 2, 3, 4, 5);
cout<<num;
}

改为:
int add_all(int num,...)
{
va_list vl;

////////////////
va_start(vl, num);
int ret=0;
//////////////////

while(num> 0)
{
ret+=va_arg(vl, int);
num--;
}
return ret;
}

int main()
{
int num = 0;
num = add_all(5, 1, 2, 3