CLion新建/編譯/執(zhí)行 C++ 程序

C++ 是一種中級語言,它是由 Bjarne Stroustrup 于 1979 年在貝爾實(shí)驗(yàn)室開始設(shè)計(jì)開發(fā)的。C++ 進(jìn)一步擴(kuò)充和完善了 C 語言,是一種面向?qū)ο蟮某绦蛟O(shè)計(jì)語言。C++ 可運(yùn)行于多種平臺上,如 Windows、MAC 操作系統(tǒng)以及 UNIX 的各種版本。

本教程通過JetBrains CLion 和GCC 以及CMake編譯工具來講解 C++ 編程語言。

文中代碼github地址

C++ 簡介

C++ 是一種靜態(tài)類型的、編譯式的、通用的、大小寫敏感的、不規(guī)則的編程語言,支持過程化編程、面向?qū)ο缶幊毯头盒途幊獭?/strong>

C++ 被認(rèn)為是一種中級語言,它綜合了高級語言和低級語言的特點(diǎn)。

C++ 是由 Bjarne Stroustrup 于 1979 年在新澤西州美利山貝爾實(shí)驗(yàn)室開始設(shè)計(jì)開發(fā)的。C++ 進(jìn)一步擴(kuò)充和完善了 C 語言,最初命名為帶類的C,后來在 1983 年更名為 C++。

C++ 是 C 的一個(gè)超集,事實(shí)上,任何合法的 C 程序都是合法的 C++ 程序。

注意:使用靜態(tài)類型的編程語言是在編譯時(shí)執(zhí)行類型檢查,而不是在運(yùn)行時(shí)執(zhí)行類型檢查。

面向?qū)ο蟪绦蛟O(shè)計(jì)

C++ 完全支持面向?qū)ο蟮某绦蛟O(shè)計(jì),包括面向?qū)ο箝_發(fā)的四大特性:

  • 封裝
  • 抽象
  • 繼承
  • 多態(tài)

標(biāo)準(zhǔn)庫

標(biāo)準(zhǔn)的 C++ 由三個(gè)重要部分組成:

  • 核心語言,提供了所有構(gòu)件塊,包括變量、數(shù)據(jù)類型和常量,等等。
  • C++ 標(biāo)準(zhǔn)庫,提供了大量的函數(shù),用于操作文件、字符串等。
  • 標(biāo)準(zhǔn)模板庫(STL),提供了大量的方法,用于操作數(shù)據(jù)結(jié)構(gòu)等。

ANSI 標(biāo)準(zhǔn)

ANSI 標(biāo)準(zhǔn)是為了確保 C++ 的便攜性 —— 您所編寫的代碼在 Mac、UNIX、Windows、Alpha 計(jì)算機(jī)上都能通過編譯。

由于 ANSI 標(biāo)準(zhǔn)已穩(wěn)定使用了很長的時(shí)間,所有主要的 C++ 編譯器的制造商都支持 ANSI 標(biāo)準(zhǔn)。

首先安裝與配置CLion:

文中不去講解,安裝與配置傳送門

完成后如下圖:

20190130101024.png

之后CLion新建項(xiàng)目:

20190130093800.png

項(xiàng)目建立完成后出現(xiàn)如下文件與結(jié)構(gòu)

20190130093917.png

運(yùn)行程序,打印結(jié)果如下:

E:\EclipseWorkspace\DailyCode\CppCodes\cmake-build-debug\CppCodes.exe
Hello, World!

Process finished with exit code 0

我們也可以用工具進(jìn)行手動編譯:

如果出現(xiàn):'g++' 不是內(nèi)部或外部命令,也不是可運(yùn)行的程序 或批處理文件。

請按照此方法解決

最簡單的編譯方式:

$ g++ main.cpp

由于命令行中未指定可執(zhí)行程序的文件名,編譯器采用默認(rèn)的 a.out。程序可以這樣來運(yùn)行:

$ ./a.out
Hello, world!

通常我們使用 -o 選項(xiàng)指定可執(zhí)行程序的文件名,以下實(shí)例生成一個(gè) helloworld 的可執(zhí)行文件:

$ g++ main.cpp -o helloworld

執(zhí)行 helloworld:

$ ./helloworld
Hello, world!

如果是多個(gè) C++ 代碼文件,如 main.cpp、notmain.cpp,編譯命令如下:

$ g++ main.cpp notmain.cpp -o helloworld

生成一個(gè) helloworld可執(zhí)行文件。

