多文件(分模块)的编译过程

有三个文件cal.c、cal.h、main.c

cal.c中是模块的函数实现,cal.h是模块的函数申明,main.c是调用各模块的功能。

#include <> 和#include ""区别:

<>是从linux标准的头文件目录下去找头文件,如/usr/include/、/usr/local/include

""是从当前的编译路径(即当前在哪个路径(pwd命令看),这个就是当前的编译路径)下去找头文件,如果找不到就去标准的头文件路径下找。

通常我们一般创建四个目录存放工程文件:src、obj、include、bin。

src存放源码,obj存放目标文件,include存放头文件,bin存放可执行程序

 

如果cal.c、cal.h、main.c文件在一个文件夹下,gcc cal.c main.c就能编译成功,不用-I指定头文件所在的路径就能找到头文件(预编译时会用到这个头文件),因为cal.h就在当前的编译路径下。

如果cal.h放在include目录下,cal.c main.c放在src目录下,那么就得用-I指定头文件所在目录,让编译器去指定的文件夹去找头文件gcc cal.c main.c -Iinclude

 

头文件的作用声明函数和结构体类型,一般不在头文件中定义变量,因为如果在头文件中定义一个变量并赋了初值(全局变量),那么当有两个源文件include这个头文件时会出现重复定义的错误;如果在同文件中定义了一个变量但没有赋初值(这样就会出现全局变量的二义性),当有两个源文件include这个头文件,第一个源文件就是定义这个变量,这二个源文件就是声明这个变量。

posted @ 2023-10-21 20:19  踏浪而来的人  阅读(36)  评论(0编辑  收藏  举报