多文件编程

多文件编程

当代码过多时如果全写在一个.c文件中就会对代码的编写、阅读、调试造成干扰,为了更方便地管理代码,一般都按照功能模块,把代码拆分成多个.c文件,为每个.c文件编写一个.h文件用于说明.c中有哪些函数、全局变量,然后分别编译每个.c文件(gcc -c code.c),会生成目标文件,然后再把多个目标文件合并成一个可执行文件
注意:.c文件最好也包含对应的.h文件,这样可以防止函数的声明与现实不符

//		 printf("%s %s %d",__FILE__,__FUNCTION__,__LINE__);
// 						打印 文件名  ,  函数名   ,  行号  (固定写法,不用自己定义)

头文件中应该写什么

.h文件可能会被多个不同的.c文件包含,因此.h文件中的内存应该是可以多次被定义的(函数声明,变量声明(extern))
1、函数声明
2、全局变量声明(如果定义全局变量,不要初始化)
3、宏定义(宏常量、宏函数)
4、结构、联合、枚举定义

Makefile脚本

当多个文件编程时,编译会变得异常麻烦,而Makefile文件中可以把编译指令记录下来,当执行make命令时会自动把Makefile中的编译指令进行执行
注意:使用make进行编译时会根据文件的修改时间来确定,.c文件是否需要再次编译,因此在程序运行前最好将之前的编译结果删除后再重新编译,确保安全

Makefile格式:

1、定义一些变量(字符串内容)

			CC = gcc/g++ 			(指定编译器)
			STD = -std = gnu99		(指定编译标准)
			BIN = a.out				(最终编译结果)
			OBJ = a.o main.o		(目标文件)
			FLAG = -Wall -Werror	(编译参数)

-Wall:尽可能多的产生警告,以更严格的标准来检查代码
-Werror:把警告当作错误处理
使用时:

			$(...)	eg. $(CC)

%.o:%.c:将%.o替换成%.c
$< : 表示.c
$@ : 表示.o

2、定义编译目标(函数)

			目标名:其它目标(目标依赖,先执行其它目标,再执行此目标)
				指令

注意:一定要用tab键缩进,否则会产生错误:*** 遗漏分隔符
注意:默认只执行排在第一个的编译目标

3、用于清理目标文件的编译目标

			clean:
				rm $(OBJ) $(BIN)  

make clean 执行清理

一个可以当成公式的例子:

/***************************************************/
    		CC = gcc/g++
    		STD = -std = gnu99
    		BIN = a.out
    		OBJ = a.o main.o
    		FLAG = -Wall -Werror
    		
    		all:$(OBJ)
    			$(CC) $(OBJ) -o $(BIN)
    		%.o:%.c
    			$(CC) $(STD) $(FLAG) -c $< [-o $@] 		// 后面若无需重命名,可以不写
    		clean:
    			rm $(OBJ) $(BIN)  
/***************************************************/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值