C語言概述
1.什么是C語言
C語言就是人和計算機交流的一種語言
語言是用來交流溝通的,有一方說,有另一方聽,必須有兩方參與,這是語言最重要的功能:
- 說的一方傳遞資訊,聽的一方接收資訊;
- 說的一方下達指令,聽的一方遵循命令做事情,
語言是人和人交流,C語言是人和機器交流,只是,人可以不聽另外一個人,但是,計算機是無條件服從,
語言有獨特的語法規則和定義,雙方必須遵循這些規則和定義才能實作真正的交流,
最早的時候使用的是機器語言(01001),后面發展為匯編語言,匯編語言相對于機器語言易懂一些,匯編語言依賴于暫存器,不同的機器可能沒有暫存器,之后出現了高級語言
編譯:將高級語言轉換為計算機能夠識別的二進制指令,
2.C語言特點
2.1優點
- 代碼量小
- 執行速度快
- 功能強大
- 編程自由
2.2缺點
- 寫代碼實作周期長
- 可移植性差
- 過于自由,經驗不足易出錯
- 對平臺庫依賴較多
2.3C語言應用領域
C語言的應用極其廣泛,從網站后臺,到底層作業系統,從多媒體應用到大型網路游戲,均可使用C語言來開發:
- C語言可以寫網站后臺程式
- C語言可以專門針對某個主題寫出功能強大的程式庫
- C語言可以寫出大型游戲的引擎
- C語言可以寫出另一個語言來
- C語言可以寫作業系統和驅動程式,并且只能用C語言撰寫
- 任何設備只要配置了微處理器,就都支持C語言,從微波爐到手機,都是由C語言技術來推動的
2.4C語言簡潔
C語言僅有32個關鍵字,9種控制陳述句,34種運算子,卻能完成無數的功能:



3.書寫第一個C語言程式
3.1 Visual Studio基礎使用
- 使用Visual studio 2019集成開發環境,先創建專案,選擇代碼檔案夾
- 解決方案資源管理器管理代碼

- 創建的代碼放在專案中,在解決方案資源管理器中的源檔案中創建.C檔案,源檔案右擊-->添加-->新建項-->選擇C++-->更改檔案后綴-->添加


書寫第一個代碼
// 預處理指令,在預編譯時處理
// #include 包含stdio.h頭檔案
// stdio.h頭檔案包含了一些函式
// 兩個//表示注釋
// 符號與()結合,代表一個函式
// main() main函式也稱作是主函式,整個程式中有且僅有一個main函式,程式從main函式開始執行
// int代表main函式結束之后的回傳值型別,C語言中可以不寫回傳值,在C++中必須要寫
// return代表結束這個函式,回傳值,回傳值的型別和函式定義時的回傳值型別一致
// {}里面的是函式體,所有需要執行的代碼必須寫在{}中
// 每一條代碼必須以分號(;)結尾
// printf是一個庫函式,printf()就是函式呼叫
#include <stdio.h>
int main()
{
printf("Hello world\n");//列印到終端
printf("Evan zhang");
return 0;
}
- 執行代碼,ctrl+F5

3.2 使用文本編輯器撰寫代碼
- C代碼先編譯后執行,首先將C代碼保存,windows命令列界面下,默認是沒有gcc編譯器,我們需要配置一下環境,由于我們安裝了Qt,Qt是一個集成開發環境,內部集成gcc編譯器,配置一下環境變數即可使用gcc,

- 編譯代碼,安裝Qt之后,在Qt安裝目錄(D:\Qt\Tools\mingw1120_64\bin)下,有gcc.exe是進行編譯代碼的

- wind+R-->cmd-->打開終端,使用gcc -v查看gcc是否可用,如果找不到就說明沒有配置環境變數

- 如果想讓計算機能夠執行gcc,比如讓計算機能夠找到gcc--就是配置環境變數(配置環境變數之后要重啟終端)



windows中的幾個命令
- cls 清屏
- dir 查看當前檔案夾下有哪些檔案
編譯代碼
gcc 檔案絕對路徑 -o 目標檔案

上述方法要寫路徑,比較麻煩,可以在源代碼檔案夾下打開cmd,cmd直接切換到該目錄下,這樣就不用添加路徑了

