C++ 笔记(02)— 程序结构(头文件说明、命名空间、函数返回值、函数参数、注释、语句结束符、cin/cout)
先看以下代碼
#include <iostream>
#include <string>
using namespace std;int main() // main() 是程序開始執(zhí)行的地方
{int num; // 聲明了一個(gè)名為 num 的變量,用于存儲(chǔ)類型為int 的數(shù)據(jù)。cout << "Enter your number" << endl;cin >> num; // 使用 cin 將輸入的數(shù)字存儲(chǔ)在該int 變量中cout << "Enter your name" << endl;string name;cin >> name;cout << "name is " << name << " number is " << num << endl;return 0;
}
分析下上面程序:
#include <iostream>定義頭文件,這些頭文件包含了程序中必需的或有用的信息;using namespace std告訴編譯器使用std命名空間;/* ......*/表示程序的多行注釋,編譯器會(huì)忽略這部分內(nèi)容;//單行注釋,從//開始一直到行尾都表示為注釋,編譯器同樣會(huì)忽略該部分;int main()主函數(shù),程序從這里開始執(zhí)行;cout << "Enter your number"輸出引號(hào)內(nèi)的內(nèi)容;return 0終止main函數(shù),并向調(diào)用進(jìn)程返回值 0;
1. 預(yù)處理器編譯指令 #include
預(yù)處理器編譯指令是向預(yù)處理器發(fā)出的命令,總是以字符 # 打頭。在程序中第 1 行的
#include <filename>
讓預(yù)處理器獲取指定文件(這里是 iostream )的內(nèi)容,并將它們放在在編譯指令所處的位置。 iostream 是一個(gè)標(biāo)準(zhǔn)頭文件,讓您能夠在第 11 行使用 cout 將 hello,world 顯示到屏幕上。換句話說(shuō),編譯器之所以能夠編譯包含 cout 的第 11 行,是因?yàn)榈?1 行指示預(yù)處理器包含了 cout 的定義。
注意: #include <filename> 和 #include "filename" 的區(qū)別:
#include <filename>通常用于包含標(biāo)準(zhǔn)庫(kù)頭文件;#include "filename"通常用于包含自己創(chuàng)建的頭文件;
2. 程序主體
聲明 main() 時(shí),總是在它前面加上 int ,這是一種標(biāo)準(zhǔn)化約定,表示 main() 函數(shù)的返回類型為整數(shù)。
int main()
{dosomethingreturn 0
}
在很多 C++ 應(yīng)用程序中,都使用了類似于下面的 main() 函數(shù)變種:
int main (int argc, char* argv[])
這符合標(biāo)準(zhǔn)且可以接受,因?yàn)槠浞祷仡愋蜑?int 。括號(hào)內(nèi)的內(nèi)容是提供給程序的參數(shù)。該程序可能允許用戶執(zhí)行時(shí)提供命令行參數(shù),如:
program.exe arguments
其中 arguments 是操作系統(tǒng)傳遞給程序的參數(shù),以便在 main() 中進(jìn)行處理。
程序第 11 行:
cout << "hello,world" << endl;
cout 是將 hello,world 顯示到控制臺(tái)(即屏幕)的語(yǔ)句。
cout是在名稱空間std中定義的一個(gè)流,這里使用流插入運(yùn)算符<<將文本 hello,world 放到這個(gè)流;endl用于換行,將其插入流中相當(dāng)于插入回車。每次需要將新實(shí)體插入流中時(shí),都使用了流插入運(yùn)算符<<;
C++ 流的優(yōu)點(diǎn)是,將類似的語(yǔ)義用于另一種類型的流時(shí),將執(zhí)行不同的操作。例如,要插入到文件而不是控制臺(tái),可將插入運(yùn)算符 << 用于 std::fstream (而不是 std::cout )。
2.1 為什么 main 函數(shù)前要加上 int ?
main 函數(shù)的返回值是返回給主調(diào)進(jìn)程,使主調(diào)進(jìn)程得知被調(diào)用程序的運(yùn)行結(jié)果。
標(biāo)準(zhǔn)規(guī)范中規(guī)定 main 函數(shù)的返回值為 int ,一般約定:
- 程序運(yùn)行成功時(shí)返回 0;
- 出現(xiàn)錯(cuò)誤時(shí)返回 -1;
然而,返回值為整數(shù),程序員可利用整個(gè)整數(shù)范圍,指出眾多不同的成功或失敗狀態(tài)。
如果程序的運(yùn)行結(jié)果不需要返回給主調(diào)進(jìn)程,或程序開發(fā)人員確認(rèn)該狀態(tài)并不重要,可以不寫 main 函數(shù)的返回值。
- 在一些檢查不是很嚴(yán)格的編譯器中,比如 VC, VS 等,
void類型的main是允許的; - 不過(guò)在一些檢查嚴(yán)格的編譯器下,比如
g++, 則要求main函數(shù)的返回值必須為int型;
所以在編程時(shí),區(qū)分程序運(yùn)行結(jié)果并以 int 型返回,是一個(gè)良好的編程習(xí)慣。
#include <iostream>
using namespace std;
void main()
{cout << "hello,world" << endl;
}
使用 g++ 編譯之后報(bào)錯(cuò):
wohu@wohu:~/C++$ g++ main.cpp
main.cpp:3:11: error: ‘::main’ must return ‘int’void main() ^
wohu@wohu:~/C++$
2.2 int main() 與 int main(void) 區(qū)別
int main(void) 指的是此函數(shù)的參數(shù)為空,不能傳入?yún)?shù),如果傳入?yún)?shù),就會(huì)報(bào)錯(cuò)。
在 C++ 中 int main() 和 int main(void) 是等效的,但在 C 中讓括號(hào)空著代表編譯器對(duì)是否接受參數(shù)保持沉默。
2.3 函數(shù)聲明及調(diào)用
#include <iostream>
using namespace std;// 函數(shù)聲明,它告訴編譯器您要?jiǎng)?chuàng)建一個(gè)函數(shù),該函數(shù)名為demo(),返回類型為int。
int demo();int main()
{demo();return 0;
}int demo()
{cout << "this is demo function" << endl;cout << "10/5=" << 10/5 << endl;cout << "22/7=" << 22/7 << endl;cout << "22/7.0=" << 22/7.0 << endl;return 0;
}
如果第 5 行被注釋掉,
// int demo();
那么會(huì)編譯報(bào)錯(cuò):
error: ‘demo’ was not declared in this scope
但是如果 demo 函數(shù)在 main 函數(shù)前定義,則不會(huì)報(bào)錯(cuò),如下所示:
#include <iostream>
using namespace std;// demo() 在 main 函數(shù)之前定義,較新的C++編譯器將其視為函數(shù)聲明和定義
int demo()
{cout << "this is demo function" << endl;cout << "10/5=" << 10/5 << endl;cout << "22/7=" << 22/7 << endl;cout << "22/7.0=" << 22/7.0 << endl;return 0;
}int main()
{demo();return 0;
}
2.4 函數(shù)返回值
在 C++ 中,函數(shù)無(wú)需做任何決策,也無(wú)需返回成功/失敗狀態(tài)時(shí),可將其返回類型聲明為 void 。
void demo()
除非明確聲明了不返回值,否則函數(shù)必須返回一個(gè)值。
main() 也是函數(shù),且總是返回一個(gè)整數(shù)。在很多情況下,一個(gè)應(yīng)用程序被另一個(gè)應(yīng)用程序啟動(dòng),而父應(yīng)用程序(啟動(dòng)者)想知道子應(yīng)用程序(被啟動(dòng)者)是否成功地完成了其任務(wù)。程序員可使用 main() 的返回值向父應(yīng)用程序傳遞成功或錯(cuò)誤狀態(tài)。
3. 標(biāo)識(shí)符規(guī)則
C++ 標(biāo)識(shí)符是用來(lái)標(biāo)識(shí)變量、函數(shù)、類、模塊,或任何其他用戶自定義項(xiàng)目的名稱。一個(gè)標(biāo)識(shí)符以字母 A-Z 或 a-z 或下劃線 _ 開始,后跟零個(gè)或多個(gè)字母、下劃線和數(shù)字(0-9)。
C++ 標(biāo)識(shí)符內(nèi)不允許出現(xiàn)標(biāo)點(diǎn)字符,比如 @ 、 & 和 % 。 C++ 是區(qū)分大小寫的編程語(yǔ)言。
標(biāo)識(shí)符特點(diǎn)如下:
- 第一個(gè)字符必須是字母或下劃線;
- 后續(xù)字符可以是字母、數(shù)字或下劃線;
- 標(biāo)識(shí)符的有效長(zhǎng)度不超過(guò) 247 字符;
- 標(biāo)識(shí)符不能和關(guān)鍵字相同;
- 標(biāo)識(shí)符區(qū)分大小寫;
- 最好也不要和系統(tǒng)預(yù)定義標(biāo)識(shí)符同名;
- 標(biāo)識(shí)符命名要做到“見(jiàn)名知義”;
- 應(yīng)該避免使用可能引起混淆的字母;
4. 注釋說(shuō)明
C++ 支持單行注釋和多行注釋。注釋中的所有字符會(huì)被 C++ 編譯器忽略。C++ 注釋以 /* 開始,以 */ 終止。注釋也能以 // 開始,直到行末為止。
在 /* 和 */ 注釋內(nèi)部, // 字符沒(méi)有特殊的含義。在 // 注釋內(nèi), /* 和 */ 字符也沒(méi)有特殊的含義。
在 C++ 語(yǔ)言中,如果試圖在一段代碼的首尾分別加上 / * 和 * / 符號(hào)來(lái) “ 注釋掉 ” 這段代碼,你不一定能如愿 。 如果這段代碼內(nèi)部原先就有注釋存在,這樣做就會(huì)出問(wèn)題 。 要從邏輯上刪除一段 代碼,更好的辦法是使用 #if 指令 。 只要像下面這樣使用:
#if 0statements
#endif
在 #if 和 #endif 之間的程序段就可以有效地從程序中去除,即使這段代碼之間原先存在注釋也無(wú)妨,所以這是一種更為安全的方法 。
5. 注意事項(xiàng)
C++中每個(gè)語(yǔ)句必須以分號(hào);結(jié)束,它表明一個(gè)邏輯實(shí)體的結(jié)束;- 保存文件時(shí),務(wù)必使用擴(kuò)展名
.cpp,不要使用擴(kuò)展名.c,因?yàn)橛行┚幾g器都將這種文件視為C語(yǔ)言代碼,而不是C++代碼; - 在
C++中分行并不能自動(dòng)結(jié)束語(yǔ)句。在C++中,一條語(yǔ)句可跨越多行;還可在一行中包含多條語(yǔ)句,只要每條語(yǔ)句都以;結(jié)尾;
總結(jié)
以上是生活随笔為你收集整理的C++ 笔记(02)— 程序结构(头文件说明、命名空间、函数返回值、函数参数、注释、语句结束符、cin/cout)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 开一家儿童主题餐厅大概需要多少资金?
- 下一篇: C++ 笔记(03)— 命名空间(概念、