一、概念
/*
#include ""
"" 先会在当前文件查找, 找不到再去编译器环境下查找,找不到再去系统的环境下查找
#include <>
<> 先去编译器环境下查找,找不到再去系统的环境下查找
作用:
将""或者<>中的内容完全拷贝过来
注意:
如何正确编写.h文件
添加头文件卫士 防止循环导入
#ifndef __ZS__H__ // 判断是否没有定义了名称叫做 __ZS__H__ 的宏
#define __ZS__H__ // 定义一个叫 __ZS__H__ 的宏
#endif
官方
#ifndef ls_h
#define ls_h
#endif
如果防止循环拷贝 (A 拷贝 B , B拷贝 A)
只允许一方拷贝 (另一方只做声明)
间接拷贝问题
A 拷贝 B, B拷贝C, C拷贝 D
*/
二、代码
#include <stdio.h>
//#include "zs.h" // int sum(int v1, int v2);
#ifndef __ZS__H__ // 判断是否没有定义了名称叫做 __ZS__H__ 的宏
#define __ZS__H__ // 定义一个叫 __ZS__H__ 的宏
// 加法运算
// v1 ,v2 需要参与运算的数据
int sum(int v1, int v2);
#endif
// 函数可以重复声明, 但不能重复定义
//void text();
//void text();
//void text();
//#include "zs.h" // int sum(int v1, int v2);
#ifndef __ZS__H__ // 判断是否没有定义了名称叫做 __ZS__H__ 的宏
#define __ZS__H__ // 定义一个叫 __ZS__H__ 的宏
// 加法运算
// v1 ,v2 需要参与运算的数据
int sum(int v1, int v2);
#endif
// 重复导入会降低编译效率
#include "zs.h" // zs 导入了 ls的文件 这种就是间接拷贝
//#include "ls.h"
int main()
{
// printf("sum = %i\n",sum(10, 22));
printf("minus = %i\n",minus(30, 20));
return 0;
}
void text()
{
printf("000\n");
}
>>> zs.h
// 为了防止重复导入, 一般情况下会在.h中添加上 头文件卫士
//#ifndef __ZS__H__ // 判断是否没有定义了名称叫做 __ZS__H__ 的宏
//#define __ZS__H__ // 定义一个叫 __ZS__H__ 的宏
// 加法运算
// v1 ,v2 需要参与运算的数据
int sum(int v1, int v2);
#include "ls.h" // (拷贝ls.h)
/*
#include "ls.h" 相当于把ls.h的东西 都拷贝过来
int minus(int v1,int v2);
int sum(int v1, int v2); // 只做zh.h的声明
*/
//#endif
>>> zs.c
#include "zs.h"
int sum(int v1, int v2)
{
// 先用 v1 - v2 然后再加上 v1
int res = minus(v1, v2);
return res + v2;
}
>>> ls.h
//#ifndef ls_h
//#define ls_h
// 减法运算
// v1 ,v2 需要参与运算的数据
int minus(int v1,int v2);
//#include "zs.h" // (循环拷贝) #include nested too deeply
int sum(int v1, int v2); // 只做zh.h的声明
//#endif /* ls_h */
>>> ls.c
#include "ls.h"
int minus(int v1,int v2)
{
// 先将两个数相加, 然后再减去v2
int res = sum(v1, v2);
return res - v2;
}
循环引用
image.png image.pngjie'j
解决循环
网友评论