xx h和xx c的奧妙

2021-05-11 11:48:35 字數 2380 閱讀 3757

xx.h

和xx.c

的奧妙

示例**:

/*********************

a.h*********************/

#ifndef __a_h__

#define __a_h__

void fun();

#endif

/********************* a.c*********************/

#include "a.h"

//為什麼要加?

void fun()

/******************** main.c********************/

#include "a.h"

int main( )

為什麼經常見

xx.c

裡面include

對應的xx.h

?a.c

中的#include "a.h"

是否多餘?

主要有兩種原因: ①

如果.c

中的函式

也需要呼叫同個

.c中的其他函式,那麼這個

.c往往會

include

同名的.h

,避免宣告和呼叫順序出現問題(

c語言要求使用之前必須宣告,而

include

同名.h

一般會放在

.c的開頭)。 ②

.c中的函式中經常會使用了同名

.h檔案定義的巨集,或者

typedef

定義的新型別。

有很多任務程甚至把這種寫法約定為**規範,以規範出清晰的**來。

由此,有很多任務程甚至把這種寫法約定為**規範,以規範出清晰的**來。以上示例中,顯示是可有可無的。 從

c編譯器角度看,.h和

.c只是字尾符號,毫無意義。換句話說,就是.h和

.c沒有必然聯絡。 1.

預處理

預處理只是簡單的替換,

#include "xx.h"

中所包含的完全展開到包含它的

.c 檔案中。

.h只起到這個作用。 2.

編譯過程

以乙個檔案為基本的乙個編譯單元。乙個

.c檔案生成乙個

.o檔案,在編譯階段,只要

.c或者包含的

.h中已經宣告的函式或變數,

.c都會生成相應的

.o檔案。編譯階段對函式或變數的定義並無要求,所以在

main.c

中,即便

void fun()

是在a.c

中定義的,但其包含的標頭檔案中已經宣告,即可順利編譯。

3.連線過程 將

a.o和

main.o

結合起來,生成可執行檔案。

若只是宣告,沒有在其他的

.c中定義,連線時就會出錯。也就是說若

void fun()

沒有在a.c

中定義,連線就會出錯。不管是函式還是變數都是同樣的道理。

隨便提一下:若只是宣告,而未定義。但是其宣告的函式或變數並未使用,也是可以的連線通過的。

總結一下,

.h一般放的是同名

.c檔案中定義的變數、陣列、函式的宣告,需要讓

.c外部使用的宣告。這個宣告有啥用?只是讓需要用這些宣告的地方方便引用。因為

#include "xx.h"

這個巨集其實際意思就是把當前這一行刪掉,把

xx.h

中的內容原封不動的插入在當前行的位置。只是乙個簡單的**替換。由於想寫這些函式宣告的地方非常多(每乙個呼叫

xx.c

中函式的地方,都要在使用前宣告一下子),所以用

#include "xx.h"

這個巨集就簡化了許多行**

——讓預處理器自己替換好了。也就是說,

xx.h

其實只是讓需要寫

xx.c

中函式宣告的地方呼叫,至於

include

這個.h

檔案是誰,是

.h還是

.c,還是與這個

.h同名的

.c,都沒有任何必然關係。

只要想呼叫

xx.c

中的某個函式,就直接包含

include

了xx.h

,巨集替換後也可能會出現了很多無用的宣告,不過這樣整個版面很清晰。多些宣告(

.h一般只用來放宣告,而放不定義)沒有任何壞處,不會影響編譯。

指標的奧妙

今天看了指標這一章書,看得有點似懂非懂。開始知道原來指標是c語言中的精華,想到自己卻對指標一點也不知道怎麼去用,自己都覺得有點慚愧啊。今天花了好長的時間去寫指標這篇課後習題10.3這道題,就是因為自己對指標不懂如何運用,才搞得自己花費很長時間才寫出來了。題目要求 輸入10個整數,將其中最小的數與第乙...

c語言 《指標的奧妙》

近來,又有同學問我 關於指標的知識,回顧兩年的程式設計之路,不知不覺,我離c語言的道路方向也偏差了很多,其實我好久都沒有碰過c語言了。但是這次回顧,我又對指標有了新的認識。首先 指標他到底是個什麼東西呢?其實他並沒有多麼奇妙,他就是乙個普通的變數,不過他裡面放的是同型別的位址,哈哈,我還是舉個例子吧...

2015 3 21 學習豆瓣應用的奧妙

資料分析 padas,scipy python,ror的優點是產品起步構建很快 ror的效能是能把產品維護到a輪併發 py的效能要害 gil,pypy主要解決這個問題 後端出現效能問題,用go解決,比如豆瓣的廣告投放服務 動態語言應用比較注重測試 一定要review 考慮使用git 用後端的統一 全...