// // 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 ", sum(10, 20)); printf("minus = %i ", minus(10, 20)); return 0; } void test() { printf("0000000 "); }
// // 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; }