c++ - 全局变量无法在 Visual Studio 中正确打印

标签 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);
    }
}

输出:

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

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

最佳答案

您假设参数的计算顺序。

改用这个:

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

关于c++ - 全局变量无法在 Visual Studio 中正确打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1364953/

相关文章:

visual-studio - 谁是诺亚·理查兹(Noah Richards),他与VS2010崩溃有什么关系?

visual-studio - 更改Visual Studio 2010使用的F#工具

visual-studio - 是否有任何 Visual Studio 扩展使 Quick Watch 对话框更智能?

c++ - static_assert 可以检查类型是否为 vector 吗?

c++ - 如何在没有多余 RC 操作的情况下在派生类中使用 shared_from_this?

c++ - 通过 CMessage 发送数组 - OMNET++

c++ - 如何正确实现在 Cuda/C++ 中从主机和设备代码调用其成员的类?

visual-studio - 为什么我在下载 FontAwesome nuget 包后看不到文件?

c++ - 在 COM : should I call AddRef after CoCreateInstance?

.net - 在.NET中调试调用的功能