在C#中,您可以为主方法使用4种不同的方法签名:
static void Main(string[] args) {}
static int Main(string[] args) { return 0; }
static void Main () {}
static int Main {return 0;}
在进一步研究Main时,引用指出,即使您构造一个原型返回void的Main()方法,也会自动返回值0。
这就是说,为什么你会使用一个Main方法,如果无论如何都会返回一个int签名?我知道返回保存在名为%ERRORLEVEL%的变量中,并且您可以使用批处理文件捕获此代码。我只是对于始终提供的返回值感到好奇。感谢。
答案 0 :(得分:1)
如果你依赖于返回0的void语法,那么你的程序只会返回一个0,这是一个成功执行的状态代码。对于许多用例,这可能没问题,但是允许main方法显式返回int的意思是你可以在不同的情况下返回不同的 int。对于非平凡的应用程序,如果在有意义的上下文中手动返回不同的int值,那么除了在所有终止方案中盲目地返回0之外,您将从该功能中获得更多的价值。
此外,您似乎在询问为什么如果两者都返回一个整数,您应该明确地说static int Main
而不是static void Main
。除了上面关于返回有意义的值的注释之外,更广泛地说,如果你希望你的方法返回一个整数,那么利用显式语法而不是依赖回退行为是有意义的,因为这样做对于修改或使用您的程序的其他人来说,后者可能是未知的或不直观的。以另一种方式查看您的问题 - 如果您希望main方法返回int,为什么不会您使用语法明确地这样做? void方法返回int是否有意义?
答案 1 :(得分:1)
Exit codes
这是你的程序返回的状态或执行代码。这些天它有点遗留,但一般来说它是让调用者了解执行的方式。
零通常意味着成功执行。
正如代码中的函数向其调用者返回一个值,您的程序也应该向其调用者返回一个值,如脚本或操作系统。
返回代码是过去的遗留物,但在某些情况下仍然使用,例如控制台应用程序,因为它简单易用。
如果您无意返回错误代码,C#已经添加了允许void的语法糖,因此您不需要考虑返回任何内容。在大多数情况下,这很好。
但是,如果您正在开发一个控制台应用程序,并且您希望让调用者处理代码中的任何结果,则返回代码是一种简单且标准化的方法。
static int Main(string[] args) { return 0; } // Everything went fine
static int Main(string[] args) { return -1; } // An error occured.
static int Main(string[] args) { return 2; } // Program completed, with warnings.
static void Main(string[] args) { } // Just returns zero.
代码的含义取决于每个程序,并将记录在文档或类似文档中。
See this answer for how it can be used in bat files:
@echo off
myprogram.exe
if errorlevel 1 (
echo Failure Reason Given is %errorlevel%
exit /b %errorlevel%
)
答案 2 :(得分:-2)
返回值是errorlevel,您可以在batchfiles中使用errorlevel。