入口点

C#中主函数的例子。
C#源代码中Main()的样子。标记了不同部分用于参考。

计算机编程中,入口点是在程序中执行第一条指令的地方,和程序访问命令行参数的地方。要开始一个程序的执行装载器操作系统会将控制权传递到它的入口点。(在引导期间,操作系统自身就是这个程序)。这标志着从装载时(和动态连接时,如果存在的话)到运行时的转变。

对于某些操作系统和编程语言,入口点是运行时库,它是一组对语言的支持函数。库代码初始化程序并且接着把控制权传递给程序本身。在其他情况下,程序自身可以初始化运行时库。在简单的系统中,执行开始于第一条语句,这常见于解释型语言,简单的可执行格式,和引导装载器中。在其他情况下,入口点是在某个其他已知内存地址,这可以是绝对地址或相对地址(偏移量)。

可作为替代选择,程序的执行可以开始于命名点,要么是编程语言或操作系统定义的约定名字,要么是调用者指定的名字。在很多C家族语言中,这是叫做main的函数;作为结果,入口点经常叫做主函数。在JVM语言比如Java中,入口点是叫做main的静态方法;在CLI语言比如C#中,入口点是叫做Main的静态方法[1]

用法

在现代的计算机体系中,CPU 下一次要执行的指令地址由一个寄存器指出,称为“指令指针”(Instruction Pointer、IP)或“程序计数器”(Program Counter、PC)。该寄存器在系统上电或复位时由硬件电路置为某地址值,位于该地址的程序即可视为整个程序的入口点。这个概念一般只在嵌入式程序(固件)或操作系统的引导代码中使用,因为给非嵌入式系统写的程序通常包含数量庞大的机器指令、以至于关注一两个机器指令是没有意义的。

而所谓的“可执行”,说白了就是这个文件存储了一些信息、好创造某个让程序可以开始运行的内存状态,而操作系统装载并创建进程的步骤就是把这个满是机器指令的内存状态复原出来并开始运行。因此,可执行文件中的“程序入口点”表示把加载进来的哪个地址当作“开始运行”的那一条指令。

编程语言

C/C++

C語言C++程式語言,main的函式原型如下所示:

int main(void)
int main()
int main(int argc, char *argv[])

main的兩個環境參數:argcargument count)與argvargument vector[2],兩者個別自程式的指令列給予參數的數量與參數陣列的指標位址。argcargv這兩個參數的名稱,在程式語言的命名規則底下,雖然可以依照使用者的喜好自行定義,但是一般在使用上,還是會以現有的名稱argcargv來進行程式的編寫。其他具有相依平台的格式也可以被C與C++標準所接受;例如,UNIX(非POSIX.1)與Microsoft Visual C++有第三個參數,是用來接收程式的環境變數,利用其他方法存取環境變數,可以使用stdlib.h標頭檔案定義的getenv函式:

int main(int argc, char *argv[], char *envp[])

Mac OS XApple Darwin有第四個參數,它含有作業系統支援性的資訊,例如執行二進制檔案的路徑:[3]

int main(int argc, char *argv[], char *envp[], char *apple[])

main傳給作業系統的傳回值,代表程序處理的結束狀態,在C的標準裡有定義兩個傳回值:EXIT_SUCCESS(通常是整數零 0值)與EXIT_FAILURE。由於在實作上考量到各種的可能性,所以依照可能會發生的狀態來定義傳回值。

依照一般使用的規則,指令列參數的第一個元素就是程式檔案的名稱,假如程式檔案的名稱為rm.exe,當使用者在指令列輸入rm file後,使用者介面的程式shell會初始化rm.exe處理程序,設定環境變數argc = 2以及argv = ["rm", "file"]

main這個名稱是一個特有的名稱;正常來說,使用者在每個C與C++程式自定的函式名稱,必須不同於main這個名稱。

在C++裡,main一定是在全域的名稱空間內(例如:::main),它不可以是類別或是實體的成員函式。

由於前置處理器的關係,以下main函式原始碼可適用於Microsoft Visual C++Dev-C++

#ifndef _MSC_VER
int
#else
void
#endif
main(int argc, char** argv)
{
    // 程式碼
    system("PAUSE");
    return
#ifndef _MSC_VER
    EXIT_SUCCESS
#endif
    ;
}

WinMain

這是一段WinMain的程式碼。

微軟視窗為基礎的程式設計上,WinMain[4]函式是視窗程式的進入點,函式原型如下所示:

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow);

