// // main.c // 檔案包含 #include <stdio.h> // 函式可以重複宣告, 但不能重複定義 void test(); void test(); void test(); void test(); #include "zs.h"// 把zs.h檔案全部拷貝多來,int sum(int v1, int v2);宣告之後就可以用了。 // 重複匯入會導致重複宣告不會報錯,但是會降低編譯效率 //#include "ls.h" /* #include <> <>會先去編譯器環境下查詢, 找不到再去系統的環境下查詢, #include "" ""會先在當前檔案查詢, 找不到再去編譯器環境下查詢, 找不到再去系統的環境下查詢, 作用: 將""或者<>中的內容完全拷貝過來。 注意: 如果正確的編寫.h檔案,如果防止迴圈拷貝 A拷貝B, B拷貝A,間接拷貝問題 A拷貝B, B拷貝C, C拷貝D */ int main(int argc, const char * argv[]) { printf("sum = %i\n", sum(10, 20)); printf("minus = %i\n", minus(10, 20)); return 0; } void test() { printf("0000000\n"); }
// // zs.h // 為了放置重複include "zs.h"匯入, 一般情況下會在.h中新增上 標頭檔案衛士,防止標頭檔案重複匯入。 #ifndef __ZS__H__ /* __ZS__H__是隨便寫的,判斷是否"沒有"定義了名稱叫做 __ZS__H__ 的巨集, 沒有定義就把 #define __ZS__H__ int sum(int v1, int v2); #include "ls.h" 編譯進去, 並且同時定義一個巨集__ZS__H__和方法的宣告。再次遇見include "zs.h"定義了__ZS__H__ 巨集,#ifndef到#endif之間的內容都不會被編譯進去 */ #define __ZS__H__ // 定義一個叫做__ZS__H__的巨集 int sum(int v1, int v2); #include "ls.h" #endif
// // zs.c // day10 #include "zs.h" int sum(int v1, int v2) { int res = minus(v1, v2) + v1; return res; }
// // ls.h int minus(int v1, int v2); #include "zs.h" //.h引入。.c裡面自動就有, zs.h引入了ls.h,ls.h引入了zs.h, int sum(int v1, int v2);
// // ls.c #include "ls.h" int minus(int v1, int v2) { int res = sum(v1, v2) - v2; return res; }