最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2020年08月12日 08:24:34   作者:Dabelv  
這篇文章主要介紹了C++ main函數(shù)的幾點細節(jié),幫助大家更好的理解和學習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;
}

假設此程序經(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ù)返回值作出不同的響應。編寫如下程序。

#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)無法恢復的錯誤時,就可以使用exit()函數(shù)退出程序。但是在C++程序中,exit()函數(shù)的使用會破壞程序?qū)ο笪鰳?gòu)函數(shù)的調(diào)用。在C++程序設計中,應利用異常處理機制來取代對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語言實現(xiàn)簡易五子棋

    C語言實現(xiàn)簡易五子棋

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡易五子棋,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • 詳解C++中string的用法和例子

    詳解C++中string的用法和例子

    string是C++標準庫的一個重要的部分,主要用于字符串處理。這篇文章主要介紹了C++ string的用法和例子,需要的朋友可以參考下
    2018-05-05
  • 判斷一個無向圖是否為連通圖的方法

    判斷一個無向圖是否為連通圖的方法

    今天小編就為大家分享一篇關(guān)于判斷一個無向圖是否為連通圖的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • C語言實現(xiàn)將double/float 轉(zhuǎn)為字符串(帶自定義精度)

    C語言實現(xiàn)將double/float 轉(zhuǎn)為字符串(帶自定義精度)

    這篇文章主要介紹了C語言實現(xiàn)將double/float 轉(zhuǎn)為字符串(帶自定義精度),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 學生成績管理系統(tǒng)C語言代碼實現(xiàn)

    學生成績管理系統(tǒng)C語言代碼實現(xiàn)

    這篇文章主要為大家詳細介紹了C語言代碼實現(xiàn)學生成績管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • C語言刷題之倒置字符串的解題全過程

    C語言刷題之倒置字符串的解題全過程

    這篇文章主要給大家介紹了關(guān)于C語言刷題之倒置字符串的解題全過程,這是一道我們經(jīng)常刷到的實戰(zhàn)題目,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2023-02-02
  • C++中using的三種用法舉例詳解

    C++中using的三種用法舉例詳解

    最近在使用中,發(fā)現(xiàn)了一種以前沒學過的using用法,于是在這里,將using的幾種用法總結(jié)一下,下面這篇文章主要給大家介紹了關(guān)于C++中using的三種用法,需要的朋友可以參考下
    2023-02-02
  • C語言的遞歸思想實例分析

    C語言的遞歸思想實例分析

    這篇文章主要介紹了C語言的遞歸思想,以一個實例的形式針對數(shù)據(jù)變化規(guī)律分析了遞歸思想的本質(zhì),需要的朋友可以參考下
    2014-09-09
  • C++ 遍歷二叉樹實例詳解

    C++ 遍歷二叉樹實例詳解

    這篇文章主要介紹了C++ 遍歷二叉樹實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • visual studio code 編譯運行html css js文件的教程

    visual studio code 編譯運行html css js文件的教程

    這篇文章主要介紹了visual studio code 如何編譯運行html css js文件,本文通過圖文實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03

最新評論

元谋县| 信宜市| 衢州市| 河南省| 安化县| 易门县| 扎赉特旗| 洪泽县| 泰州市| 于田县| 铜山县| 上杭县| 乌兰县| 金寨县| 南汇区| 台中市| 雷州市| 绵阳市| 娄烦县| 舞阳县| 博乐市| 大城县| 大冶市| 庆阳市| 乡宁县| 麻阳| 禄丰县| 兴业县| 柞水县| 和静县| 莫力| 江门市| 泉州市| 祥云县| 金阳县| 仪陇县| 方城县| 本溪市| 新民市| 福州市| 罗定市|