给谁静态 int 主返回值

本文关键字:返回值 int 静态 | 更新日期: 2023-09-27 18:34:51

我通过将void更改为int来编写一个程序

class Program
{
    static int Main(string[] args)
    {
        return -1;
    }        
}

此值将返回给谁...是CLR吗?如果是这样,如何...因为被调用的函数可以向调用函数返回值。

如果这是被调用的函数,那么谁是调用函数。是CLR吗?这是怎么回事?

CLR 是否向某人返回任何值,例如操作系统?

给谁静态 int 主返回值

如果这是被调用的函数,那么谁是调用函数。是 是吗?这是怎么回事?

Main方法由CLR调用。这是怎么回事?

最初,Windows 会检查 exe 的文件标头,以确定是创建 32 位进程还是 64 位进程,还是 WoW64 进程。

然后,Windows 将 x86、x64 或 IA64 版本的 MSCorEE.dll 加载到进程的地址空间中。

在此之后,进程的主线程调用在 MSCorEE.dll 中定义的方法。此方法初始化 CLR,加载 exe 程序集,然后调用其入口点方法 Main

该方法Main不能返回任何内容,voidint。如果我们选择返回一个 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 中找到此返回值。