分而治之
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
如有錯處,歡迎指正。(根據慕課翁凱老師課程做的筆記)