c / c++ 多文件使用理解

本文介绍了C/C++中多文件的使用和组织原则,包括预处理、编译和链接的过程。强调了头文件的作用是统一声明,防止多次定义,并指出静态变量应在外部声明。通过实例说明了如何在不同文件间共享函数和变量,以及简单的多文件项目编译方法。
摘要由CSDN通过智能技术生成

首先翻看<c primer plus> 12.1.1-12.1.11节, 弄懂相应术语和规则

以及略懂C的预处理编译链接的全过程

然后个人总结理解多文件:

  • C/C++中需要先声明后使用
  • #include 预处理, 实际上只是把#include的文件复制到当前文件中
  • .h文件没有产生任何(与后缀名相关的)特殊处理, 而且是可选的 (不是必要的), 实际上该后缀和任何文本文件没啥区别

文件a要使用文件b中实现的变量/函数:

1. 文件a中有相应函数的声明 (extern引用式声明, 由于函数声明默认是extern的, 所以不用相应关键字)

2. 链接时会在所有obj文件中寻找变量的定义 / 函数的实现(定义) 

在编译时,编译器只检测程序语法,和函数、变量是否被声明。如果函数未被声明,编译器会给出一个警告,但可以生成Object File。而在链接程序时,链接器会在所有的Object File中找寻函数的实现,如果找不到,那到就会报链接错误码(Linker Error)

跟我一起写Makefile:概述 - Ubuntu中文

所以, 头文件只是将文件a中的声明和文件b中的声明统一组织 (比方说文件b实现时需用到文件c, 但其实文件a是无需引用文件c的, 此时该#include还是写在文件b中) 上述文件均指.c文件

这就是为啥要将函数/结构体的声明写到头文件中 分别在实现的文件(文件b) 和 使用的文件(文件a)中分别#include了

其次, 外部链接的静态变量不应该写在头文件中 (会因为上述习惯多次定义), 而应该在使用时extern声明.

所以, 简单的多文件可以直接用在使用的文件中直接 外部声明+gcc a.c b.c -o test 的方式来产生执行文件test

ref: 看完以下你就会回忆起来所有的想法了

1. https://www.zhihu.com/question/280665935/answer/649503865

2. https://zhuanlan.zhihu.com/p/113526840

3. https://www.zhihu.com/question/40972250/answer/89031476

4. https://www.zhihu.com/question/58547318/answer/157444718

附加阅读:

1. https://www.zhihu.com/question/370130782/answer/1004583903  

2. 跟我一起写Makefile:概述 - Ubuntu中文

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值