iT邦幫忙

2021 iThome 鐵人賽

DAY 3
0
Software Development

三十天內用C++寫出一個小遊戲系列 第 3

Day 3 - 穩若泰山

簡介

今天我想要介紹一下關於C++的一些基本文法,還有一些我學到的寫程式時須注意的小撇步。做為一個初學者,我認為培養良好的習慣還有關係,將有助於我寫好程式。(因為網路上有很多寫的比我還要好很多的文章,所以我會寫得較像是筆記的形式,請見諒)


基本語法

#include<iostream>
using namespace std;

main(){
	cout << "Hello World! \n";
	return 0;
}

相信很多初次學程式的人,寫的第一個程式碼就是"Hello World !"吧!第一次學的時候,我被告知要"先照抄,再理解",其實很多時候也是這樣,你先把你不理解的東西記起來,等到未來某一天你就會突然了解了。

這段程式碼的結果會長得像這樣:

接下來我會一項一項的把程式碼拆解。

首先第一個是

#include<iostream>
using namespace std;

這兩句被稱做為preprocessor,他們主要的功能,就是在compiler 做事之前,需要先做一些事情,才能讓compiler可以順利進行。

#include:

第一句 #include <iostream>,<>中的檔案,中文被稱做標頭檔(header file),這些標頭檔可能是已經定義的函數或是變數,或是一些通用的東西(library)。例如是在C++中的standard library 中已經定義好的input & output。#include <iostream>本身就是匯入這些定義好的東西,讓compiler可以正常運作。

因此,其實也可以自己定義一個檔案,例如:

#include "C:\ myheader.h"; (myheader.h就是已經寫好的一個標頭檔)。

可以把標頭檔想像成一個堆滿工具的房間,還有一個工具箱。Library(或是其他的標頭檔)就是那個房間,但是當你今天要出門的時候,你就必須把工具(定義的函數或變數)裝在工具箱(用#include<>把工具呼叫出來)裡面才能出門,而且每一天遇到的工作都不太一樣,所以你工具箱裡裝的工具可能每天都不盡相同。

using namespace std;

接下來,後面的using namespace std;這句話的重點在Namespace這個詞,中文被翻譯成命名空間,這個東西是作為儲存名稱用的,當今天程式要寫出像是cout 或是cin等的程式碼時,如果沒有使用using namespace std; 就會讓程式無法成功運作。而其中std 就是一個叫做standard的命名空間。

可以把命名空間想像成一個大公司,底下有很多不同職稱的職員,擁有不同的員工編號(std或是其他的命名空間)。公司A有個職員叫做阿明,他的員工編號為 0908 ,公司 B 有個職員叫做小美,他的員工編號也剛好是 0908 。雖然兩個人的員工編號恰好相同,但是因為他們待在不同的公司,所以在付他們薪水的時候,就不會因為他們的員工編號相同而搞錯,因為他們存在於不同的命名空間裡面。(1)

int main(){
	cout << "Hello World! \n";
	return 0;
}

這一段文字,被稱作 主函數(main function),int main(){} 代表的是一種會回傳整數給電腦的函數,也有其他的函數例如 void main(){} 或是wmain(){} ,但是他們的功用我還不太了解。在每一個C語言組成的程式中,一定要含有至少一個main function,如果沒有寫入main function的話,編譯器就會發生錯誤。(2)詳細的原因我也不太了解,不過既然沒寫會跑不出來,那為什麼不寫呢XD? 好啦不是,可能未來有一天我會搞懂他的!

cout << 這句話的意思是叫電腦印出後面的東西,箭頭指向他,可以把它想像成把檔案傳進去印表機的概念,cin >> 則是反過來,把輸入的東西傳輸到其他容器裡面。使用的方法像是: cout << 0; 跑出的程式就會印出一個斗大的0!cin>> 的話會在下一篇跟宣告變數做說明。

"Hello World! \n"就是我們想要讓電腦印出的東西了,但是身為初學者的人可能會覺得後面明明就還有兩個字,但為什麼沒有被印出來呢?\n 在程式語言中,被稱做跳脫序列(escape sequence),在程式中,因為沒有人按下Enter鍵讓他們換行,或是按下Tab鍵讓他們縮排,因此就需要使用這些跳脫序列讓程式可以做到上述的事。

常用的跳脫序列有:

  • \n (new line): 換行
  • \t (Tab) :等同於Tab鍵
  • \b (backspace): 等同於倒退鍵
  • \a (alert): 發出警示音
  • ": 出現一個 "
  • ': 出現一個 '
  • \: 出現一個 \

接下來return 0; 這句話看似對程式碼沒有起到太大的效用,但是它的存在對於主函數而言卻很重要!簡而言之,return 0; 的作用是讓函數的進行終止,後面的0也可以改成其他的數值(即改變回傳的值),但是有些主函數(void main())是不需要回傳值的,但因為我也還沒接觸到所以先把他跳過。在程式讀到return 0;的時候,就會像是返回了一個標誌,表示程式成功的執行完成了可以退出了而如果不回傳一個值的話,系統就會自己判定他是異常返回,會做出相對應的處置。(3)

但是其實現在C99的編譯器已經會自動在編譯的時候加上return 0;了,所以沒有寫到return時也不會發生錯誤了 (但還是要記得寫啦!)


小結

這一節的基本語法,雖然只是大海中的一粒細沙,還有很多東西是沒有提到的,我會盡量去介紹他們的。這一段程式是非常基本的一段,感覺對於目前只需要解出問題的我沒什麼幫助,像是return的作用,main()的作用花了一點時間去查,雖然說有些累,但是學到東西總是還蠻開心的呢!跟其他人比,我現在還是小弱雞一個,得花更多時間變得跟他們一樣強了!

最近的生活be like:


參考資料

  1. https://zh.wikipedia.org/wiki/命名空间
  2. https://en.cppreference.com/w/cpp/language/main_function
  3. https://www.itread01.com/content/1505890834.html

上一篇
Day 2 - 工欲善其事,必先利其器
下一篇
Day 4 - 穩若磐石
系列文
三十天內用C++寫出一個小遊戲30

尚未有邦友留言

立即登入留言