天天看點

C語言基礎 (3) C語言介紹

01回顧

02 語言介紹

語言是人和人交流,c語言是人和機器交流。

C語言基礎 (3) C語言介紹
C語言基礎 (3) C語言介紹
C語言基礎 (3) C語言介紹
C語言基礎 (3) C語言介紹
C語言基礎 (3) C語言介紹

03_為什麼學c語言

C語言基礎 (3) C語言介紹
C語言基礎 (3) C語言介紹

04_第一個c代碼編譯運作

#include <stdio.h>

int main()

{

  // 這是第一個c代碼

  printf(‘hello world’)

  return 0

}

gcc 01.c

C語言基礎 (3) C語言介紹
C語言基礎 (3) C語言介紹
C語言基礎 (3) C語言介紹

3、 return 0 代表程式正常結束

C語言基礎 (3) C語言介紹

// 使用某個函數前,添加頭檔案

// 1、頭檔案類似于菜單,頭檔案包含函數的聲明,菜單列舉了菜名,

// 函數調用,相當于點菜

// <>通過包含系統的頭檔案(标準的頭檔案),” ” 包含自定義的頭檔案

man 3 printf

(

1是普通的指令

2是系統調用,如open,write之類的(通過這個,至少可以很友善的查到調用這個函數,需要加什麼頭檔案)

3是庫函數,如printf,fread

vi usr/include/stdio.h

// 1、函數調用,printf功能往标準輸出裝置(螢幕)列印内容

// 2、\n代表換行

// 3、函數的調用必須放在{}内部

06 c代碼分析總結

頭檔案什麼時候需要包含?

點菜的時候需要包含菜單,是以用函數的時候就需要包含頭檔案

07 windows通過gcc編譯代碼

windows編譯代碼

1) cd 目錄

2) dir 檢視目錄資訊

3) gcc hello.c 預設在目前路徑,生成a.exe

gcc hello.c -o hello: 生成hello.exe

4) 運作,在windows下運作

   ./a

   或者a.exe

   不能寫./a.exe

cmd

gcc -v

gcc hello.c

gcc hello.c -o hello

08 補充

gcc(gnu compiler collection, gnu 編譯器套件), 是由gnu開發的編譯語言編譯器。gcc原本作為gnu作業系統的官方編譯器,現已被大多數類unix作業系統(如linux、bsd、mac os x 等)采納為标準的編譯器,gcc同樣适用于微軟的windows。

gcc最初用于編譯c語言,随着項目的發展gcc已經成為了能夠編譯c、c++、java、…object c、object c++、go語言的編譯器大家族。

linux編譯的隻能在linux運作 32隻能在32 64隻能在64。

windows編譯隻能在window運作 32的可以在64運作, 64隻能在64運作。

09 system調用指令

man 3 system

system函數的使用

int system(const char* command);

功能:在已經運作的程式中執行另外一個外部程式

參數:外部可執行程式名字

傳回值:不同系統傳回值不一樣

# include <stdio.h>

# include <stdlib.h>

int main(){

printf(‘before sys\n’)

system(‘ls -alh’)    //取決于程式目前所在的目錄

printf(‘after sys\n’)

return 0

11. system調用外部程式

       printf(‘asdsad’)

       system(‘waibu) //外部也是一個編譯好的檔案

       printf(‘after sys’)

13 system不同系統傳回值不一樣

  printf(“before sys\n”)

  // 1 需要頭檔案 #include <stdlib.h>

  // 2 system功能: 調用外部程式

  int a = system(“waibu”)  // .\waibu.exe

  printf(“a = %d\n”,a)

  printf(“after sys\n”)

waibu

  return 250

windows下輸出250

linux下輸出的不是250

結論:c語言所有的庫函數的調用,隻能保證文法是一緻的,但不能保證執行結果是一緻的,同樣的庫函數在不同的作業系統下執行結果可能是一樣的,也可能是不一樣的。

在學習linux發展史時,我們得知linux的發展離不開posix标準,隻要符合這個标準的函數,在不同的系統下執行的結果就可以一直。

unix和linux很多庫函數都是支援posix的,但windows支援的比較差,如果将unix代碼一直到linux一般代價很小,如果把windows代碼一直到unix或者linux就比較麻煩

posix表示可移植作業系統接口(portable operating system interface of unix,縮寫為 posix ),posix标準定義了作業系統應該為應用程式提供的接口标準,是ieee為要在各種unix作業系統上運作的軟體而定義的一系列api标準的總稱,其正式稱呼為ieee 1003,而國際标準名稱為iso/iec 9945。

posix标準意在期望獲得源代碼級别的軟體可移植性。換句話說,為一個posix相容的作業系統編寫的程式,應該可以在任何其它的posix作業系統(即使是來自另一個廠商)上編譯執行。

posix 并不局限于 unix。許多其它的作業系統,例如 dec openvms 支援 posix 标準,尤其是 ieee std. 1003.1-1990(1995 年修訂)或 posix.1,posix.1 提供了源代碼級别的 c 語言應用程式設計接口(api)給作業系統的服務程式,例如讀寫檔案。posix.1 已經被國際标準化組織(international standards organization,iso)所接受,被命名為 iso/iec 9945-1:1990 标準。

14 字元串編碼介紹

1)windows預設支援的中文編碼為gbk,gb2312,ansi,

