亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++ main函數(shù)的幾點細節(jié)

 更新時間:2020年08月12日 08:24:34   作者:Dabelv  
這篇文章主要介紹了C++ main函數(shù)的幾點細節(jié),幫助大家更好的理解和學(xué)習(xí)C++,感興趣的朋友可以了解下

1.main()函數(shù)的標準原型

main函數(shù)是C++程序的入口函數(shù),C++標準規(guī)定main()函數(shù)的返回值類型為int,返回值用于表示程序的退出狀態(tài),如果返回0則表示程序正常退出,如果返回非0,則表示出現(xiàn)異常。C++標準規(guī)定,main()函數(shù)原型有兩種:

int main();

int main(int argc,char* argv[]);
//或
int main(int argc,char** argv);

當main()函數(shù)的返回值為int,而函數(shù)內(nèi)沒有出現(xiàn)return語句時,同樣可以通過編譯并正常運行。這是因為編譯器在main()函數(shù)的末尾自動添加了return 0;語句。所以,main()函數(shù)是C++程序經(jīng)過特殊處理的函數(shù),其他的返回值類型不是void的函數(shù),如果沒有使用return語句,編譯器將報錯。雖然編譯器會隱式添加return 0;,但還是建議開發(fā)人員避免使用這條規(guī)則,因為顯示添加可避免出錯時無法返回錯誤碼,并且不會誤認為main()函數(shù)可以沒有return語句。

main()函數(shù)參數(shù)可以用來提供用戶向程序輸入的參數(shù),采用帶參的main()函數(shù)原型,int main(int argc,char* argv[]),其中argc代表參數(shù)個數(shù),argv數(shù)組中的每一個元素保存命令行參數(shù)內(nèi)容的字符串。考察如下程序。

#include <iostream>
using namespace std;

int main(int argc,char* argv[])
{
 if(argc>1)
 {
 cout<<"Hello "<<argv[1]<<endl; 
 }
 return 0;
}

假設(shè)此程序經(jīng)過編譯之后生成的main.out,那么在控制臺輸入”main.out LVLV”,會輸出“Hello LVLV”。使用命令行參數(shù)時注意以下幾個問題。
 (1)命令行輸入的程序名稱為程序的第一個參數(shù),以上程序中argv[0]保存的是main.out,盡管輸入的只有一個參數(shù)”LVLV”,但是參數(shù)數(shù)量argc包含了程序名稱,因此argc等于2。在其他編程語言(如C#)中,命令行參數(shù)并不包含執(zhí)行文件的名字。
 (2)在命令行中,空格被認為是命令行參數(shù)的分隔符,也就是說同一個參數(shù)內(nèi)部不允許出現(xiàn)空格,如果在一個參數(shù)中出現(xiàn)空格,可以使用雙引號括起來。如輸入main.out “LVLV and JF”。

2.VC++ mian()函數(shù)的返回值可以是任意數(shù)值類型

VC++下對main()函數(shù)的返回值沒有太嚴格的要求,只要可以強制轉(zhuǎn)換為int的類型都可以作為返回值,例如char,float,double或者long。參考如下程序。

#include <iostream>
using namespace std;

char main()
{
 cout<<"Hello!"<<endl;
 return '0';
}

以上程序可正常編譯并運行。顯而易見,string是不能作為main函數(shù)的返回值。如果將返回類型換成string類型,編譯將報錯,讀者可自行驗證。當然,以上代碼不具有可移植性,在Linux環(huán)境下使用g++編譯不會通過,提示返回值類型必須為int,可見GNU C++更加嚴格的實現(xiàn)了C++標準的內(nèi)容。

3.Windows平臺可通過環(huán)境變量errorlevel獲取main()函數(shù)返回值

依據(jù)返回值作出不同的響應(yīng)。編寫如下程序。

#include <iostream>
using namespace std;
int main()
{
 int i;
 cout<<"please input a number"<<endl;
 cin>>i;
 return i;
}

此程序編譯生成main.exe然后編寫一個批處理文件test.bat,內(nèi)容如下:

@echo off
main.exe
if %errorlevel%==3 echo third
if %errorlevel%==2 echo second
if %errorlevel%==1 echo first

當我們運行此批處理文件,從控制臺輸入1,得到first,輸入2,得到second,輸入3,得到third。運行結(jié)果如下:

C:\Users\dablelv>test.bat
please input a number
2
second

這個實驗說明了程序main.exe運行時,main()函數(shù)的返回值被存放在環(huán)境變量errorlevel中,我們可以在批處理文件中利用這個返回值采用去不同的行動。

在main()函數(shù)中,將語句return i;改成函數(shù)調(diào)用exit(i);,這個程序的執(zhí)行結(jié)果不發(fā)生變化。exit(i)的執(zhí)行效果是返回操作系統(tǒng),并將i作為程序的返回結(jié)果。exit用于結(jié)束進程,返回進程結(jié)束代碼給操作系統(tǒng),return用于結(jié)束函數(shù)調(diào)用,返回函數(shù)結(jié)束代碼給調(diào)用者。在main()函數(shù)中,return和exit均可結(jié)束程序,返回結(jié)果給操作系統(tǒng)。在C語言程序中,當程序出現(xiàn)無法恢復(fù)的錯誤時,就可以使用exit()函數(shù)退出程序。但是在C++程序中,exit()函數(shù)的使用會破壞程序?qū)ο笪鰳?gòu)函數(shù)的調(diào)用。在C++程序設(shè)計中,應(yīng)利用異常處理機制來取代對exit()函數(shù)的調(diào)用。

