为什么 C# 有静态主 () 但C++没有静态主

Why C# has static Main () but C++ has no static main

本文关键字:静态 C++ 为什么      更新时间:2023-10-16

出于好奇,C# 需要一个静态 Main(),一些模块(可能来自操作系统)调用 Main 而不创建对象,但为什么这对C++来说不是真的?当然,在C++中,main 不属于任何类。如何从我的应用程序外部以 2 种不同的方式调用它们?

为什么 C# 没有像 C++ 年那样具有 main,是不是为了让 C# 刚刚引入(仅用于命名约定)它作为方法应该以大写字母开头或某些或其他原因?

Mainmain而言,情况很简单:Microsoft决定Main遵守自己的大写命名约定。

不过,static与非static的情况需要更多的背景知识:C++具有 C# 所没有的东西 - 即独立函数(即不是任何类成员的函数)。将 static 关键字应用于C++函数时,其含义会根据函数是类的成员还是独立的成员而变化。

在 C++ 中将static应用于成员函数时,其含义与 C# 中相同,即该函数成为类函数,而不是实例函数。

当您将static应用于独立的非成员函数时,含义会发生变化:C++编译器使函数从给定翻译单元外部不可见。除此之外,这使得该函数对处理启动并将控制权传递给main函数的运行时库C++部分不可见。

由于C++标准指定入口点是通过非成员函数,因此将static应用于main会将其隐藏在C++运行时中,使其无法用作入口点。请参阅此问答,了解有关将main设为静态会发生什么的更多信息。

其实原因很简单,不用看得很远就能知道这个原因。C++向下兼容 C(或多或少)。C有一个主要功能,按照惯例,它是应用程序的起点。通过对 C 代码进行微小的更改,您可以使用 C++ 编译器编译 C 代码。

但是,C# 没有此限制,因此可以通过将静态 main 定义为任意类的成员来定义应用程序的不同入口点。因为 C# 没有独立的函数,只有实例方法和静态方法。