Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中使用头文件_C_Header Files - Fatal编程技术网

在C中使用头文件

在C中使用头文件,c,header-files,C,Header Files,我正在尝试学习C中头文件的使用。现在我在研究中发现了一些资源,但没有一个能达到预期的效果 首先,根据教程,我可以在头文件本身中编写我的函数。但我不想那样做。我想保持头文件不变,即使在接口保持不变的情况下更改了代码 对这个问题的回答提出了两种方法。首先,我可以分别编写代码和头文件,并在编译时包括它们,如下所示: gcc -o myprog test.c library.c 但我也不想那样做。我的库函数应该随时可用,而无需包含在编译行中。根据相同的答案,我可以创建一个库,然后用-l开关链接到它。但

我正在尝试学习C中头文件的使用。现在我在研究中发现了一些资源,但没有一个能达到预期的效果

首先,根据教程,我可以在头文件本身中编写我的函数。但我不想那样做。我想保持头文件不变,即使在接口保持不变的情况下更改了代码

对这个问题的回答提出了两种方法。首先,我可以分别编写代码和头文件,并在编译时包括它们,如下所示:

gcc -o myprog test.c library.c
但我也不想那样做。我的库函数应该随时可用,而无需包含在编译行中。根据相同的答案,我可以创建一个库,然后用-l开关链接到它。但是当涉及到printf之类的函数时,您不需要执行其中任何一个。你所要做的就是包含头文件。有什么办法吗

TL总结;DR

我想用C编写一个库,其中:

  • 不必在头文件本身中实现

  • 不必每次使用库函数时都包含在编译行中

  • 不必每次使用库函数时都与-l链接

  • 基本上,库应该只包括头文件

  • 我是否可以在Linux中实现它

    但是当涉及到printf之类的函数时,您不需要执行其中任何一个。你所要做的就是包含头文件。有什么办法吗

    简短的回答是“不”。答案很长,C编译器“免费”链接了一些库,包括实现
    printf
    的库

    您可以选择拒绝这些“免费赠品”——在gcc中是
    -nodefaultlibs
    。如果添加此选项,
    printf
    将丢失


    注意:头可以实现的一件事是宏。但是,宏的行为与普通函数不同,因此使用宏时应格外小心。

    在过去,在共享库成为标准之前,您可以将代码添加到system C库中。这从来不是一个好主意;对系统库的任何更新都会丢弃您添加的内容。但这是可以做到的。否则,您必须找到一种方法来配置C编译器以运行链接器来自动链接库,就像它自动链接系统C库一样。这可能是可行的;不过,这不值得付出努力。(同样,对编译器的更改可能意味着您必须在每次更新编译器时进行更改。)。您只需使用
    -lwhatever