寫給前端同學的C++入門教程(一):概述和環境搭建

說明:本人是前端er,因為最近對 UE4(一個遊戲開發引擎)產生了興趣,而這個引擎源開發遊戲時需要用到 C++ ,所以就開始入坑 C++ 了。現將自己學習 C++ 的筆記整理並分享出來,以便一些想入門 C++ 的朋友一起學習,將會以系列教程的的形式來編寫,這是第一篇。

C++ 是什麼?

我們都知道,目前的高級程式語言主要分成兩種,一個是面向過程的比如 C,一個是面向對象的比如 Java。而 C++ 時同時整合了這兩種特性的語言,在C語言基礎上添加的類代表的面向對象。另外,C++模板還支援支援的泛型編程(後面會介紹)。至於 C++ 發展歷史,這裡不做介紹,大家可以自行查找。

在 C++ 最初發布的時候,在編譯過程分成兩段的,先是把 C++ 編譯成 C,再把 C 編譯成機器程式碼的,就像我們前端寫 TS 需要先將 TS 轉換成 JS 後瀏覽器才能識別一樣。但是現在的編譯器一般都不需要先將C++轉換成 C 的,而是一步到位的。

環境搭建

如果是使用 windows 平台,常用的編譯器有 visual studio , visual c++6.0 ,borland c++ 和 code block 等。 我相信好多朋友對 visual c++6.0 , borland c++ 和 code block 肯定都不陌生,這是因為大學做課程設計時,老師經常推薦給我們的編譯器,但是我不推薦,原因有二,第一,介面長得太丑了,起碼是20年前的介面風格,第二,不夠智慧,比如自動補全或錯誤提示等都做得不好。至於 visual studio 確實很強大,但是對於新手也不太推薦,畢竟剛開始只是寫 helloworld 級別的,如果使用這個就有點殺雞用牛刀的感覺了。那怎麼辦呢?

我推薦的做法是,在 vscode(注意不是 visual studio)中編寫 C++ 源碼,然後使用 gcc 來編譯源碼,即把編輯器和編譯器分開來用。

如果是使用 ubuntu 等 linux 系統,默認是裝了 gcc 的,這裡也不詳細展開。本文主要講的是 windows 平台下的搭建。

首先,安裝 vscode ,同時要裝上 C/C++ 插件,它會有自動補全和錯誤檢測等功能(如果沒有提示,可以安裝 gcc 後再回頭不試試)。

比如,我平時寫前端,習慣了用 var 來聲明變數,則會有如下提示,因為 c++ 是沒有 var 標誌符的:

滑鼠移上去就會顯示詳細的錯誤資訊:

還有關鍵字的自動補全,比如我們定義一個 double 類型的變數,輸入 doub 就會有很多的選項:

然後,再來安裝 gcc 編譯器。windows 平台安裝可以安裝 mingw。可以到這裡下載:MinGW-w64 – for 32 and 64 bit Windows。往下稍微翻一下,選 x86_64-posix-seh。

提示:最好不要選擇 MinGW-W64 Online Installer , 因為中國網路被牆的原因,在線安裝有很大機率會安裝失敗。

下載完安裝包之後,然後解壓,你會發現它裡面的目錄結構如下:

接下來,還需要配置 path 路徑,假如我解壓到了 C 盤的 mingw 目錄,則在環境變數 Path 中添加如下路徑:

C:\mingw\bin

配置完成之後 ,打開命令行工具,cmd 或者 powsershell 都可以,輸入 gcc -v

如果看到上面的資訊,則說明我們的 gcc 已經配置成功了。如果沒有,則檢查一下你的 path 路徑正不正確,或重啟一下電腦試試。

現在編輯器和編譯器我們都搭好了,可以快樂的來寫 Hello World! 啦。

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

然後在當前目錄的終端中輸入 g++ main.cpp,就會發現當前目錄下多了一個 a.exe 文件。,然後,再到終端中輸入 ./a.exe 就可以執行該文件,並有 Hello World! 輸出了。當然,編譯和運行也可以合併成一條命令 g++ main.cpp && ./a.exe,如下:

這段程式碼也很簡單,首先是 #include 預處理指令引入 iostream 這個頭文件,然後在 main 函數中輸出 Hello World! 。iostream 這個是標準輸入輸出流的頭文件,我們下面使用 std::cout 就在這裡面定義的。

OK,這一章節就寫到這裡,如果有什麼疑問的大家可以在評論區交流討論哈~。

最後,網上也有很多教程是關於如何把 vscode 配置成可以編譯 C++ 的,但是我覺得沒有必要,我們就只使用 vscode 作為書寫程式碼的編輯器就夠了,編譯我們使用命令行工具就行。

Tags: