全局变量在visual studio中无法正确打印

tel*_*all 0 c++ visual-studio

我正在玩一些递归,并尝试计算递归fib函数中的添加数量(下面的代码).问题是,g_add永远不会打印为零(0).在调试器中它设置正确,但它不能正确打印.事实上,下面的代码有点修改,以便检查其他一切是否正常.在现实生活中,g_add最初设置为零,而不是下面的10,但看输出是打印...

volatile int g_add = 10;
int rfib(int n)
{
    if(n == 0)  return 0;
    else if(n == 1) return 1;
    else {
        ++g_add;
        return rfib(n-1) + rfib(n-2);
    }
}

int _tmain(int argc, _TCHAR* argv[])
{

    printf("Fib: %d\n", g_add);
    for(int n =0; n<6;n++,g_add = 0)
    {
        printf("Fib %d is: %d - additions: %d\n", n, rfib(n), g_add);
    }
}
Run Code Online (Sandbox Code Playgroud)

并输出:

Fib: 10
Fib 0 is: 0 - additions: 10
Fib 1 is: 1 - additions: 0 
Fib 2 is: 1 - additions: 0
Fib 3 is: 2 - additions: 0 (note, the debugger says it is 1)
Fib 4 is: 3 - additions: 0
Fib 5 is: 5 - additions: 0
Run Code Online (Sandbox Code Playgroud)

有关为什么没有正确打印g_add的任何想法?我能做些什么呢?我尝试使用和不使用volatile关键字.我认为这可能与VS环境有关,而不是C++,所以我标记了两者.

gat*_*fax 6

您假设评估参数的顺序.

请改用:

int fib = rfib(n);
printf("Fib %d is: %d - additions: %d\n", n, fib, g_add);
Run Code Online (Sandbox Code Playgroud)