给谁静态 int 主返回值
本文关键字:返回值 int 静态 | 更新日期: 2023-09-27 18:34:51
我通过将void更改为int来编写一个程序
class Program
{
static int Main(string[] args)
{
return -1;
}
}
此值将返回给谁...是CLR吗?如果是这样,如何...因为被调用的函数可以向调用函数返回值。
如果这是被调用的函数,那么谁是调用函数。是CLR吗?这是怎么回事?
CLR 是否向某人返回任何值,例如操作系统?
如果这是被调用的函数,那么谁是调用函数。是 是吗?这是怎么回事?
Main
方法由CLR
调用。这是怎么回事?
最初,Windows 会检查 exe 的文件标头,以确定是创建 32 位进程还是 64 位进程,还是 WoW64 进程。
然后,Windows 将 x86、x64 或 IA64 版本的 MSCorEE.dll 加载到进程的地址空间中。
在此之后,进程的主线程调用在 MSCorEE.dll 中定义的方法。此方法初始化 CLR,加载 exe 程序集,然后调用其入口点方法 Main
。
该方法Main
不能返回任何内容,void
或int
。如果我们选择返回一个 int
,那么通常我们选择在Main
末尾返回 0 ,这意味着程序的执行成功。如果Main
返回另一个负int
,那么我们就有一个错误。它们都是广泛使用的约定。
话虽如此,很明显,Main
返回的值返回到进程的主线程。
更新
我们如何读取此值?
我们可以构建一个批处理文件来执行我们的可执行文件。(我给它起了个名字ExecutableName
,你应该相应地改变它。我们可以使用 %ERRORLEVEL 读取 Main 返回的值。如果它不为 0,则具有相应错误值的消息Failed with error code
将打印到屏幕上。
@echo off
ExecutableName.exe
IF NOT %ERRORLEVEL% == 0 goto error
echo OK
goto end
:error
echo Failed with error code %ERRORLEVEL%.
:end
如果你编译这段代码,它将生成一个.exe程序。这是由操作系统调用的。当程序终止时,返回值将传递回操作系统。
例如,您可以通过观察 %ERRORLEVEL% 在批处理脚本 (*.bat( 中使用此返回值
如果使用 Process 类从另一个 .Net 程序启动.exe,则在.exe完成后,将在 Process.ExitCode 中找到此返回值。