gcc 源檔案 -o 編譯檔案名
- 直接使用編譯后的檔案進行執行代碼

4.c語言編譯步驟
C代碼編譯成可執行程式經過4步:
1)預處理:宏定義展開、頭檔案展開、條件編譯等,同時將代碼中的注釋洗掉,這里并不會檢查語法
2)編譯:檢查語法,將預處理后檔案編譯生成匯編檔案
3)匯編:將匯編檔案生成目標檔案(二進制檔案)
4)鏈接:C語言寫的程式是需要依賴各種庫的,所以編譯之后還需要把庫鏈接到最終的可執行程式中去
4.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 | 編譯后的目標檔案 |
1. 預處理


- include可以包含任何檔案,可以是.h檔案,也可以包含.c檔案;.h檔案是頭檔案
#include <stdio.h>
#include <a.c>
- 注釋在編譯完之后被洗掉,注釋有兩種方法,單行注釋//,多行注釋/**/
- 預處理時會將宏替換,將宏用后面的運算式進行替換
- c語言每條陳述句都有分號,如果缺失分號,是可以進行預處理的,預處理的時候是不會檢查語法錯誤的
#include <stdio.h>
#define PI 3.14 // #define表示定義一個宏
int main()
{
printf("Hello world %lf\n",PI);//列印到終端
printf("Evan zhang");
return 0;
}

- 條件編譯,可以用來注釋,在編譯的時候選擇性的編譯
#include <stdio.h>
#define PI 3.14 // #define表示定義一個宏
int main()
{
#if 0 // 不成立,中間內容不進行編譯,#if 1進行編譯
printf("Hello world %lf\n",PI);//列印到終端
printf("Evan zhang");
#endif
return 0;
}


2. 編譯
將預處理檔案編譯成匯編檔案(.s檔案),編譯會檢查語法錯誤
gcc -S hello.i -o hello.s
3. 匯編
將匯編檔案轉換為二進制檔案(.o)
gcc -c hello.s -o hello.o
4. 鏈接
二進制檔案是執行不了的,需要進行鏈接,鏈接需要設定運行的環境比如堆和堆疊的空間,還有一些庫檔案
gcc hello.o -o hello


5.system庫函式
作用:在程式中啟動另外一個程式
引數:待啟動程式的路徑名(有些程式在環境變數中能找到,不用加路徑)
#include <stdio.h>
#include <stdlib.h>
int main()
{
//system啟動程式,如果這個程式系統在環境變數中能找到,不用加路徑
//如果環境變數中找不到,需要加路徑
//windows路徑以\\或/進行分割
//c語言中\表示轉義字符,代表特殊含義
system("D:\\LXmusic_install\\lx-music-desktop\\lx-music-desktop.exe");
printf("Hello world\n");//列印到終端
printf("Evan zhang");
system("pause"); // pause程式的作用是等待用戶輸入任意按鍵
return 0;
}
6.CPU內部結構與暫存器(了解)
6.1 64位和32位系統區別
- 暫存器是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之上
- GPU主要用于運算浮點型數字運算

- 64位的總線也不會訪問到2^64次方的地址
- 暫存器就是存cpu運算所需要的資料
6.2暫存器名稱
| 8位 | 16位 | 32位 | 64位 |
|---|---|---|---|
| A | AX | EAX | RAX |
| B | BX | EBX | RBX |
| C | CX | ECX | RCX |
| D | DX | EDX | RDX |
6.3暫存器\快取\記憶體之間的關系
按與CPU遠近來分,離得最近的是暫存器,然后快取(CPU快取),最后記憶體,
CPU計算時,先預先把要用的資料從硬碟讀到記憶體,然后再把即將要用的資料讀到暫存器,于是 CPU<--->暫存器<--->記憶體,這就是它們之間的資訊交換,
那為什么有快取呢?因為如果經常操作記憶體中的同一址地的資料,就會影響速度,于是就在暫存器與記憶體之間設定一個快取,
因為從快取提取的速度遠高于記憶體,當然快取的價格肯定遠遠高于記憶體,不然的話,機器里就沒有記憶體的存在,
由此可以看出,從遠近來看:CPU〈---〉暫存器〈---> 快取 <---> 記憶體,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/546522.html
標籤:其他
上一篇:【牛客】8 企業真題
