Objective C學習準備 C語言2

2022-08-31 12:24:08 字數 2744 閱讀 9995

本章重點:c語言標頭檔案。

用命令列編譯c檔案我們已經知道了

簡單談一下他的編譯過程..

首先我們建立了test.c的c檔案 也就是原始檔, 接著預編譯,再由編譯器編譯為彙編**,

彙編器把彙編**編譯為目標檔案(.o),最後由聯結器把所有目標檔案與庫檔案連線起來生成可執行檔案

原始檔->預編譯檔案->彙編**檔案->目標檔案->鏈結後生成可執行檔案;

下面學習標頭檔案與實現檔案的意義

我們都知道c語言程式設計第一行是什麼呢

1 #include 2

intmain()

是的,是#include匯入標頭檔案  大家可以試試把第一行去掉

gcc 編譯是不是error了?錯誤提示告訴你printf函式不存在  是的,這個列印輸出只是庫檔案裡的乙個方法,所以必須導入庫檔案。

如果我們自己編譯的程式有幾千行甚至更多..都寫在乙個test.c那麼維護起來是不是很麻煩?**重用性也很低..

對於這種問題標頭檔案和實現檔案就能很好地解決了

標頭檔案是以.h結尾的檔案 它的作用相當於其他語言的說明文件..標頭檔案內只是宣告屬性,變數或方法並不去實現

那麼如何實現這些方法呢?都寫在實現檔案.c裡面  當然 兩個檔案的檔名是相同的  只是字尾不同

我們來做個例子..

建立標頭檔案testa.h**只有一行  宣告乙個sum方法; 

1int sum(int,int);

建立實現檔案testa.c實現這個方法;

1

int sum(int i,intj)2

建立測試檔案test.c

1 #include 2 #include "

testa.h"3

intmain()

編譯執行 gcc -o test test.c testa.c

標頭檔案是不需要編譯的  但是實現檔案需要跟測試檔案一起進行連線  也可以先把實現檔案編譯成目標檔案

gcc -c testa.c//得到目標檔案testa.o

gcc -o test test.c testa.o

執行test.exe可以看到result輸出了sum方法的返回值11;

可能有人會問 有實現檔案實現方法就可以了 為什麼要標頭檔案呢   直接匯入實現檔案testa.c不可以嗎?

當然不是不可以,直接#include "testa.c"

匯入實現檔案不用標頭檔案也是可以的;但標頭檔案的意義何在呢?

這裡就要講到乙個依賴倒轉的理念了..依賴倒轉是指:高層如果依賴於底層的話底層改變,高層也不得不改變,

那麼**維護和重用重用性就大大降低了,所以高層都應該依賴於抽象而不是底層這是依賴倒轉原則。

只是這樣說的話很多人可能不理解..我們來做個例子..

假設有兩個實現檔案testa.c,testb.c,各自對應標頭檔案testa.h,testb.h

且testa.h依賴於testb.h

testa.c

int sum(int i,int

j)int mult (int i,int

j)

testa.h

#include "

testb.h

"int sum(int,int

);int mult (int,int);

testb.c

1

int multb(int i,intj)2

testb.h

int multb(int,int);
test.c

1 #include 2 #include "

testa.c"3

intmain()

可以看到testa.c的mult()方法是依賴於testb.c的multb()方法實現的;

我們先來把testa.c,testb.c都編譯為目標檔案

gcc -c testa.c testb.c//得到testa.o,testb.o兩個目標檔案

再把目標檔案與測試檔案鏈結

gcc test.c testa.o testb.o//生成可執行檔案

可以看到testa.c的標頭檔案依賴於testb.c的標頭檔案實現了mult()方法

如果對testb.c的方法進行修改呢

testb.c

1

int multb(int i,intj)2

我們把乘法改成了除法  重新把testb.c編譯成目標檔案:gcc -c testb.c

可以看到testa.o並沒有重新編譯  但testa.c的mult()方法又是依賴於testb.c 為什麼testa.c不用重新編譯呢?

因為依賴所寫是在標頭檔案  程式通過標頭檔案找到.o檔案..標頭檔案相當於宣告了乙個抽象方法..具體實現要看實現類怎麼寫

也就是說testa.c的mult()方法是依賴於testb.h內的乙個抽象方法,所以即使testb.c改變了,testa.c依然能使用而不用重新編譯。

下面大家做乙個測試

有a.c,b.c兩個實現檔案(內容隨意)分別對應a.h,b.h兩個標頭檔案..

檔案a.h依賴於檔案b.h,檔案b.h又依賴於檔案a.h

test.c測試#include匯入a.h 編譯執行

Objective C學習準備 C語言

今天我們一起開始學習ios.ios開發主流程式語言是object c以及swift。根據目前企業調查,objuctiva c是屬於目前比較多企業運用的語言.所以我們決定有能力者專注於oc.跑題了.說道入門,今天我們來複習一下c語言 最簡單的基礎變數定義,流程控制就略過了,不懂得可以先看看c語言基礎那...

NFC學習 準備

公司現在研發的tablet需要支援nfc功能,android 4.1.1的版本。前段時間nfc還沒有調通,boss讓我研究一下上層支援下。小弟 懂啊。最後換成了另外的同事支援了。由此,我準備利用點時間好好研究下nfc,對這個新興的技術做點了解,研究。以後會把自己研究過程的東西一點一點記錄下來,一方面...

Python學習準備

1,執行 cmd開啟命令提示行,輸入python,如果環境配置好了最下面的一行會出現三個箭頭 2,退出 輸入exit 便會退出到windows命令行內 1,建立資料夾取名為hello.py。注意檔案字尾為 py 2,檔案內編寫print helloword 3,cmd開啟命令列切換到檔案存放的目錄內...