You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何返回值为void的C# Main方法运行后退出码为0?

问题解答

本质是你把两个不同层级的规则搞混了:C#语法里void代表方法无返回值,是C#语言层面对方法签名的约定;而进程退出码是操作系统层面对所有可执行程序的强制要求,二者没有绑定关系。

  • 不管用什么编程语言写程序,只要是在操作系统上运行的可执行文件,进程终止时必须给操作系统回传一个整数状态码:通用约定是0代表程序正常执行结束,非0值代表异常或自定义执行状态,根本不存在“不返回退出码的进程”。
  • C#编译器针对两种Main签名做了不同的编译适配,不会因为你写了void Main()就让进程不返回退出码:
    • 当你写static int Main()签名时,编译器会直接把你在方法里return的整数值,作为进程退出码传递给操作系统,所以你返回5时,命令行就会显示退出码5。
    • 当你写static void Main()签名时,编译器会自动在生成的底层执行逻辑里补上默认值:等你写的Main方法内所有代码正常执行完毕后,自动把退出码0传给操作系统。你看到的0根本不是void Main方法自己返回的,是编译器自动追加的默认行为。

你可以自己做个小测试:用static void Main()签名,在方法里加一行Environment.Exit(99);,运行结束后就会看到进程退出码是99,和Main方法的void返回类型没有任何冲突——Main方法的返回值只是编译器设置进程退出码的其中一个入口,不是唯一入口。


内容的提问来源于stack exchange,提问作者Erik_JI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 16:34:47