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

有三个文件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 @   踏浪而来的人  阅读(47)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示