c - 为什么要将C文件拆分成多个

标签 c file split header

首先,我知道如何将一个 C 文件拆分成多个。

我的问题是,除了可读性之外还有什么优势吗?拆分C文件的主要原因是什么?

最佳答案

如果您将一个大的 C 文件分成几个翻译单元,您实际上必须在一些常见的头文件中将所涉及的函数声明为(例如 extern )。

拆分的优点是增量构建时间可能会稍微变短。如果你只改变一个函数中的一个语句,你只需要编译定义该函数的文件(如果该文件很小,它的编译速度很快)。但是,编译器需要解析所有的头文件。您可能希望在头文件中定义 static inline 函数(这会使它们变大)。

拆分的缺点是开发人员可能更难找到给定的函数(但像 ctags 这样的工具有帮助)并且编译器可能优化得更少(例如,不会内联一些函数调用,除非你启用链接时间优化)

所以这是一个品味和习惯的问题。我个人喜欢拥有超过一千行(可能少于一万行)的 C 或 C++ 文件,但是 YMMV。而且我不喜欢每个文件只有一个函数(少于一百行)的项目(在这种情况下你需要很多)。但是拥有一个十万行的大源文件一般来说是不合理的。

我还发现将相关函数放在一起的源文件更具可读性(因为在一个文件中搜索函数定义比在多个文件中搜索函数定义更简单)。

请注意,头文件可能会扩展到相当大的部分(在现代 C++ 中更是如此:像 <vector><map> 这样的标准头文件可能会扩展到超过一万行代码),例如<stdio.h> 扩展到两千行(在我的 Debian/Linux/x86-64 上)所以有很多小的源文件会减慢完整的构建时间(因为编译器确实看到了预处理形式,在扩展之后#include 指令)。

对于 GCC ,您可能想要一个单独的 header (包括其他 header )和 pre-compile 它。

顺便说一句,将一个大文件拆分成几个小文件,或者合并几个小文件都没什么大不了的。所以我觉得不是很重要。

在某些情况下(小型微 Controller 上的嵌入式 C 程序,例如 Arduino),二进制程序的大小非常重要,这可能是拥有许多目标文件(如此多的 C 源文件)的原因,因为您将只链接那些真正需要的。

关于c - 为什么要将C文件拆分成多个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44187272/

相关文章:

java - 按换行符分割 Java 字符串

python访问列表中的第二个到最后一个元素

c - 使用 C 语言通过套接字编程负载均衡器

c - 文本和数据段使用大页

c - fwprintf 不输出宽字符

c++ - 在 C++ 中使用 opendir 打开现有目录时出错

Android:file.exists 在某些设备上下载和存储文件时总是返回 false

c - 另一个快速三角函数

c - 从文本文件中读取一行并将其删除

c# - 使用 '/' 分隔符从其余数据中拆分 Url