//
// 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;
}