2021-5-29C语言对文件编程


多文件

C语言通常一个.c配一个.h文件,非主函数。并且配对的.c和.h文件通常是,.h只给配套的.c使用,一般的公共的,会使用common.h这样的名字写一个.h文件。

//.c文件中
//1.定义全局变量
int a = 100;
//2.定义函数
void fun(int a,int b){
	
	return;
}
//.h文件中
//1.结构体、联合、枚举、宏定义(宏函数、宏变量)
struct Node{
	int a;
	int b;
};

#define NUM 10 + 2
#define MAX(a,b)   if(a>b){\
						printf("%d",a);\
					}else{\
						printf("%d",b);\
					}
//2.全局变量的声明
extern int a;
//3.函数的声明
void fun(int a,int b);

另外在其他函数中想要使用我们自己写的头文件.h就需要#include “xxx.h”
使用.h文件编译上等同于用所有xxx.h中的所有代码替换#include “xxx.h”。
一般情况下.c文件中会#include配套的.h文件。防止某些不想给外部的函数出现嵌套,并且造成了函数顺序先后问题。(这里说的不是太好,看程序吧。。。我自己知道在说啥。。。就行了)

//stc.c文件中
//1.定义全局变量
int a = 100;
//2.定义函数


//void fun2(int a, int b) {    fun2定义在这里是错误的,主函数无法调用fun2,并且stc.h没有声明fun1;
//	fun1(1, 2);
//
//	return;
//}


void fun1(int a, int b) {

	return;
}
void fun2(int a, int b) {  
	fun1(1, 2);

	return;
}
#pragma once
//stc.h文件中
//1.结构体、联合、枚举、宏定义(宏函数、宏变量)
struct Node {
	int a;
	int b;
};

#define NUM 10 + 2
#define MAX(a,b)   if(a>b){\
						printf("%d",a);\
					}else{\
						printf("%d",b);\
					}
//2.全局变量的声明
extern int a;
//3.函数的声明
void fun2(int a, int b);
//main函数
#include <stdio.h>
#include "stc.h"

int main() {

	fun1(1,2);
	return 0;
}

不想给其他人使用的函数,但又要防止在.c函数中函数定义顺序的问题,就在.c文件中的前面使用函数声明就好了,不用放在配对的.h中这样别人就不知道这个函数,就不会引用你的.h文件了。

头文件重复包含问题

a.h包含了b.h,但是主函数需要a.h又需要b.h,那么就重复包含了b.h,包含多了会出现多次重复定义的问题,比如结构体、联合等。。。不要把所有的头文件都包含在一个common的.h中,防止重复包含还能减少编译时间,打包时间。

#pragma once   //这也是一个防止多次定义的方法,通常在c++中使用,只编译一次和ifndef的方法一样。。。大概
#ifndef _MOUGEHONG_
#define _MOUGEHONG_
//stc.h文件中
//1.结构体、联合、枚举、宏定义(宏函数、宏变量)
struct Node {
	int a;
	int b;
};

#define NUM 10 + 2
#define MAX(a,b)   if(a>b){\
						printf("%d",a);\
					}else{\
						printf("%d",b);\
					}
//2.全局变量的声明
extern int a;
//3.函数的声明
void fun2(int a, int


#endif // !_MOUGEHONG_

要注意,循环包含头文件是禁止的,a.h包含b.h,b.h包含c.h,c.h包含a.h,这样一定要拆开。也不能头文件自己包含自己。

总结

用耳去听,用心去斩,刀斩肉身,心斩灵魂

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值