这段代码有什么问题?
using System; namespace app1 { static class Program { static int x = 0; static void Main() { fn1(); } static void fn1() { Console.WriteLine(x++); fn1(); } } }
我使用这个命令编译这段代码:
csc /warn:0 /out:app4noex.exe app4.cs
当我双击exe时,似乎并没有抛出异常(StackOverFlowException),并且永远保持运行.
解决方法
因为优化器会将尾部递归调用展开为:
static void fn1() { START: Console.WriteLine(x++); GOTO START; }
重写以获得例外:
static int y; static void fn1() { Console.WriteLine(x++); fn1(); Console.WriteLine(y++); }