liunx學習第四天
今天同樣是學習liunx中gcc的編譯以及c語言一些重點需要明白的基礎問題。
一、gcc指令的使用
1、語言的發展
由二進位制語言(機器語言)——組合語言(用符號表示一組操作)——自然語言(以語句為單位進行一組操作)——…
2、C語言屬於說明語言
C語言是一種中級語言,它具備彙編的特性(直接操作硬體速度快)同時也具備高階語言的特性(可移植性)
3、計算機識別的語言
首先要了解計算機唯一可以識別的是機器語言(也就是二進位制語言),也就是說不管說明語言想要被計算器所執行就必須要轉換成機器語言(編譯器:把原始碼編譯成計算機可以執行的程式碼)。
那麼對於不同的裝置,同等的程式碼可以經過不同編譯器編譯成裝置可執行的檔案。對於C語言而言gcc是Linux下常用於編譯的C語言的編譯器。
4、C程式編譯的步驟
步驟 | 內容 | 指令 |
---|---|---|
預處理 | 處理#開頭的內容,進行替換,去掉註釋,生成預處理檔案 (字尾 .i ) | gcc -E |
編譯 | 對程式碼進行處理編譯,生成彙編檔案(字尾 .s ) | gcc - S |
彙編 | 把彙編檔案編譯成目標檔案(字尾 .o ) | gcc -c |
連結 | 把多個目標資料夾按一個要求規則組成一共可執行程式,生成可執行檔案(無後綴) | gcc(預設生成a.out) |
對生成的檔案重新命名 | gcc 編譯的檔案 -o 改的檔名 |
(注:在編譯過程中只要使用gcc 就預設執行了預處理,編譯,彙編,連結的過程)
5、liunx下程式的執行
linxu下想執行程式,只要在終端敲可執行檔名(帶上檔案的相對路徑或絕對路徑)
6、liunx開關網絡卡的指令
(1)ifdown eth0 關網絡卡
(2)ifdown eth0 開網絡卡
二、c語言一些重點了解
1、標頭檔案的包含方式
(1)< > :用< >包含標頭檔案,標頭檔案的路徑一定在/usr/include/中,在使用時會去此路徑中去找,找不到檔案就無法編譯。(一般系統檔案用< >)
(2)" “:用” “包含標頭檔案,標頭檔案的路徑在/usr/include/中或者在當前目錄下,在使用時會先在當前目錄下查詢再去、usr/include/路徑中去找,2個路徑都找不到檔案就無法編譯。(一般自己編輯的檔案用” “)
(注:”…/stdio.h"是先去此目錄的前一個目錄找stdio.h檔案,再去usr/include/尋找)(stdo.h是C語言的標準輸入輸出標頭檔案)
2、main的注意事項
(1)main函式有返回值,返回值是int(整型),用於表示程式結束狀態。返回0 表示正常結束,返回其他值表示異常結束。
(2)C語言有且僅有一個main函式
(3)序是以main函式開始執行的
3、編寫規範
(1)“ {”下面的內容與其要有4個空格
(2)單詞與單詞間要有空格
(3)不 同邏輯間要有空行
三、記憶體
1、
2、記憶體是怎麼分配的
記憶體給每一個位元組分配了一個記憶體地址,每個編號的位數是固定的且以二進位制編號。
32位系統的編號是32個也就是4B,範圍000…(32個0)——11111…(32個1)總共2^32B=4GB
64位系統編號是64個也就是8B,範圍000…(64個0)——11111…(64個1)總共2^64B
3、資料存催
記憶體是以二進位制存催的,以單個字元為例:
(1)無符號數:只有正數,不帶符號位
範圍:0——255
(2)有符號數:帶正負號,首位為符號位(0表示正數,1表示負數)
範圍:-128——127
小注意:有符號數的正數在資料中存催的就是資料本身,負數是它的補碼
(補碼:保留符號位,對剩下的資料取反+1)
對於有符號數在一個位元組內:0在記憶體中的表示-128;記憶體中的1111 1111 是指-1;127+1=-128