【C++教程】03.第一个程序解析
?
第三章?第一個(gè)程序解析
前言
第一個(gè)程序也即是如何顯示字符串“HelloWorld!”,這是大多數(shù)程序員都走過(guò)的路。別提第一次成功編譯時(shí),我有多高興,所以如果你還沒(méi)編譯成功,不要?dú)怵H,再研究一下第二章。下面列出第一個(gè)程序的代碼:
#include <iostream> using namespace std;int main() {cout << "Hello World!";//等待用戶輸入,防止程序一閃而過(guò)int a;cin >> a;return 0; }1.預(yù)處理器
看到井號(hào)開(kāi)頭的代碼,這就是預(yù)處理器識(shí)別的代碼了,預(yù)處理器并非C++的語(yǔ)法,而是編譯器提供的功能。比如#include,其作用是包含一個(gè)代碼文件。例如:
#include "head.h"這一句將項(xiàng)目中的head.h頭文件內(nèi)存復(fù)制替換到此處。比如在head.h文件里我們可以寫(xiě):
//in head.h int a = 3; int b = 5;在main.cpp文件里這樣包含它:
//in main.cpp #include "head.h"//這里會(huì)被替換為head.h的內(nèi)容int main() {//即使這里沒(méi)看到a和b的定義,但是也沒(méi)有報(bào)錯(cuò)cout << a + b;return 0; }#include "head.h"會(huì)被替換為head.h文件的內(nèi)容,所以最后輸出的結(jié)果為8。
再看HelloWorld的代碼,第一行為#include <iostream>,其實(shí)就是替換了iostream文件的內(nèi)容。
2.標(biāo)準(zhǔn)庫(kù)
我們可以右鍵查看iostream文件的內(nèi)容。
可以看到此文件是只讀的,這是C++標(biāo)準(zhǔn)庫(kù)的頭文件,標(biāo)準(zhǔn)庫(kù)就是除語(yǔ)法外,標(biāo)準(zhǔn)定義的其他工具。每個(gè)編譯器可以有不用的實(shí)現(xiàn),可以看到此文件在VS的某一個(gè)目錄里,我們包含的文件就是這個(gè)文件。雖然實(shí)現(xiàn)可能不同,但是使用方式和規(guī)則是固定的,我們?cè)谑褂脮r(shí)可以忽略底層的實(shí)現(xiàn)。
標(biāo)準(zhǔn)庫(kù)的內(nèi)容比較多,后面再詳細(xì)解釋。它本質(zhì)就是其他專(zhuān)業(yè)程序員為C++寫(xiě)的功能代碼,包含了常用的功能,但是這個(gè)標(biāo)準(zhǔn)庫(kù)被稱(chēng)為標(biāo)準(zhǔn)是因?yàn)樗枪俜降?#xff0c;可以視作C++標(biāo)準(zhǔn)的一部分。比如我們要實(shí)現(xiàn)標(biāo)往控制臺(tái)輸出文本,就需要使用到iostream這個(gè)標(biāo)準(zhǔn)庫(kù)模塊。
io為input和output的縮寫(xiě),stream為流的意思。所以iostream是輸入輸出流的意思,我們向控制臺(tái)打印字符就需要它,從控制臺(tái)接收輸入也需要它。
3.命名空間
現(xiàn)在來(lái)看第二句:
using namespace std;可以發(fā)現(xiàn)末尾多了一個(gè)分號(hào),宏定義一般結(jié)尾不接分號(hào),而一般的C++語(yǔ)句則需要以分號(hào)結(jié)尾。
using namespace翻譯成中文就是使用命名空間的意思,所謂命名空間就如同一個(gè)名字,例如地球、四川、桌子上。地球的衛(wèi)星、四川的河流、桌子上的筆,正是因?yàn)榛鹦且灿行l(wèi)星,北京也有河流,所以可以將地球視作一個(gè)命名前綴防止代指衛(wèi)星的定義出現(xiàn)沖突。
而std則是標(biāo)準(zhǔn)庫(kù)(standard library)的名字前綴,比如字符串可以用string表示。假設(shè)某個(gè)庫(kù)再實(shí)現(xiàn)一個(gè)字符串string,那他們的名字就會(huì)出現(xiàn)沖突。在這里使用using namespace std,則明確使用標(biāo)準(zhǔn)庫(kù)的名字。例如下一句的cout標(biāo)準(zhǔn)輸出,輸出字符到控制臺(tái),則是標(biāo)準(zhǔn)庫(kù)的函數(shù)。
要么這樣全局名字引用
using namespace std; cout << "123";要么兩個(gè)冒號(hào)指定名字空間使用?
std::cout << "123";//這樣就可以不要using namespace std?4.函數(shù)
所謂函數(shù)就是程序員定義的一個(gè)功能模塊,方便反復(fù)使用和抽象化。例如實(shí)現(xiàn)交換兩個(gè)數(shù)字:
void swap(int& a, int& b) {int temp = a;a = b;b = temp; }?其中swap是我們?nèi)〉拿?#xff0c;以后再想交換兩個(gè)數(shù)字,如下調(diào)用即可,方便和簡(jiǎn)化了使用,調(diào)用者也不需要知道函數(shù)內(nèi)部是如何實(shí)現(xiàn)的:
int x = 1; int y = 2; swap(x, y);//調(diào)用之后x為2,y為1?標(biāo)準(zhǔn)庫(kù)提供了許多常用函數(shù),例如:
| sqrt | 開(kāi)方 |
| pow | 求指數(shù) |
| round | 四舍五入 |
| time | 返回時(shí)間 |
| rand | 隨機(jī)數(shù) |
?所以除了自己調(diào)用自己寫(xiě)的函數(shù),還可以直接使用現(xiàn)成的工具函數(shù)。
定義函數(shù)的基本方式如下:
返回值類(lèi)型 函數(shù)名(參數(shù)<可選>) {執(zhí)行語(yǔ)句返回值<可選> }?而主函數(shù)main是一個(gè)特殊函數(shù),作為整個(gè)程序的入口,主函數(shù)執(zhí)行完畢,則整個(gè)程序也執(zhí)行完畢。標(biāo)準(zhǔn)的主函數(shù)需要返回int型值,所以主函數(shù)如下定義,在其內(nèi)部則是我們期望執(zhí)行的代碼:
int main() {//程序從這里開(kāi)始執(zhí)行//這里寫(xiě)需要執(zhí)行的代碼return 0;//返回0代表正常結(jié)束 }?5.字符串
在代碼中如何表示一段文本呢?用雙引號(hào)括起來(lái)。
例如:"HelloWorld"、"我愛(ài)中國(guó)"、"QWQ"
引號(hào)用于括起來(lái)字符串,那如何表示引號(hào)呢?用\"來(lái)表示。這個(gè)叫轉(zhuǎn)義字符,后面詳細(xì)再解釋。
6.輸出與輸入
在此章示例代碼中,用到了標(biāo)準(zhǔn)庫(kù)的輸出與輸入,分別是cout和cin,讀作c-in、c-out。
cout輸出一個(gè)字符串,cin等待用戶輸入一個(gè)值。
cout << "Hello World!";//輸出Hello World! cout << "123";//123//定義一個(gè)變量a int a; //會(huì)將用戶輸入的值賦值給a cin >> a; //輸入完成后,程序才會(huì)結(jié)束,防止程序一閃而過(guò) return 0;你可以嘗試額外輸出幾句自己寫(xiě)的字符串,還可以嘗試輸出一下引號(hào)。
7.新手錯(cuò)誤
新手遇見(jiàn)錯(cuò)誤,首先可以網(wǎng)上搜索,應(yīng)該很容易解決。或者問(wèn)一下有經(jīng)驗(yàn)的人,下面我列出一些最常見(jiàn)的錯(cuò)誤:
字符分為半角與全角,除了字符串里的字符可以用全角外,一般其他地方都應(yīng)該用半角。半角是英文符號(hào),而全角是中文書(shū)面的符號(hào),觀察一下就知道了,一般的輸入法按shift可以切換全半角,或者切換到英文狀態(tài)再輸入:
| 全角 | 半角 |
| , | , |
| 。 | . |
| “” | "" |
| 【】 | [] |
?還有一個(gè)常見(jiàn)的錯(cuò)誤是忘記結(jié)尾的分號(hào)。
還有一個(gè)錯(cuò)誤是拼寫(xiě)錯(cuò)誤,這個(gè)如果明白單詞的含義后就不太會(huì)記錯(cuò)了,而且上一章所說(shuō)的VAssistX插件可以幫助補(bǔ)全代碼(vs也自帶這個(gè)功能),一般不會(huì)寫(xiě)錯(cuò)。即使寫(xiě)錯(cuò)了,編譯器也會(huì)有報(bào)錯(cuò),很容易定位修復(fù)。
還有一個(gè)錯(cuò)誤是程序一閃而過(guò),誤以為程序沒(méi)有運(yùn)行。不過(guò)使用cin等待用戶輸入就解決了這個(gè)問(wèn)題。
還有一個(gè)比較坑的錯(cuò)誤是,當(dāng)代碼正確生成后,再修改出現(xiàn)錯(cuò)誤后,會(huì)提示彈窗:
這個(gè)時(shí)候應(yīng)該點(diǎn)否,來(lái)看編譯器報(bào)錯(cuò)究竟是什么。否則你改了程序還是運(yùn)行的以前的版本,并且不會(huì)提示報(bào)錯(cuò)。如果不慎點(diǎn)了是,并且勾選了不再顯示此對(duì)話框,可以再【工具】->【選項(xiàng)】->【項(xiàng)目和解決方案】->【生成并運(yùn)行】->【出現(xiàn)生成錯(cuò)誤時(shí)】改為始終生成,而不是啟動(dòng)早期版本(在大學(xué)的時(shí)候不止5個(gè)人問(wèn)過(guò)我這個(gè)問(wèn)題,并且我的同學(xué)認(rèn)真學(xué)習(xí)編程的本來(lái)就沒(méi)有幾個(gè))。
結(jié)語(yǔ)
HelloWorld程序幾乎是每個(gè)程序員第一次所寫(xiě)的代碼,這個(gè)不僅是為了簡(jiǎn)單的入門(mén)理解,更為的是測(cè)試編譯器是否有正常工作。在正確打印HelloWorld后,可以再?lài)L試一下輸出其他文本。
?
總結(jié)
以上是生活随笔為你收集整理的【C++教程】03.第一个程序解析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【C++教程】02.环境配置
- 下一篇: 【pnglib】解析png格式的图像