【问题标题】:Is it ok to store functions in header files that aren't shared across multiple source files?可以将函数存储在不跨多个源文件共享的头文件中吗?
【发布时间】:2021-02-23 02:26:06
【问题描述】:

如果您拥有最少数量的结构、函数和宏,但想从源文件中排除它们以将源代码转换为更简洁易读的格式并减少代码行数,该怎么办。

即使未在源代码中调用数据,结构、函数或宏/数据是否通常可以通过检查二进制文件访问/查看?如果是的话怎么办?

为了可读性,将源文件中的结构、函数和宏切割成多个源文件使用的头文件是否安全,即使某些源文件不使用所有结构、函数和宏(对于小头文件)?

【问题讨论】:

  • 一般来说,头文件应该只包含声明,定义应该在.c文件中。否则在尝试链接时会遇到多个定义错误。
  • 抱歉打错了,我编辑了代表声明,谢谢指出。
  • 如果它们不共享​​>那么只有你被允许在头文件中使用函数定义

标签: c linker precompiled-headers


【解决方案1】:

结构、函数或宏/数据一般可访问/可查看 即使数据没有在 源码?

取决于您构建的内容。如果您构建一个库(.a、.so、.lib、.dll 等),它们可能就在其中,并且该库中的所有内容都可以通过某种方式访问​​。如果您构建一个可执行文件,链接器很可能会删除未使用的代码。

看看nm

为了可读性,剪切结构、函数是否安全 和宏从源文件到头文件,由 多个源文件

是的,不是的。将函数/结构的声明放在头文件中,并将它们的实现放在 .c 文件中。不要将很多不相关的函数和结构放在一个标题中。即使您使用了其中的 5%,您最终也会在每个源文件中包含所有这些声明。这意味着您的编译器需要额外的工作,链接器可能需要额外的工作,您和未来的程序员在阅读所有这些不必要的东西时需要额外的工作。

所以,猜测您的代码库中发生了什么,您可能希望将它们放在单独的头文件中。

使用宏时要小心,将宏放入头文件时更要小心。大多数时候你应该避免这种情况。

即使某些源文件没有使用所有的结构、函数 和宏

这很常见。您也包含了一些标准的 C 头文件,并且不使用其中的所有函数和结构,对吗?只是(如我所说)将属于的东西放在一起。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-21
    • 1970-01-01
    • 2019-05-19
    相关资源
    最近更新 更多