我不明白为什么C#的Main
函数默认是void类型(例如在控制台项目中)。在C和C++中,标准明确规定main函数必须返回int类型,使用返回值是有意义的,因为我们可以从外部程序检查返回值,看看C/C++应用程序是否成功完成或遇到错误。
所以我的问题是:
- 为什么Visual Studio将
Main
声明为void类型? - 一旦C#控制台应用程序执行完毕,返回值给操作系统的最佳方法是什么?
您可以使用 int 或 void 作为返回类型。因此,只需像在C++中一样更改它并返回一个值。
也许默认情况下是void,以免困惑初学者。
在 C# 中,你可以使用 MSDN 参考文档:
static int Main()
static int Main(string[] args)
static void Main()
static void Main(string[] args)
你也可以用两种方式返回(int)值。
在控制台应用程序中,我会使用int Main() { ...; return 2; }
在WinForms/WPF/...应用程序中,在需要返回值的罕见情况下,我会使用
Environment.ExitCode = 1;
或Environment.Exit(1);
它并非隐式void。也就是说,你不能仅仅声明main(String[] args) 并将其编译为一个void函数。默认项目将main()声明为void是因为默认项目从main函数中没有任何有用的返回值。
值得注意的是,C#不同于C或C++。尽管语法有些相似,但差异之大远远超出了其相似之处。
System.Environment.ExitCode = 1; // Or whatever number other than 0 for errors.
您可以更改Main的返回类型而不会引起任何问题。
int
和 void
是可选项? - Philip Pottervoid main
是有效的)。在C#中有标准的声明主函数的方式吗? - IVlad最佳的返回退出值的方法是使用Exit
函数。我这么说是因为非零的退出码通常用于表示某些错误,通常是你不希望继续执行的错误。使用非零退出值调用Exit
函数既可以通过该值发出错误信号,又可以退出程序。
Environment.Exit( value );
编辑:请注意,我的声明是在控制台程序的Main
中提出的。库和其他方法应该抛出异常或返回错误值。只有您的主要例程(Main)才应调用Exit
。如果没有表达清楚,我很抱歉。
Environment.Exit()
是最糟糕的goto
语句,可以从程序中的任何地方跨越所有终止边界。 - Sam HarwellMain
中使用它——你不希望你的库调用它,它们应该抛出异常。 - tvanfosson请记住,您的程序周围仍然有另一个“盒子”-CLR。当您的代码抛出未处理的异常时,它将返回错误代码。
你可以使用 Environment.Exit()
来终止程序并向操作系统返回一个整数代码。另外,你也可以设置 Environment.ExitCode
,这个代码将在程序正常终止时返回给操作系统。