天天看點

c語言大程式結構分而治之編譯單元項目頭檔案#include不對外公開的函數聲明标準頭檔案結構

分而治之

main()裡面程式太長适合分成幾個函數

一個源代碼檔案太長适合分成幾個檔案

編譯單元

一個.c檔案就是一個編譯單元

編譯器一次隻能處理一個.c檔案

項目

Dev c++的編譯時将每個源代碼編譯後連接配接起來

有的IDE編譯和連結是分開的(編譯和建構),VS…

頭檔案

函數原型

如果不給出函數原型,編譯器會猜測函數傳入,傳回 都是int

編譯器編譯時隻看目前源程式,不會去同項目中其他源程式中找函數原型

如果你的函數并非int ,編譯時不會出錯,連結時也不會報錯,但執行時就不對了

故要在調用函數的地方告訴編譯器,函數原型是什麼,即頭檔案

頭檔案.h

1.将函數原型放入頭檔案中(.h結尾),在調用該函數的源程式中#include這個

頭檔案,即告訴了編譯器函數原型是什麼

2.一般任何.c檔案都有對應同名的.h檔案,所有對外公開函數的原型、全局變量

的聲明都放進去

#include

#include是編譯預處理指令,和宏一樣,編譯前先執行

#include把那個檔案的文本原封不動地放在它所在位置,不一定非要放在開頭

“ ”方式指出頭檔案,要求編譯器先在目前.c檔案所在目錄找頭檔案,沒有再去

編譯器指定的目錄找。

<>方式指出頭檔案,直接去系統指定目錄找。

#include"myway.h"
#include<stdio.h>
           

不對外公開的函數

在函數前加上static,就是隻能在目前編譯單元使用的函數

在全局變量前加static,就是隻能在目前編譯單元使用的全局變量

(注意與靜态本地變量區分)

聲明

int i;是變量的定義。
extern int i;是變量的聲明。

聲明是不産生代碼的東西:(隻有聲明可以放在頭檔案中)
函數原型
變量聲明
宏聲明
結構聲明   
枚舉聲明
類型聲明
inline函數

定義是産生代碼的東西。
           

标準頭檔案結構

用以避免同一個編譯單元中,同名的結構被重複聲明

運用條件編譯和宏,保證一個頭檔案在一個編譯單元内隻被#include一次

#ifndef __List_Head__
#define __List_Head__

#include"node.h"
struct node _list;
typedef struct {
	node* head;
	node* tail:
}
#endif
           

如有錯處,歡迎指正。(根據慕課翁凱老師課程做的筆記)

繼續閱讀