C++語言的第一步——HelloWorld思考

你踏入C/C++語言的第一步——HelloWorld思考

C語言C++編程交流學習扣扣基地:585653964

我們每學一種新的語言基本都會從helloworld開始,基本每種語言都喜歡將helloworld作為示例直接的表現在讀者的面前,讓讀者在感官上認識一下這種語言的結構,語法格式等。因此各種各樣的helloworld便出來了,比如:WINDOWS程序的HelloWorld,操作系統的Helloworld(簡單的獨立於OS的一個引導及打印helloworld字樣),LUA的HelloWorld(遊戲開發常用腳本語言)等等數不勝數。今天我們就從CC++的helloworld進行探討。首先寫倆例子:

C語言版:

#include

int main( void )

{

printf( "Hello World!" );

return 0;

}

C++版:

#include

using namespace std;

int main( void )

{

cout << "Hello World!" << endl;

return 0;

}

你踏入C/C++語言的第一步——HelloWorld思考

C語言C++編程交流學習扣扣基地:585653964

首先,請大家糾正自己的編碼格式,保持每行基本都有獨立的事情,不要寫成這樣:

#include

main()

{printf( "Hello World!" );

return 0;}

這樣一來,假如是上百萬行代碼的項目,我想你也不想看自己寫的代碼,編碼習慣好對自己調試及糾錯都有好處,在大型的項目中都是分工合作的,假如你的代碼格式很差將對別人的工作量造成影響。你在項目中的地位也將受到影響,最直接的就是影響到你的薪資。

其次,我們先看C語言版的,這是一個最簡單的程序,就只有一句打印。輸出的內容就是Hello World!我相信大家都知道。那我現在在這裡提幾個問題:

1. main函數是否一定得有返回值?

2. main函數是否可以有參數?

3. 為什麼是return 0?

4. 為什麼要引用stdio.h頭文件? 自己是否可以寫頭文件?

5. printf是否可以有多個參數?假如能,為什麼能有多個? 是怎麼實現的?我們可否自己寫一個?

6. printf是通過什麼形式將"Hello World!"字符串傳入的?

7. #include 可否替換成#include "stdio.h" ?

好了,暫時提出這幾個問題。大家可以看到,簡簡單單的HelloWorld程序也能提出這麼多問題,是不是用思考的方式去看待程序將收穫不少?我們再來一一回答這些問題:

1. main函數可以不寫返回值,比如:void main(){} 甚至 main(){}。 不過不推薦前面兩種形式。原因在於,main函數的返回值為0表示執行完整個main函數沒有問題,成功返回。同時在main函數的上一層調用將會取到main函數的返回值,進行一些系統的處理(這裡暫時不詳解)。看似沒必要的東西通常被我們忽略。作為程序員的我們,我想應該在做事的時候要有追求完美的觀念。因此main函數建議寫上返回值。

2. main函數可以有參數。比如:int main( int _Argc, char** _Argv, char ** _Env ); _Argc 是指命令行輸入參數的個數,_Argv存儲了所有的命令行參數。_Env表示環境相關。同時也可以定義成:int main( int _Argc, char** _Argv ); 比如:

你的程序是hello.exe。傳命令行參數:

hello.exe Shiqi Yu

那麼,_Argc的值是 3,_Argv[0]是"hello.exe",_Argv[1]是"Shiqi",_Argv[2]是"Yu"。 _Env[0]就是你當前管理員賬戶所擁有的文件夾路徑,可以調試的時候觀察(在後面的文章裡專門講調試技巧相關)。這裡有指針及字符串數組。

3. 返回0表示程序正常退出。

4. 引用stdio.h是為了調用printf函數。此函數聲明在這個頭文件裡。

5. 可以替換,我們在編譯程序的時候,編譯器會自動去查找你所引用的這些頭文件。<>表示優先從系統的庫裡面查找此頭文件,未找到再到用戶代碼目錄裡查找。""剛好相反。

還有更多的問題或者疑問,大家可以繼續去想,首先養成了思考的習慣。進步就很快了。

你踏入C/C++語言的第一步——HelloWorld思考

C語言C++編程交流學習扣扣基地:585653964

再看C++版的,也是一個簡單的例子,同樣是打印一句Hello World!再提出幾個問題:

1. #include 為什麼沒有.h?

2. using namespace std;這句為什麼?作用是什麼?

3. 這裡的Hello World!字符串又是怎麼傳入函數的?還是並沒有傳入函數?

4. cout在這裡起什麼作用? <

5. endl起什麼作用?

C++跟C的語法相差不大,這裡只提出了5個問題,相同的可以提出的問題已經在C語言版裡提出了。兩個版本有的問題同時有效。再來答這幾個問題:

1. 在VC6以後的C++版本,VC的庫目錄裡增加了一些新的頭文件,這些頭文件沒有擴展名(分類一多,為了區分(各人認為))。因此就沒有.h了。

2. 這裡是名字空間的引用,名字空間也就是為了防止在不同的CPP或者H中發現同名字的函數,為了區分,就在這些函數或者類等外面加上一個名字空間以示區分,假如沒有這句,下面的語句將得這樣寫:

std::cout << "Hello World!" << std::endl; 假如在另外一個名字空間masefee裡面同樣有同名字的函數,我們就得寫:masefee::cout << "Hello World!" << masefee::endl;了。

3. 這個問題在解決了上面C語言版的問題6自然會解答了。

4.cout其實是ostream,也就是輸出流。<

5.endl就是回車符。換行用。

好了,這兩個程序解答完了,相信大家已經有感覺了。思考真的會帶來無限的收穫。也希望大家有新的發現及想法,並告訴給我。讓我們共同進步!

除了上面兩個紅色的問題,另外再提出幾個問題:

1. C++中的重載是什麼意思?

2. C++中怎麼重載運算符?

3. 瞭解下編譯器的堆棧調用窗口。

4. 怎麼在編譯器裡面設置給程序傳命令行參數?命令行參數在實際中有什麼運用

如侵刪,歡迎大家一起來交流!


分享到:


相關文章: