2. 基本規則
3. 改造步驟
4. 編譯方法
//mutil_main.c
#include
#include
"multi_read_1.h"
//因為主函式用到了"multi_read_1.h"裡宣告的read函式
intmain()
//multi_read_1.h
#ifndef __multi_read_1_h__
#define __multi_read_1_h__
intread
(void);
#endif
//__multi_read_1_h__ (這個注釋表示 #endif 是和第一行的 #ifndef 配對的)
//1. 應該在標頭檔案內容的前後使用預處理指令,這樣做的目的,如果乙個原始檔的多次包含了這個標頭檔案的內容,那麼再編譯這個原始檔的時候,也只會把這個標頭檔案編譯一次
//2. 如果不加這些預處理指令,可能會把頭檔案編譯很多次
//3. 另外為了避免不同的標頭檔案使用同樣的巨集名稱,規定,每個標頭檔案使用的巨集名稱必須要和它的檔名對應
//第乙個預處理指令必須是 #ifndef
//multi_read_1.c
#include
#include
"multi_read_1.h"
intread
(void)/*
兩種編譯方式:
1. gcc mutil_main.c multi_read_1.c
2. make //需要寫 makefile
*/
# 2. 最後把所有的 .o 目標檔案合併成 a.out 可執行檔案
a.out : multi_read_1.o multi_main_1.o
gcc multi_read_1.o multi_main_1.o
# 1. 為每個原始檔單獨寫乙個編譯過程
#下面表示可以根據 multi_read_1.c 原始檔編譯得到叫 multi_read_1.o 的目標檔案
#tab鍵開頭加 gcc -c 就可以編譯乙個不完整的程式
multi_read_1.o : multi_read_1.c
gcc -c multi_read_1.c
multi_main_1.o : multi_main_1.c
gcc -c multi_main_1.c
##真正的 makefile 檔案每一步都是可擴充套件的,上面的只是最簡單的乙個例子
//mutil_main.c
#include
#include
"multi_read_1.h"
//使用extern關鍵字把另乙個原始檔裡的全域性變數再次宣告一下
// extern int val;
intmain()
/*使用extern宣告全域性變數是不會分配記憶體的,所以通常會把它放在標頭檔案裡。
這樣做的好處就是,任何乙個原始檔如果想使用這個全域性變數的話,只用包含這個標頭檔案就可以了
*///multi_read_1.h
#ifndef __multi_read_1_h__
#define __multi_read_1_h__
extern
int val;
void
read
(void);
#endif
//__multi_read_1_h__
//multi_read_1.c
#include
#include
"multi_read_1.h"
//宣告乙個全域性變數
//寫成 static int val; 就會報錯,因為靜態全域性變數的作用域是當前檔案的所有語句
int val;
//read 函式不再使用返回值向呼叫函式傳遞資料
void
read
(void
)
C語言 多檔案程式設計
1 多檔案程式設計,乙個檔案可以有多個函式,但是乙個函式最多乙個檔案 2 多檔案程式設計的步驟 把所有函式分散在多個檔案中,通常主函式在單獨的檔案裡 為每個原始檔編寫乙個配對的以.h作為副檔名的標頭檔案,主函式所在的不需要,不分配記憶體的內容都可以寫在標頭檔案裡,標頭檔案裡至少要包含配對原始檔裡所有...
C語言 多檔案程式設計
分檔案程式設計 1 當乙個專案比較大時,往往都是分檔案,這時候有可能不小心把同乙個標頭檔案 include 多次,或者標頭檔案巢狀包含。a.h 中包含 b.h include b.h b.h 中包含 a.h include a.h main.c 中使用其中標頭檔案 include a.h intma...
多檔案程式設計
新增乙個原始檔 main1.c include 匯入自己的標頭檔案 include fun2.h int main gcc o hello.exe main1.c fun2功能實現.c fun2.h head.h 沒有什麼先後順序,編譯器會自動找到主函式,再進行檔案的整合 int a 10 int ...