欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++ main函數(shù)的幾點(diǎn)細(xì)節(jié)

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

1.main()函數(shù)的標(biāo)準(zhǔn)原型

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

int main();

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

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

main()函數(shù)參數(shù)可以用來(lái)提供用戶向程序輸入的參數(shù),采用帶參的main()函數(shù)原型,int main(int argc,char* argv[]),其中argc代表參數(shù)個(gè)數(shù),argv數(shù)組中的每一個(gè)元素保存命令行參數(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)過(guò)編譯之后生成的main.out,那么在控制臺(tái)輸入”main.out LVLV”,會(huì)輸出“Hello LVLV”。使用命令行參數(shù)時(shí)注意以下幾個(gè)問(wèn)題。
 (1)命令行輸入的程序名稱為程序的第一個(gè)參數(shù),以上程序中argv[0]保存的是main.out,盡管輸入的只有一個(gè)參數(shù)”LVLV”,但是參數(shù)數(shù)量argc包含了程序名稱,因此argc等于2。在其他編程語(yǔ)言(如C#)中,命令行參數(shù)并不包含執(zhí)行文件的名字。
 (2)在命令行中,空格被認(rèn)為是命令行參數(shù)的分隔符,也就是說(shuō)同一個(gè)參數(shù)內(nèi)部不允許出現(xiàn)空格,如果在一個(gè)參數(shù)中出現(xiàn)空格,可以使用雙引號(hào)括起來(lái)。如輸入main.out “LVLV and JF”。

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

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

#include <iostream>
using namespace std;

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

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

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

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

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

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

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

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

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

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

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

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

4.main()函數(shù)不一定是程序中第一個(gè)被執(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;
}

編譯運(yùn)行以上代碼輸出:

In default A's constructor
In main()

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

    C語(yǔ)言中do-while語(yǔ)句的2種寫(xiě)法示例

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

    C語(yǔ)言手寫(xiě)多級(jí)時(shí)間輪定時(shí)器

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

    C++編譯器無(wú)法捕捉到的8種錯(cuò)誤實(shí)例分析

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

    解決gcc編譯報(bào)錯(cuò)unknown type name ‘bool‘問(wèn)題

    這篇文章主要介紹了解決gcc編譯報(bào)錯(cuò)unknown type name ‘bool‘問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 最新評(píng)論