可以将函数存储在不跨多个源文件共享的头文件中吗?

Is it ok to store functions in header files that aren't shared across multiple source files?

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

即使未在源代码中调用数据,结构、函数或 macros/data 通常 accessible/viewable 是否会检查二进制文件?如果是的话怎么办?

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

Is structures, functions or macros/data in general accessible/viewable from examining the binary even if the data is not called within the source code?

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

看看nm

For the sake of readability is it safe to cut structures, functions and macros from a source file into a header file that is used by multiple source files

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

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

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

even if some source files don't use all of the structures, functions and macros

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