【C/C++語言入門篇】-- HelloWorld思考


本文將從思考的角度去重新認識一下Helloworld。在例子之後會提出不同的問題,引導大家去思考每一句乃至每個細節。同時希望能夠讓大家以後能夠以不斷思考不斷提問的方式去看待自己的程序。我相信大家會發現很多新的東西,好了切入正題。

我們每學一種新的語言基本都會從helloworld開始,基本每種語言都喜歡將helloworld作爲示例直接的表現在讀者的面前,讓讀者在感官上認識一下這種語言的結構,語法格式等。

因此各種各樣的helloworld便出來了,比如:WINDOWS程序的HelloWorld,操作系統的Helloworld(簡單的獨立於OS的一個引導及打印helloworld字樣),LUA的HelloWorld(遊戲開發常用腳本語言)等等數不勝數。

推薦下小編的C++學習羣;513801371,不管你是小白還是大牛,小編我都歡迎,不定期分享乾貨,包括小編自己整理的一份2019最新的C++和0基礎入門教程,歡迎初學和進階中的小夥伴。
每天晚上20:00都會開直播給大家分享C++知識和路線方法,羣裏會不定期更新最新的教程和學習方法(進羣送2019C++學習教程),大家都是學習C++的,或是轉行,或是大學生,還有工作中想提升自己能力的C++黨,如果你是正在學習C++的小夥伴可以加入學習。最後祝所有程序員都能夠走上人生巔峯,讓代碼將夢想照進現實,非常適合新手學習,有不懂的問題可以隨時問我,工作不忙的時候希望可以給大家解惑

C語言版

#include <stdio.h>
int main( void )
{
printf( "Hello World!" );
return 0;
}

C++版:

#include <iostream>
using namespace std;
int main( void )
{
cout << "Hello World!" << endl;
return 0;
}

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

#include <stdio.h>
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 <stdio.h>可否替換成#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]就是你當前管理員賬戶所擁有的文件夾路徑,可以調試的時候觀察(在後面的文章裏專門講調試技巧相關)。這裏有指針及字符串數組。以後再給大家深入解釋。

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

  2. 引用stdio.h是爲了調用printf函數。此函數聲明在這個頭文件裏。

  3. 這個問題留給大家思考。

  4. 這個問題也留給大家思考。

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

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

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

  1. #include <iostream>爲什麼沒有.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;了。

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

4.cout其實是ostream,也就是輸出流。<<就是重載運算符,通過傳參數的形式將需要輸出的內容傳入<<運算符裏。然後進行輸出。

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

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

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

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

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

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

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

然後今天就講到這裏啦,大家記得點贊收藏,分享轉發,關注×××姐哦!

                                                                       END
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章