最初的起點(diǎn) — Hello World
作者:AceTan,轉(zhuǎn)載請(qǐng)標(biāo)明出處!
一切的開(kāi)始
大概每個(gè)程序猿的第一個(gè)程序都是Hello World,這是夢(mèng)開(kāi)始的地方绍在。本文是C++入門(mén)系列博客的第一篇善涨,讓我們從最經(jīng)典的Hello World 開(kāi)始分苇⊥危看代碼
#include <iostream>
using namespace std;
int main()
{
cout << "Hello World" << endl;
return 0;
}
現(xiàn)在让禀,我們逐行分析一下這一段經(jīng)典代碼挑社。
#include <iostream>
#include 指令用來(lái)包含程序所用到的頭文件。這里告訴編譯器想要使用的是 iostream 庫(kù), 尖括號(hào)中的名字指出了頭文件的名字巡揍。需要注意的是痛阻,#include指令和頭文件的名字必須 放在同一行。我們一般將#include指令放在源文件開(kāi)始的位置腮敌。另外阱当,一般<>引用的都是標(biāo)準(zhǔn)的庫(kù)文件,如果使用自己寫(xiě)的頭文件缀皱,一般使用"", 而非<>. 例如: #include "myHeader.h", ""之中是所要使用的頭文件位置喻犁,可以加路徑。不加路徑默認(rèn)是當(dāng)前文件路徑桶癣。關(guān)于標(biāo)準(zhǔn)輸入輸出流iostream讀者可以參看相關(guān)文檔厦章,這里不展開(kāi)講。
using namespace std;
這句代碼的意思是使用標(biāo)準(zhǔn)的命名空間钮莲。 using 關(guān)鍵字一般用來(lái)聲明某個(gè)命名空間免钻,也叫作 using 聲明(using declaration). using聲明的形式如下:
using namespace::name;
namespace叫做命名空間,命名空間的作用是避免我們名字定義沖突崔拥。舉個(gè)例子极舔,你的小名叫小明,你隔壁王叔叔的兒子小名也就小明链瓦,當(dāng)你們一起玩耍時(shí)拆魏,別人喊小明,你們就不確定喊的是誰(shuí)了慈俯,傻傻的計(jì)算機(jī)更分不清渤刃。所以就需要命名空間來(lái)指定到底喊的是誰(shuí)了,像這樣 王叔叔::小明 那就表明喊的是王叔叔家的小明了贴膘。這個(gè)::叫做作用域運(yùn)算符卖子。標(biāo)準(zhǔn)庫(kù)定義的所有名字都在命名空間std中。
int main(){}
每個(gè)C++程序必須包含一個(gè)或多個(gè)函數(shù)刑峡,其中一個(gè)必須命名為main,操作系統(tǒng)通過(guò)main來(lái)運(yùn)行C++程序洋闽,它為程序入口玄柠。 一個(gè)函數(shù)的定義分為四個(gè)部分,返回類型(return type)诫舅、函數(shù)名(function name)羽利、形參列表(parameter list)、函數(shù)體(function body). 此處返回類型為int骚勘,函數(shù)名為main铐伴,形參列表為空,函數(shù)體為{}包括起來(lái)的內(nèi)容俏讹。
main函數(shù)的返回類型必須為int当宴,即整數(shù)類型,int 類型是一種內(nèi)置類型,即語(yǔ)言自身定義的類型泽疆。
你也許表示不服户矢,我明明看過(guò)main函數(shù)的返回值可以為void的。這其實(shí)是一種不標(biāo)準(zhǔn)的做法殉疼,在VC梯浪、VS的編譯器能編譯通過(guò),但在其他標(biāo)準(zhǔn)的編譯器下瓢娜,就編譯不過(guò)了挂洛。不信你試試gcc編譯器。
cout << "Hello World" << endl;
cout 標(biāo)準(zhǔn)輸出對(duì)象眠砾,名字定義在std命名空間下虏劲。cout為標(biāo)準(zhǔn)輸出(standard output),與之對(duì)應(yīng)的還有標(biāo)準(zhǔn)輸入(standard input) cin. 除此之外,比較不常用的還有cerr, clog. 顧名思義褒颈,看名字基本上就能知道它是干嘛的了柒巫。
<< 為 輸出運(yùn)算符, 這個(gè)運(yùn)算符接受兩個(gè)運(yùn)算對(duì)象,左側(cè)的對(duì)象必須是一個(gè)ostream對(duì)象谷丸,右側(cè)運(yùn)算符是要打印的值堡掏。
endl 為操縱符,表示換行刨疼。 與轉(zhuǎn)義字符"\n"是一樣的泉唁。
return 0;
main函數(shù)的返回值。
在大多數(shù)的系統(tǒng)中揩慕,main函數(shù)的返回值用來(lái)指示狀態(tài)游两,返回0表示成功,非0的返回值的含義由系統(tǒng)定義漩绵,通常用來(lái)指出錯(cuò)誤類型。
編程工具
工欲善其事肛炮,必先利其器
編程工具這東西各有所好止吐,推薦幾款宝踪,是筆者比較常用和喜愛(ài)的。
- VS系列
- Code::Blocks
- Sublime Text
重量級(jí)的IDE還是力推Visual Studio碍扔,至于版本瘩燥,推薦使用VS2010及以上。個(gè)人編程的話不同,建議直接上VS2015厉膀,VS2015號(hào)稱全宇宙最強(qiáng)的IDE,各方面功能不是蓋的二拐,其他IDE望塵莫及服鹅。筆者強(qiáng)烈建議不使用VC6.0,這坑爹玩意用的根本不是標(biāo)準(zhǔn)的語(yǔ)法百新,最惡心的就是它變量的作用域了企软。VC6.0已經(jīng)被時(shí)代淘汰,雖然國(guó)內(nèi)很多教材的實(shí)例都是用VC6.0寫(xiě)的饭望。
輕量級(jí)的IDE推薦Code::Blocks,雖然功能不如VS強(qiáng)大仗哨,好在它是跨平臺(tái)的IDE,各方面功能做的也不錯(cuò)铅辞。長(zhǎng)期刷題的童鞋們可以使用看看厌漂。
如果你寫(xiě)的是小型程序,或者覺(jué)得自己足夠牛逼斟珊,不需要任何IDE苇倡,那么,我推薦這款Sublime Text編輯器了倍宾,它支持語(yǔ)法高亮雏节,Sumlime Text是程序猿最喜歡用的編輯器之一了。誰(shuí)用誰(shuí)知道高职。上個(gè)圖感受一下钩乍。
當(dāng)然,如果你是Linux用戶怔锌,并長(zhǎng)期使用Vim寥粹,那么我覺(jué)得,很難再有編輯器入的了你的法眼了埃元。
書(shū)籍推薦:
對(duì)涝涤,你沒(méi)看錯(cuò),我就推薦這一本岛杀。學(xué)習(xí)完并掌握這本書(shū)的知識(shí)點(diǎn)阔拳,找個(gè)C++相關(guān)編程工作完全沒(méi)有問(wèn)題。這本書(shū)基本上是C++中圣經(jīng)級(jí)別的存在了类嗤,而且糊肠,它還比較適合初學(xué)者辨宠。學(xué)習(xí)C++的首選,它包羅萬(wàn)象货裹,還可以當(dāng)工具書(shū)來(lái)翻閱嗤形。C++程序猿基本上人手一本。
黑魔法
如果你覺(jué)得上面的程序足夠簡(jiǎn)單弧圆,根本不屑一顧赋兵,那么看下面兩個(gè)Hello World,是否會(huì)覺(jué)得眼前一亮呢搔预?
-
外星人說(shuō)的"Hello World".
#include <iostream> using namespace std; void alien_say(char * p) { while (putchar(*(p += *(p + 1) - *p))); } int main() { return alien_say("BETHO! Altec oh liryom(a loadjudas!) dowd."), 0; }
-
預(yù)處理迭代的"Hello World"
#define _________ } #define ________ putchar #define _______ main #define _(a) ________(a); #define ______ _______(){ #define __ ______ _(0x48)_(0x65)_(0x6C)_(0x6C) #define ___ _(0x6F)_(0x2C)_(0x20)_(0x77)_(0x6F) #define ____ _(0x72)_(0x6C)_(0x64)_(0x21) #define _____ __ ___ ____ _________ #include<stdio.h> _____
以上兩段代碼作者不詳霹期,侵刪。
實(shí)現(xiàn)原理就不一一說(shuō)了斯撮,但請(qǐng)注意经伙,在實(shí)際工作中,千萬(wàn)不要寫(xiě)這種技巧性很高的代碼勿锅,不然被你同事打死都不知道是怎么回事帕膜,切記,切記溢十。
結(jié)束語(yǔ)
以"Hello World"開(kāi)啟代碼人生垮刹,后面的路還有很長(zhǎng)。我們的征途是星辰大海张弛。