每個C++程序都包含一個或多個函數function),其中一個必須命名為main。操作系統通過調用main來運行C++程序。下面是一個非常簡單的main函數,它什麼也不干,只是返回給操作系統一個值:
int main()
{
return 0;
}
一個函數的定義包含四部分:返回類型return type)、函數名function name)、一個括號包圍的形參列表parameterlist,允許為空)以及函數體function body)。雖然main函數在某種程度上比較特殊,但其定義與其他函數是一樣的。
在本例中,main的形參列表是空的()中什麼也沒有)。6.2.5節第218頁)將會討論main的其他形參類型。
main函數的返回類型必須為int,即整數類型。int類型是一種內置類型built-in type),即語言自身定義的類型。
函數定義的最後一部分是函數體,它是一個以左花括號curly brace)開始,以右花括號結束的語句塊block of statements):
{
return 0;
}
這個語句塊中唯一的一條語句是return,它結束函數的執行。在本例中,return還會向調用者返回一個值。當return語句包括一個值時,此返回值的類型必須與函數的返回類型相容。在本例中,main的返回類型是int,而返回值0的確是一個int類型的值。
請注意,return語句末尾的分號。在C++中,大多數C++語句以分號表示結束。它們很容易被忽略,但如果忘記了寫分號,就會導致莫名其妙的編譯錯誤。
在大多數系統中,main的返回值被用來指示狀態。返回值0表明成功,非0的返回值的含義由系統定義,通常用來指出錯誤類型。
重要概念:類型
類型是程序設計最基本的概念之一,在本書中我們會反復遇到它。一種類型不僅定義了數據元素的內容,還定義了這類數據上可以進行的運算。
程序所處理的數據都保存在變量中,而每個變量都有自己的類型。如果一個名為v的變量的類型為T,我們通常說“v具有類型T”,或等價的,“v是一個T類型變量”。
、運行程序
編譯、運行程序
編寫好程序後,我們就需要編譯它。如何編譯程序依賴於你使用的操作系統和編譯器。你所使用的特定編譯器的相關使用細節,請查閱參考手冊或詢問經驗豐富的同事。
很多PC機上的編譯器都具備集成開發環境Integrated Developed Environment,IDE),將編譯器與其他程序創建和分析工具包裝在一起。在開發大型程序時,這類集成環境可能是非常有用的工具,但需要一些時間來學習如何高效地使用它們。學習如何使用這類開發環境已經超出了本書的范圍。
大部分編譯器,包括集成IDE的編譯器,都會提供一個命令行界面。除非你已經了解IDE,否則你會覺得借助命令行界面開始學習C++還是很容易的。這樣學習方式的好處是,可以先將精力集中於C++語言本身而不是一些開發工具),而且,一旦你掌握了語言,IDE通常是很容易學習的。
無論你使用命令行界面或者IDE,大多數編譯器都要求程序源碼存儲在一個或多個文件中。程序文件通常被稱為源文件source file)。在大多數系統中,源文件的名字以一個後綴為結尾,後綴是由一個句點後接一個或多個字符組成的。後綴告訴系統這個文件是一個C++程序。不同編譯器使用不同的後綴命名約定,最常見的包括.cc、.cxx、.cpp、.cp及.C。
如果我們正在使用命令行界面,那麼通常是在一個控制台窗口內例如UNIX系統中的外殼程序窗口或者Windows系統中的命令提示符窗口)編譯程序。假定我們的main程序保存在文件prog1.cc中,可以用如下命令來編譯它
$ CC prog1.cc
其中,CC是編譯器程序的名字,$是系統提示符。編譯器生成一個可執行文件。Windows系統會將這個可執行文件命名為prog1.exe。UNIX系統中的編譯器通常將可執行文件命名為a.out。
為了在Windows系統中運行一個可執行文件,我們需要提供可執行文件的文件名,可以忽略其擴展名.exe:
$ prog1
在一些系統中,即使文件就在當前目錄或文件夾中。你也必須顯式指出文件的位置。在此情況下,我們可以鍵入
$ .\prog1
“.”後跟一個反斜線指出該文件在當前目錄中。
為了在UNIX系統中運行一個可執行文件,我們需要使用全文件名,包括文件擴展名:
$ a.out
如果需要指定文件位置,需要用一個“.”後跟一個斜線來指出可執行文件位於當前目錄中。
$ ./a.out
訪問main的返回值的方法依賴於系統。在UNIX和Windows系統中,執行完一個程序後,都可以通過echo命令獲得其返回值。
在UNIX系統中,通過如下命令獲得狀態
$ echo $?
在Windows系統中查看狀態可鍵入
$ echo %ERRORLEVEL%
運行GNU或微軟編譯器
在不同操作和編譯器系統中,運行C++編譯器的命令也各不相同。最常用的編譯器是GNU編譯器和微軟Visual Studio編譯器。默認情況下,運行GNU編譯器的命令是g++:
$g++ -o prog1 prog1.cc
此處,$是系統提示符。-o prog1是編譯器參數,指定了可執行文件的文件名。在不同的操作系統中,此命令生成一個名為prog1或prog1.exe的可執行文件。在UNIX系統中,可執行文件沒有後綴;在Windows系統中,後綴為.exe。如果省略了-o prog1參數,在UNIX系統中編譯器會生成一個名為a.out的可執行文件,在Windows系統中則會生成一個名為a.exe的可執行文件注意:根據使用的GNU編譯器的版本,你可能需要指定-std=c++0x參數來打開對C++11的支持)。
運行微軟Visual Studio 2010編譯器的命令為cl:
C:\Users\me\Programs>cl /EHsc prog1.cpp
此處,C:\Users\me\Programs>是系統提示符,\Users\me\Programs是當前目錄名即當前文件夾)。命令cl調用編譯器,/EHsc是編譯器選項,用來打開標准異常處理。微軟編譯器會自動生成一個可執行文件,其名字與第一個源文件名對應。可執行文件的文件名與源文件名相同,後綴為.exe。在此例中,可執行文件的文件名為prog1.exe。
編譯器通常都包含一些選項,能對有問題的程序結構發出警告。打開這些選項通常是一個好習慣。我們習慣在GNU編譯器中使用-Wall選項,在微軟編譯器中則使用/W4。
更詳細的信息請查閱你使用的編譯器的參考手冊。
練習
練習1:查閱你使用的編譯器的文檔,確定它所使用的文件命名約定。編譯並運行第2頁的main程序。
練習2:改寫程序,讓它返回-1。返回值-1通常被當作程序錯誤的標識。重新編譯並運行你的程序,觀察你的系統如何處理main返回的錯誤標識。
本文節選自《C++ Primer中文版第5版)》
美】Stanley B.Lippman( 斯坦利 李普曼) Josee Lajoie(約瑟 拉喬伊 ) Barbara E. Moo (芭芭拉 默) 著
王剛 楊巨峰 譯
電子工業出版社出版