在递归中使用寄存器变量?

时间:2014-02-03 16:03:53

标签: c recursion

    #include <stdio.h>

    void main()

    {

        register int x = 0;

        if (x < 2)

        {

            x++;

            main();

        }

    }

输出:

segmentation fault

为什么我会出现分段错误?

2 个答案:

答案 0 :(得分:4)

注册与此错误无关。它只是一种存储类。

即使没有注册,也会显示核心转储。

核心转储的原因是堆栈溢出因为递归。

尝试在x ++之后和main();

之前使用printf(“%d”,x)

if(x <2)

    {

        x++;
        printf("%d",x);

        main();

    }

堆栈溢出的原因是每次在递归时调用main(),x re初始化为0,因此始终满足条件if(x < 2)并导致堆栈溢出。

尝试使用静态存储类来避免此错误。

答案 1 :(得分:1)

因为'register'是编译器的建议,所以编译器可以自由忽略。他们说“请将此变量放在寄存器中”,但它不会改变代码中x的范围。这意味着将调用main,然后创建一个名为x的局部变量,在堆栈上保留空间,将其初始化为零等,等等。