C内核库包括和膨胀

C内核库包括和膨胀,c,coding-style,linker,include,include-guards,C,Coding Style,Linker,Include,Include Guards,我是新来的,所以我提前感谢你的帮助和耐心。我用C编写了一个程序,如下所示: main.c arpsend.h - header w/include guard for arpsend.c functions arpsend.c - includes <net/if.h>, <pthread.h>, etc. arprec.h - header w/include guard for arprec.c functions arprec.c - includes <

我是新来的,所以我提前感谢你的帮助和耐心。我用C编写了一个程序,如下所示:

main.c
arpsend.h - header w/include guard for arpsend.c functions
arpsend.c - includes <net/if.h>, <pthread.h>, etc.
arprec.h  - header w/include guard for arprec.c functions
arprec.c  - includes <net/if.h>, <pthread.h>, etc.
main.c
arpsend.h-标题,包括arpsend.c函数的保护
arpsend.c-包括。
arprec.h-带有arprec.c功能保护的标题
arprec.c-包括。
arpsend和arprec文件使用许多相同的内核库函数和定义。我已经注意到,当我编写arprec.c代码时,我的程序大小急剧增加。它比我的代码应该具有的内容膨胀得多。这使我得出结论,arpsend.c和arprec.c都在各自的.c文件中链接了他们自己需要的linux库代码。链接对于项目是多余的,但对于每个.c文件都是必需的

我的问题如下:

  • 如果由于内核和标准库的冗余,我添加到项目中的每个.c文件都会像这样膨胀,那么不是每个程序都会变得不必要的膨胀吗?在我的示例中,膨胀可能是微不足道的(~12k),但我只能想象如果我需要跨多个不同的.c文件使用一些图形库,会发生什么样的膨胀

  • 有没有办法避免这种情况

  • 建议的解决方案是将所有使用相同内核代码的函数保存在一个文件中吗

  • 如果#3是正确的,那么这不就是试图保持代码干净的目的吗?它是C语言,所以它不是真正的OOP,但是我想把我的代码展开,这样我就可以很容易地看到项目的组成


  • 如果这是多余的,我道歉。我在这里浏览了几个小时的论坛。我找不到确切的问题。再次感谢您的帮助

    当您将arprec.c文件添加到项目中时,您认为您的二进制大小应该增加多少,而不是增加多少

    库函数只链接到最终可执行文件一次,而不管项目中有多少文件使用它们。链接器通常是智能的,在最终可执行文件中只包含代码实际使用的库函数;arprec.c是否可能使用arpsend.c不使用的库调用

  • 只链接所需的功能。无论你将分割多少个文件,这都无关紧要

  • 如果使用共享库,链接将在运行时完成

  • 没有


  • 欢迎来到堆栈溢出。请尽快阅读这一页。你是怎么测量尺寸的?在编写
    arprec.c
    之前,程序的大小是多少?之后的尺码是多少?
    arprec.o
    arpsend.o
    的大小是多少?您的代码是内置在内核中,还是使用系统头的常规用户程序?你使用的是内核头还是系统头?你有没有查看过其他文件是否包含include-guard?哦!我不知道有人发了这个帖子。感谢大家的回应。再说一次,我对这方面还不太熟悉,所以我感谢你的帮助。不,我认为arprec.c不可能使用arpsend.c不使用的任何调用。事实上,arprec.c只是我从arpsend.c移到它自己文件中的一个函数。当然,我必须复制所有的内容。但单是这一举措就在编译后又增加了12k。