g++ 有些系統(tǒng)默認(rèn)是使用 C++98,我們可以指定使用 C++11 來編譯 main.cpp 文件:

g++ -g -Wall -std=c++11 main.cpp

你可以用 "\n" 代替以上代碼里的 endl

"\n" 表示一個(gè)字符串,只有一個(gè)數(shù)據(jù)是回車符。

'\n' 表示一個(gè)字符。

這兩個(gè)在輸出上是一樣的!

關(guān)于 endl與'\n' 區(qū)別:

  • 1、在 C++ 中,終端輸出換行時(shí),用 cout<<......<<endl 與 "\n" 都可以,這是初級的認(rèn)識。但二者有小小的區(qū)別,用 endl 時(shí)會刷新緩沖區(qū),使得棧中的東西刷新一次,但用 "\n" 不會刷新,它只會換行,盞內(nèi)數(shù)據(jù)沒有變化。但一般情況,二者的這點(diǎn)區(qū)別是很小的,在大的程序中可能會用到。建議用 endl 來換行。

  • 2、endl 除了寫 '\n' 進(jìn)外,還調(diào)用 flush 函數(shù),刷新緩沖區(qū),把緩沖區(qū)里的數(shù)據(jù)寫入文件或屏幕.考慮效率就用 '\n'。

  • 3、cout *lt;< endl; 除了往輸出流中插入一個(gè) '\n' 還有刷新輸出流的作用。

cout << endl; 
等價(jià)于: 
\cout << '\n' << flush;

在沒有必要刷新輸出流的時(shí)候應(yīng)盡量使用 cout << '\n', 過多的 endl 是影響程序執(zhí)行效率低下。

在 C++ 中,分別使用.h 和.cpp 來定義一個(gè)類。

.h 中存放類的聲明,函數(shù)原型(放在類的聲明中)。

.cpp 存放函數(shù)體。

也就是說,一個(gè)存放聲明(declaration),一個(gè)存放定義(definition)。

如果我們在一個(gè)頭文件里聲明了一個(gè)函數(shù),當(dāng)我們需要定義這個(gè)函數(shù)(這個(gè)定義是唯一的,也就是只能定義一次),或者需要使用這個(gè)函數(shù)時(shí),我們在 cpp 中需要 include 這個(gè)頭文件。

同樣地,如果我們在一個(gè)頭文件里聲明了一個(gè)類,當(dāng)我們需要定義類里的成員函數(shù),或者我們需要使用這個(gè)類時(shí),我們在 cpp 中需要 include 這個(gè)頭文件。

對于類的設(shè)計(jì)者來說,頭文件就像他們和類的使用者的一個(gè)合同,編譯器會強(qiáng)化這一合同,它會要求你在使用這些類里的函數(shù)或結(jié)構(gòu)時(shí)必須要聲明。

g++ 常用命令選項(xiàng)

選項(xiàng) 解釋
-ansi 只支持 ANSI 標(biāo)準(zhǔn)的 C 語法。這一選項(xiàng)將禁止 GNU C 的某些特色, 例如 asm 或 typeof 關(guān)鍵詞。
-c 只編譯并生成目標(biāo)文件。
-DMACRO 以字符串"1"定義 MACRO 宏。
-DMACRO=DEFN 以字符串"DEFN"定義 MACRO 宏。
-E 只運(yùn)行 C 預(yù)編譯器。
-g 生成調(diào)試信息。GNU 調(diào)試器可利用該信息。
-IDIRECTORY 指定額外的頭文件搜索路徑DIRECTORY。
-LDIRECTORY 指定額外的函數(shù)庫搜索路徑DIRECTORY。
-lLIBRARY 連接時(shí)搜索指定的函數(shù)庫LIBRARY。
-m486 針對 486 進(jìn)行代碼優(yōu)化。
-o FILE 生成指定的輸出文件。用在生成可執(zhí)行文件時(shí)。
-O0 不進(jìn)行優(yōu)化處理。
-O 或 -O1 優(yōu)化生成代碼。
-O2 進(jìn)一步優(yōu)化。
-O3 比 -O2 更進(jìn)一步優(yōu)化,包括 inline 函數(shù)。
-shared 生成共享目標(biāo)文件。通常用在建立共享庫時(shí)。
-static 禁止使用共享連接。
-UMACRO 取消對 MACRO 宏的定義。
-w 不生成任何警告信息。
-Wall 生成所有警告信息。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容