.Net 语言(C#、VB 等)

C#編寫的程式,在开始執行時CLR會先去尋找帶有.entrypoint IL標示的靜態方法,而這個靜態方法可能沒有參數,或是只有單一string[]型態的參數,而且還有void或是int型態的傳回值,找到後才會執行這個方法,而這個方法就是主函式。[5]

static void Main();
static void Main(string[] args);
static int Main();
static int Main(string[] args);

指令列參數會被引入到args變數內,引入的方式與Java相類似。但是,針對有整數傳回值的Main而言,引入的方式類似C/C++,而指令列參數會被當成處理程序的結束狀態,傳回給作業系統或是執行它的外部環境。

同为 .net 语言的 Visual Basic .NET 大体也是一样。不过不同的是,旧版本 Visual Basic 的程序可以选择在执行默认初始化步骤后以一个窗体启动,此时的主函数是不可见的;新版本为了兼容性和简化编码工作而保留了这个特性。

Java

Java程式語言是以main 方法來當做程式開始的起點,方法如下:

public static void main(String[] args)

命令列指定參數是args。如同C和C++一樣,「main」也是唯一的。Java的main方法無任何的傳回值。

Pascal

Pascal的主要程序是不需命名的。因為Pascal程式的程序和函式在編寫程式上比C、C++或是Java更加嚴格,在程式裡主要程序通常才是最後的程序。Pascal沒有main或是其他相類似的關鍵字。

以下是Hello world範例:

procedure hello() begin
  writeln('Hello world')
end;
begin
  hello()
 end.

Pike

Pike與C/C++的語法相類似。從main開始執行。「argc」代表環境參數的個數。「argv」代表環境參數的值。

舉例如下:

int main(int argc, array(string) argv)

参见

參考資料

  1. ^ Wagner, Bill. Main() / Entry Points (C# Programming Guide) - Microsoft Developer Network. docs.microsoft.com. 2017-08-01 [2018-12-03]. (原始内容存档于2020-11-11) (美国英语). 
  2. ^ argv: the vector term in this variable's name is used in traditional sense to refer to strings.(基本上這個參數是以傳統的方法對參數的字串進行存取的動作,相當於指標陣列)
  3. ^ The char *apple Argument Vector. [2009-10-28]. (原始内容存档于2015-12-22). 
  4. ^ 存档副本. [2009-10-28]. (原始内容存档于2018-08-21). 
  5. ^ 存档副本. [2009-11-04]. (原始内容存档于2008-02-04). 

外部連結

Read other articles:

Bagian dari seri mengenaiTransgender Identitas gender Agender / tanpa gender Androgini Bigender Bissu Dua Roh Gender bender Gender ketiga Genderqueer / nonbiner Heteroseksualitas queer Hijra Pangender Transfeminin Transmaskulin Transpria Transpuan Transseksual Trigender Kesehatan dan pengobatan Anak transgender Disforia gender pada anak-anak Kehamilan Kesehatan Terapi penentuan ulang seks Transisi Hak dan hukum Aktivisme hak organisasi Peraturan toilet Toilet umum uniseks Diskrimina...

 

Peta menunjukan lokasi Balaoan Data sensus penduduk di Balaoan Tahun Populasi Persentase 199531.420—200033.7861.57%200736.8291.20% Balaoan adalah munisipalitas yang terletak di provinsi La Union, Filipina. Pada tahun 2010, munisipalitas ini memiliki populasi sebesar 40.256 jiwa atau 6.581 rumah tangga. Pembagian wilayah Secara administratif Balaoan terbagi menjadi 36 barangay, yaitu: Almeida Antonino Apatut Ar-arampang Baracbac Este Baracbac Oeste Bet-ang Bulbulala Bungol Butubut Este Butub...

 

جورجو موريني   معلومات شخصية الميلاد 11 أكتوبر 1947 (العمر 76 سنة)كرارا الطول 1.72 م (5 قدم 7 1⁄2 بوصة) مركز اللعب وسط الجنسية إيطاليا  المسيرة الاحترافية1 سنوات فريق م. (هـ.) 1967–1968 إنتر ميلان 0 (0) 1968–1972 فاريسي 84 (7) 1972–1976 روما 105 (5) 1976–1981 إيه سي ميلان 75 (4) 1981–1983 برو بات�...

Election for the governorship of the U.S. state of Kansas 1890 Kansas gubernatorial election ← 1888 November 4, 1890 1892 →   Nominee Lyman U. Humphrey John F. Willits Charles L. Robinson Party Republican Populist Democratic Popular vote 115,024 106,945 71,357 Percentage 39.05% 36.31% 24.23% Governor before election Lyman U. Humphrey Republican Elected Governor Lyman U. Humphrey Republican Elections in Kansas Federal government Presidential elections 1864 1868 ...

 

Cet article est une ébauche concernant une commune d’Ille-et-Vilaine. Vous pouvez partager vos connaissances en l’améliorant (comment ?). Le bandeau {{ébauche}} peut être enlevé et l’article évalué comme étant au stade « Bon début » quand il comporte assez de renseignements encyclopédiques concernant la commune. Si vous avez un doute, l’atelier de lecture du projet Communes de France est à votre disposition pour vous aider. Consultez également la page d�...

 

2005 film by Susan Stroman The ProducersTheatrical release posterDirected bySusan StromanScreenplay by Mel Brooks Thomas Meehan Based onThe Producersby Mel BrooksThomas MeehanThe Producersby Mel BrooksProduced by Mel Brooks Jonathan Sanger Starring Nathan Lane Matthew Broderick Uma Thurman Will Ferrell Gary Beach Roger Bart Jon Lovitz Cinematography John Bailey Charles Minsky Edited bySteven WeisbergMusic by Glen Kelly Mel Brooks Productioncompanies Universal Pictures Columbia Pictures Brooks...

Plácido Rodriguez, C.M.F.vescovo della Chiesa cattolica Caritas Christi urget nos  TitoloLubbock Incarichi attualiVescovo emerito di Lubbock (dal 2016) Incarichi ricoperti Vescovo titolare di Fuerteventura (1983-1994) Vescovo ausiliare di Chicago (1983-1994) Vescovo di Lubbock (1994-2016)  Nato11 ottobre 1940 (83 anni) a Celaya Ordinato presbitero23 maggio 1968 dal vescovo Thomas Joseph Grady Nominato vescovo18 ottobre 1983 da papa Giovanni Paolo II Consacrato vescovo13 dicemb...

 

Whitehall, kediaman Ketua Menteri dan Gubernur Sikkim Berkas audio Gangtok tidak ditemukan (bahasa Tibet: སྒངཐོག) (bahasa Nepal/bahasa Hindi: गंगटोक) ialah ibu kota negara bagian Sikkim, India. Jumlah penduduknya mencapai 50 000 jiwa. Bahasa resminya adalah Nepal, tetapi penduduknya juga bercakap bahasa Inggris, Hindi dan sejumlah bahasa lokal. Industri terbesar di kota ini adalah pariwisata. Musim turis berlangsung antara bulan April-Juni dan September-November. ...

 

Iranian film director and screenwriter (born 1976) Ayat Najafiآیت نجفیNajafi in 2015Born (1976-09-23) 23 September 1976 (age 47)Tehran, IranAlma materArt and Architecture UniversityOccupation(s)Film director, screenwriter, film producerYears active1985–presentNotable workNo Land's SongFootball Under Cover Ayat Najafi (Persian: آیت نجفی, born 23 September 1976) is an Iranian film director and screenwriter. He has received many international awards from the Berlin...

Sceaux 行政国 フランス地域圏 (Région) イル=ド=フランス地域圏県 (département) オー=ド=セーヌ県郡 (arrondissement) アントニー郡小郡 (canton) 小郡庁所在地INSEEコード 92071郵便番号 92330市長(任期) フィリップ・ローラン(2008年-2014年)自治体間連合 (fr) メトロポール・デュ・グラン・パリ人口動態人口 19,679人(2007年)人口密度 5466人/km2住民の呼称 Scéens地理座標 北緯48度4...

 

هذه المقالة عن المجموعة العرقية الأتراك وليس عن من يحملون جنسية الجمهورية التركية أتراكTürkler (بالتركية) التعداد الكليالتعداد 70~83 مليون نسمةمناطق الوجود المميزةالبلد  القائمة ... تركياألمانياسورياالعراقبلغارياالولايات المتحدةفرنساالمملكة المتحدةهولنداالنمساأسترالي�...

 

Questa voce sull'argomento serie televisive d'animazione è solo un abbozzo. Contribuisci a migliorarla secondo le convenzioni di Wikipedia. Segui i suggerimenti del progetto di riferimento. Squirrel Boyserie TV d'animazione Titolo orig.Squirrel Boy Lingua orig.inglese PaeseStati Uniti AutoreEverett Peck StudioCartoon Network Studios ReteCartoon Network 1ª TV29 maggio 2006 – 27 settembre 2007 Stagioni2 Episodi26 (completa) Durata ep.11 min Rete...

Massimo Ciancimino, dicembre 2010 Massimo Ciancimino (Palermo, 16 febbraio 1963) è un imprenditore italiano. Pregiudicato, agli arresti domiciliari[1], teste in vari processi di mafia, a sua volta egli stesso indagato per calunnia, concorso in associazione mafiosa, condannato in via definitiva per riciclaggio di denaro e per detenzione di esplosivi Indice 1 Biografia 1.1 Il mistero del papello 1.2 Presunte minacce e intimidazioni 1.3 Testimonianze contro Berlusconi e Dell'Utri 1.4 Ac...

 

Economy of America redirects here. For other uses, see Economy of America (disambiguation). Economy of the United StatesNew York City, the world's principal fintech and financial center[1][2] and the epicenter of the world's principal metropolitan economy[3]CurrencyUnited States dollar (USD) US Dollar IndexFiscal yearOctober 1 – September 30Trade organizationsWTO, G-20, G7, OECD, USMCA, APEC and othersCountry group Developed/Advanced[4] High-income economy&#...

 

هذه المقالة يتيمة إذ تصل إليها مقالات أخرى قليلة جدًا. فضلًا، ساعد بإضافة وصلة إليها في مقالات متعلقة بها. (أكتوبر_2013) مصورو فليكر في جولة تصوير راجلة في غيلدفورد، أستراليا جولة تصوير في منطقة وسط المدينة في فينكس-أريزونا جولة تصوير في شانغهاي. جولة التصوير نشاط يقوم به هواة...

Snooker tournament, held 2003 This article is about the snooker tournament. For the video game, see World Championship Snooker 2003 (video game). 2003 Embassy World Snooker ChampionshipTournament informationDates19 April – 5 May 2003 (2003-04-19 – 2003-05-05)VenueCrucible TheatreCitySheffieldCountryEnglandOrganisationWPBSAFormatRanking eventTotal prize fund£1,682,900Winner's share£270,000Highest break Ronnie O'Sullivan (ENG) (147)FinalChampion...

 

English princess Cecily of YorkViscountess WellesCecily in stained glass, probably 1482–83, formerly Canterbury Cathedral, now Burrell Collection.[1]Born20 March 1469Westminster Palace, London, EnglandDied24 August 1507(1507-08-24) (aged 38)Sandown, Isle of Wightor Hatfield, Hertfordshire, EnglandBurialQuarr Abbey, Isle of Wight orthe friary at Kings Langley, HertsSpouse Ralph Scrope (m. 1485; annulled 1486) John Welles, 1st Viscount Welles (m. 1487/88; died 1499) Sir Thomas Ky...

 

Monte KinabaluStato Malaysia Stato federatoSabah Altezza4 095 m s.l.m. Prominenza4 095 m Isolamento2 513 km CatenaCrocker Range Coordinate6°04′29.16″N 116°33′28.89″E6°04′29.16″N, 116°33′28.89″E Data prima ascensione1888 Autore/i prima ascensioneJohn Whitehead Mappa di localizzazioneMonte Kinabalu Modifica dati su Wikidata · Manuale Prati alpini del monte KinabaluKinabalu montane alpine meadowsEcozonaIndomalese (IM) BiomaForeste pluv...

Đại Cổ sinh (tên tiếng Anh: Paleozoic) là một đơn vị phân chia chính trong niên đại địa chất, một trong bốn đại chính[1]. Sự phân chia thời gian ra thành các đại, đơn vị lớn nhất trong niên biểu địa chất vào thời kỳ ban đầu có xuất xứ từ Giovanni Arduino vào thế kỷ 18, mặc dù tên gọi chính thức của ông cho đại mà ngày nay gọi là đại Cổ sinh đã là Primario (xem Đại địa ch�...

 

Para otros usos de este término, véase Progreso (desambiguación). El progreso es un concepto que indica la existencia de un sentido de mejora en la condición humana. La consideración de tal posibilidad fue fundamental para la superación de la ideología feudal medieval, basada en el teocentrismo cristiano (o musulmán) y expresada en la escolástica. Desde ese punto de vista (que no es el único posible en teología) el progreso no tiene sentido cuando la historia humana proviene de la...