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 3【NFT】你那边还来得及,赶快 all in Bitcoin

>>:  [DAY-01] 你终究要开始的

电子书阅读器上的浏览器 [Day18] 支援夜间模式

夜间模式在电子书阅读器上通常效果不会很好,黑色的底色会造成很多残影。不过,因为我也会在一般手机上使用...

Day 4 - Remove Duplicates from Sorted Array

大家好,我是毛毛。ヾ(´∀ ˋ)ノ 废话不多说开始今天的解题Day~ 26. Remove Dupl...

30-1 之 前言

这个是第四次参加铁人赛,并且也是第一次参加自我挑战组 ~ 想说这一次要放过自已一下, 就想说报个自我...

电子书阅读器上的浏览器 [Day21] 翻译功能 (III) Google Translate

双开 WebView 并开启 Google Translate 网页 先来看看今天想要完成的功能的样...

前端工程日记 30日 名片设计

如图 pancode: div 设计成 各种形状 三角形。五角形 六角形 的方法 制作参考引用 ht...