2020年度鑽石C++C編程
一提到語言這個詞語,天然會想到的是像英語、漢語等這樣的天然語言,由於它是人和人交換信息不可缺乏的工具。windows
而今天計算機遍及了咱們生活的每個角落,除了人和人的相互交流以外,咱們必須和計算機角落。緩存
用什麼的什麼樣的方式和計算機作最直接的交流呢?人們天然想到的是最古老也最方便的方式——語言,而C語言就是人和計算機交流的一種語言。網絡
語言是用來交流溝通的。有一方說,有另外一方聽,必須有兩方參與,這是語言最重要的功能:
說的一方傳遞信息,聽的一方接收信息;
說的一方下達指令,聽的一方遵循命令作事情。2020年度鑽石C++C提娶碼:xb2k 框架
語言是人和人交流,C語V(cmL46679910)言是人和機器交流。只是,人能夠不聽另一我的,可是,計算機是無條件服從。編程語言
語言有獨特的語法規則和定義,雙方必須遵循這些規則和定義才能實現真正的交流。編輯器
1) 優勢
代碼量小
執行速度快
功能強大
編程自由ide
2) 缺點
寫代碼實現週期長
可移植性較差
過於自由,經驗不足易出錯
對平臺庫依賴較多函數
C語言的應用極其普遍,從網站後臺,到底層操做系統,從多媒體應用到大型網絡遊戲,都可使用C語言來開發:
C語言能夠寫網站後臺程序
C語言能夠專門針對某個主題寫出功能強大的程序庫
C語言能夠寫出大型遊戲的引擎
C語言能夠寫出另外一個語言來
C語言能夠寫操做系統和驅動程序,而且只能用C語言編寫
任何設備只要配置了微處理器,就都支持C語V(cmL46679910)言。從微波爐到手機,都是由C語言技術來推進的工具
C語言僅有32個關鍵字,9種控制語句,34種運算符,卻能完成無數的功能:
#include <stdio.h>
int main()
{
//這是第一個C語言代碼
printf("hello world\n");
return 0;
}
C語言的源代碼文件是一個普通的文本文件,但擴展名必須是.c。
1) gcc編譯器介紹
編輯器(如vi、記事本)是指我用它來寫程序的(編輯代碼),而咱們寫的代碼語句,電腦是不懂的,咱們須要把它轉成電腦能懂的語句,編譯器就是這樣的轉化工具。就是說,咱們用編輯器編寫程序,由編譯器編譯後才能夠運行!
編譯器是將易於編寫、閱讀和維護的高級計算機語言翻譯爲計算機能解讀、運行的低級機器語言的程序。
gcc(GNU Compiler Collection,GNU 編譯器套件),是由 GNU 開發的編程語言編譯器。gcc本來做爲GNU操做系統的官方編譯器,現已被大多數類Unix操做系統(如Linux、BSD、Mac OS X等)採納爲標準的編譯器,gcc一樣適用於微軟的Windows。
gcc最初用於編譯C語言,隨着項目的發展gcc已經成爲了可以編譯C、C++、Java、Ada、fortran、Object C、Object C++、Go語言的編譯器你們族。
編譯命令格式:
gcc [-option1] ... <filename>
g++ [-option1] ... <filename>
命令、選項和源文件之間使用空格分隔
一行命令中能夠有零個、一個或多個選項
文件名能夠包含文件的絕對路徑,也可使用相對路徑
若是命令中不包含輸出可執行文件的文件名,可執行文件的文件名會自動生成一個默認名,Linux平臺爲a.out,Windows平臺爲a.exe
gcc、g++編譯經常使用選項說明:
選項 含義
-o file 指定生成的輸出文件名爲file
-E 只進行預處理
-S(大寫) 只進行預處理和編譯
-c(小寫) 只進行預處理、編譯和彙編
2) Windows平臺下gcc環境配置
windows命令行界面下,默認是沒有gcc編V(cmL46679910)譯器,咱們須要配置一下環境。因爲咱們安裝了Qt,Qt是一個集成開發環境,內部集成gcc編譯器,配置一下環境變量便可使用gcc。
a)進入Qt安裝目錄:
b)拷貝gcc所在的路徑(不一樣安裝目錄有所差別)
C:\Qt\Qt5.5.0\Tools\mingw492_32\bin
c) 設置windows環境變量
計算機(右擊)-> 屬性:
若是是win7,雙擊Path後,把拷貝的路徑追加到後面,路徑之間須要英文」 ; 」分隔:
若是是win10,界面作得友好一下,新建添加路徑便可:
d)測試gcc命令:
3) Windows平臺下編譯代碼
1) include頭文件包含
#include的意思是頭文件包含,#include <stdio.h>表明包含stdio.h這個頭文件
使用C語言庫函數須要提早包含庫函數對應的頭文件,如這裏使用了printf()函數,須要包含stdio.h頭文件
能夠經過man 3 printf查看printf所需的頭文件
#include< > 與 #include ""的區別:
< > 表示系統直接按系統指定的目錄檢索
"" 表示系統先在 "" 指定的路徑(沒寫路徑表明當前路徑)查找頭文件,若是找不到,再按系統指定的目錄檢索
stdio.h是在操做系統的系統目錄下:
2) main函數
一個完整的C語言程序,是由一個、且只能有一個main()函數(又稱主函數,必須有)和若干個其餘函數結合而成(可選)。
main函數是C語言程序的入口,程序是從main函數開始執行。
3) {} 括號,程序體和代碼塊
{}叫代碼塊,一個代碼塊內部能夠有一條或者多條語句
C語言每句可執行代碼都是";"分號結尾
全部的#開頭的行,都表明預編譯指令,預編譯指令行結尾是沒有分號的
全部的可執行語句必須是在代碼塊裏面
4) 註釋
//叫行註釋,註釋的內容編譯器是忽略的,註釋主要的做用是在代碼中加一些說明和解釋,這樣有利於代碼的閱讀
/**/叫塊註釋
塊註釋是C語言標準的註釋方法
行註釋是從C++語言借鑑過來的
5) printf函數
printf是C語言庫函數,功能是向標準輸出設備輸出一個字符串
printf(「hello world\n」);//\n的意思是回車換行
6) return語句
return表明函數執行完畢,返回return表明函數的終止
若是main定義的時候前面是int,那麼return後面就須要寫一個整數;若是main定義的時候前面是void,那麼return後面什麼也不須要寫
在main函數中return 0表明程序執行成功,return -1表明程序執行失敗
int main()和void main()在C語言中是同樣的,但C++只接受int main這種定義方式
#include <stdlib.h>
int system(const char *command);
功能:在已經運行的程序中執行另一個外部程序
參數:外部可執行程序名字
返回值:
成功:0
失敗:任意數字
示例代碼:
#include <stdio.h>
#include <stdlib.h>
int main()
{
//system("calc"); //windows平臺
system("ls"); //Linux平臺, 須要頭文件#include <stdlib.h>
return 0;
}
C代碼編譯成可執行程序通過4步:
1)預處理:宏定義展開、頭文件展開、條件編譯等,同時將代碼中的註釋刪除,這裏並不會檢查語法
2)編譯:檢查語法,將預處理後文件編譯生成彙編文件
3)彙編:將彙編文件生成目標文件(二進制文件)
4)連接:C語言寫的程序是須要依賴各類庫的,因此編譯以後還須要把庫連接到最終的可執行程序中去
1) 分步編譯
預處理:gcc -E hello.c -o hello.i
編 譯:gcc -S hello.i -o hello.s
匯 編:gcc -c hello.s -o hello.o
鏈 接:gcc hello.o -o hello
選項 含義
-E 只進行預處理
-S(大寫) 只進行預處理和編譯
-c(小寫) 只進行預處理、編譯和彙編
-o file 指定生成的輸出文件名爲 file
文件後綴 含義
.c C 語言文件
.i 預處理後的 C 語言文件
.s 編譯後的彙編文件
.o 編譯後的目標文件
2) 一步編譯
gcc hello.c -o demo(V(cmL46679910)仍是通過:預處理、編譯、彙編、連接的過程):
Windows平臺下,須要相應軟件(Depends.exe):
寄存器是CPU內部最基本的存儲單元
CPU對外是經過總線(地址、控制、數據)來和外部設備交互的,總線的寬度是8位,同時CPU的寄存器也是8位,那麼這個CPU就叫8位CPU
若是總線是32位,寄存器也是32位的,那麼這個CPU就是32位CPU
有一種CPU內部的寄存器是32位的,但總線是16位,準32爲CPU
全部的64位CPU兼容32位的指令,32位要兼容16位的指令,因此在64位的CPU上是能夠識別32位的指令
在64位的CPU構架上運行了64位的軟件操做系統,那麼這個系統是64位
在64位的CPU構架上,運行了32位的軟件操做系統,那麼這個系統就是32位
64位的軟件不能運行在32位的CPU之上
8位 16位 32位 64位
A AX EAX RAX
B BX EBX RBX
C CX ECX RCX
D DX EDX RDX
按與CPU遠近來分,離得最近的是寄存器,而後緩存(CPU緩存),最後內存。
CPU計算時,先預先把要用的數據從硬盤讀到內存,而後再把即將要用的數據讀到寄存器。因而 CPU<--->寄存器<--->內存,這就是它們之間的信息交換。
那爲何有緩存呢?由於若是常常操做內存中的同一址地的數據,就會影響速度。因而就在寄存器與內存之間設置一個緩存。
由於從緩存提取的速度遠高於內存。固然緩存的價格確定遠遠高於內存,否則的話,機器裏就沒有內存的存在。
由此能夠看出,從遠近來看:CPU〈---〉寄存器〈---> 緩存 <---> 內存。
#include <stdio.h>
int main()
{
//定義整型變量a, b, c
int a;
int b;
int c;
__asm
{
mov a, 3 //3的值放在a對應內存的位置
mov b, 4 //4的值放在b對應內存的位置
mov eax, a //把a內存的值放在eax寄存器
add eax, b //eax和b相加,結果放在eax
mov c, eax //eax的值放在c中
}
printf("%d\n", c);//把c的值輸出
return 0;//成功完成
}
#include <stdio.h>
int main()
{
//定義整型變量a, b, c
int a;
int b;
int c;
a = 3;
b = 4;
c = a + b;
printf("%d\n", c);//把c的值輸出
return 0;//成功完成
}
1)設置斷點F9
2)選擇反彙編按鈕
3)根據彙編代碼分析程序
集成開發環境(IDE,Integrated Development Environment )是用於提供程序開發環境的應用程序,通常包括代碼編輯器、編譯器、調試器和圖形用戶界面工具。集成了代碼編寫功能、分析功能、編譯功能、調試功能等一體化的開發軟件服務套。全部具有這一特性的軟件或者軟件套(組)均可以叫集成開發環境。
Qt Creator是跨平臺的 Qt IDE, Qt Creator 是 Qt 被 Nokia 收購後推出的一款新的輕量級集成開發環境(IDE)。此 IDE 可以跨平臺運行,支持的系統包括 Linux(32 位及 64 位)、Mac OS XV(cmL46679910) 以及 Windows。根據官方描述,Qt Creator 的設計目標是使開發人員可以利用 Qt 這個應用程序框架更加快速及輕易的完成開發任務。
快捷鍵 含義Ctrl + i 自動格式化代碼Ctrl + / 註釋/取消註釋Alt + Enter 自動完成類函數定義F4 .h 文件和對應.cpp 文件切換F9 設置斷點F5 調試運行Ctrl + r 編譯,但不調試運行Ctrl + b 編譯,不運行F10 next調試F11 step調試