2)linux預設支援的中文編碼為utf-8(unicode

15 qt調用system

隻在windows有效

calc

mspaint

qt調用system

17 mfc調用system

qt可以用來做界面

mfc( microsoft foundation class) 是微軟出的做界面的,在visual studio裡面使用

18 gcc編譯過程

C語言基礎 (3) C語言介紹

預處理和 連結一定是确定的兩個步驟。 編譯和彙編 是不确定的(有些書本是反過來的)

包含頭檔案的作用:

// 定義一個變量a,類型為整型

int a;

預處理: 宏定義

C語言基礎 (3) C語言介紹

(其實是把左邊的放到右邊了)

*其實可以分步編譯:

C語言基礎 (3) C語言介紹

怎麼記呢? esc iso

gcc -e hello.c -o hello.i

C語言基礎 (3) C語言介紹

預處理:在包含頭檔案的地方把頭檔案放進來。

(頭檔案展開)

編譯:gcc -s hello.i -o hello.s

C語言基礎 (3) C語言介紹

(已經是彙編語言了,生成了彙編檔案)

gcc -c hello.s -o hello.o

C語言基礎 (3) C語言介紹

(已經是目标檔案了,還需要連結一些庫什麼的)

gcc hello.o -o hello

(現在就可以運作了)

C語言基礎 (3) C語言介紹

ldd hello 呈現出需要哪些動态庫

windows:

dependency walker軟體(用這個軟體檢視一下 需要哪些動态庫)

linux:

可以用ldd指令來檢視

19 課堂答疑:動态庫的作用

寫的程式,通常都需要函數調用

1)函數調用類似于點菜

2)函數調用可能需要連結動态庫,隻是點菜,菜從廚房(動态庫)實作

如果把qt的環境變量給關閉了,就不能運作了。

20 gcc編譯過程總結

第一步 預處理 替換.h檔案 這裡沒有文法檢查

第二步 編譯  生成彙編語言

第三步 彙編  生成二進制代碼

第四步 連結  對外部的庫進行連結

21 交換檔案說明

比如寫一個檔案寫了一半沒有儲存關機了,

然後重新 vi 這個檔案的時候會報下面這個錯

C語言基礎 (3) C語言介紹

交換檔案說明:

1) vi寫檔案,沒有儲存就關閉,自動生成一個字尾為.swp交換檔案,

  儲存了前面寫的内容

C語言基礎 (3) C語言介紹

大寫字母r來恢複。

但是:這樣恢複之後每次打開還是會提示這個,需要把這個減緩檔案删除

2)先恢複,再删除

 ls -a rm .xxxx.c.swp -rf

22 寄存器介紹

C語言基礎 (3) C語言介紹
C語言基礎 (3) C語言介紹
C語言基礎 (3) C語言介紹

23 vs反彙編

vs 嵌套彙編代碼(了解)

C語言基礎 (3) C語言介紹
C語言基礎 (3) C語言介紹

vs反彙編:

1.設定斷點

2.

C語言基礎 (3) C語言介紹
C語言基礎 (3) C語言介紹

上面的是windows的示例,

如果在linux下就直接 gcc -esc -iso。。。那一大堆生成hello.s就可以檢視了

不同的編譯器 不同的平台還會有所差異。

24 vs的使用

C語言基礎 (3) C語言介紹

用vs進行c開發時,微軟認為有些操作是不安全的,比如:

C語言基礎 (3) C語言介紹
C語言基礎 (3) C語言介紹

解決方法1:

C語言基礎 (3) C語言介紹
C語言基礎 (3) C語言介紹

25 qt的使用

C語言基礎 (3) C語言介紹
C語言基礎 (3) C語言介紹

通過vs、qt編譯代碼,必須建立工程(項目),把代碼加載到工程後才能編譯運作。

繼續閱讀