關(guān)于批處理文件的幾點說明。
 (1)@符號出現(xiàn)在命令前表示關(guān)閉命令回顯,即執(zhí)行命令時,控制臺不會出現(xiàn)命令的具體內(nèi)容,只會出現(xiàn)命令的執(zhí)行結(jié)果;
 (2)echo off這條命是關(guān)閉所有命令回顯,加上@符號表示關(guān)閉本條命令回顯;
 (3)%a% 這種形式 ,表示對變量a的引用。

4.main()函數(shù)不一定是程序中第一個被執(zhí)行的函數(shù)

考察如下程序。

#include <iostream>
using namespace std;
class A
{
public:
 A()
 {
 cout<<"In default A's constructor"<<endl;
 }
};
A b;
int main()
{
 cout<<"In main()"<<endl;
 return 0;
}

編譯運行以上代碼輸出:

In default A's constructor
In main()

在這個程序中,先輸出“In default A's constructor”,然后輸出的是“In main()”??梢?,對象a的構(gòu)造函數(shù)是先于main()函數(shù)執(zhí)行的。實際上,所有外部對象的構(gòu)造函數(shù)都是先于main()函數(shù)執(zhí)行的。如果要對類中的成員對象進行初始化,那么這些對象的構(gòu)造函數(shù)也是在main()函數(shù)之前執(zhí)行的。如果在這些構(gòu)造函數(shù)中還調(diào)用了其他函數(shù)的話,就可以有更多的函數(shù)先于main()函數(shù)之前運行。因此main()函數(shù)不一定是C++程序的第一個被執(zhí)行的函數(shù)。

以上就是C++ main函數(shù)的幾點細節(jié)的詳細內(nèi)容,更多關(guān)于C++ main函數(shù)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • c++中虛函數(shù)的實現(xiàn)詳解

    c++中虛函數(shù)的實現(xiàn)詳解

    眾所周知探索c++對象內(nèi)部的實現(xiàn)是一件非常有趣的事情,虛函數(shù)在c++中的實現(xiàn)機制就是用虛表和虛指針,但是具體是怎樣的呢?下面這篇文章就來給大家實際檢驗一下 Visual Studio 2013 編譯器在無優(yōu)化條件下,虛函數(shù)的實現(xiàn)。有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-12-12
  • C++11中std::move、std::forward、左右值引用、移動構(gòu)造函數(shù)的測試問題

    C++11中std::move、std::forward、左右值引用、移動構(gòu)造函數(shù)的測試問題

    這篇文章主要介紹了C++11中std::move、std::forward、左右值引用、移動構(gòu)造函數(shù)的測試,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • C語言之復(fù)雜鏈表的復(fù)制詳解

    C語言之復(fù)雜鏈表的復(fù)制詳解

    這篇文章主要為大家詳細介紹了C語言之復(fù)雜鏈表的復(fù)制,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • 使用C語言實現(xiàn)三子棋游戲

    使用C語言實現(xiàn)三子棋游戲

    這篇文章主要為大家詳細介紹了使用C語言實現(xiàn)三子棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C語言中do-while語句的2種寫法示例

    C語言中do-while語句的2種寫法示例

    這篇文章主要給大家介紹了關(guān)于C語言中do-while語句的2種寫法示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • C語言手寫多級時間輪定時器

    C語言手寫多級時間輪定時器

    這篇文章主要為大家詳細介紹了如何利用C語言實現(xiàn)手寫多級時間輪定時器,文中的示例代碼講解詳細,具有一定的借鑒價值,需要的可以參考一下
    2022-09-09
  • C++編譯器無法捕捉到的8種錯誤實例分析

    C++編譯器無法捕捉到的8種錯誤實例分析

    這篇文章主要介紹了C++編譯器無法捕捉到的8種錯誤,是深入學(xué)習(xí)C++所必須加以掌握的排錯技能,需要的朋友可以參考下
    2014-09-09
  • 解決gcc編譯報錯unknown type name ‘bool‘問題

    解決gcc編譯報錯unknown type name ‘bool‘問題

    這篇文章主要介紹了解決gcc編譯報錯unknown type name ‘bool‘問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 最新評論