Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.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/8/svg/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
导入模块&x2014;C语言中的自定义模块_C - Fatal编程技术网

导入模块&x2014;C语言中的自定义模块

导入模块&x2014;C语言中的自定义模块,c,C,我目前正在学习C编程语言,在导入我创建的模块时遇到了一些问题 我创建了一个小模块,用fgets读取,并完美地从stdin中刷新缓冲区,我不想每次都写代码。我只想像在Python中一样导入这个小模块。我不知道怎么做,因为我没有使用IDE。我只是在终端中使用gcc进行编译,并使用文本编辑器。我试图用谷歌搜索,但没有成功。您需要创建一个包含函数声明类型和外部变量的头文件(.h)。然后在要使用这些函数的程序中包括这个.h文件,并将编译后的.o文件(以及函数)添加到对象文件列表中。你就完了 您应该为模块创

我目前正在学习C编程语言,在导入我创建的模块时遇到了一些问题


我创建了一个小模块,用
fgets
读取,并完美地从stdin中刷新缓冲区,我不想每次都写代码。我只想像在Python中一样导入这个小模块。我不知道怎么做,因为我没有使用IDE。我只是在终端中使用gcc进行编译,并使用文本编辑器。我试图用谷歌搜索,但没有成功。

您需要创建一个包含函数声明类型和外部变量的头文件(.h)。然后在要使用这些函数的程序中包括这个.h文件,并将编译后的.o文件(以及函数)添加到对象文件列表中。你就完了

您应该为模块创建一个标头,声明模块中的函数以及模块使用者需要的任何其他信息。你可以称这个标题为
weekly.h
,这是对你名字的双关语,但你可以在合理的范围内选择任何你喜欢的名字

您应该创建一个库(共享或静态-由您决定),其中包含由模块定义的函数(以及任何全局变量,如果您太笨拙以至于有任何全局变量的话)。您可以将其称为
libweekly.so
libweekly.a
——或者使用适合您机器的扩展名(
.dylib
.a
,例如,在macOS上)。源文件可能是也可能不是
weekly.c
——如果有多个函数,您可能会有多个源文件,因此它们不会都是
weekly.c
。您应该将此代码(头文件、源文件及其makefile)放在单独的源目录中

您应该将标题和库安装在一个众所周知的位置(例如标题为
$HOME/include
,库为
$HOME/lib
,或者可能安装在
/usr/local
下的相应目录中),然后确保在编译时使用正确的选项(
-I$HOME/include
用于标题)或链接(
-L$HOME/lib
-lweekly

使用该模块的源代码将包含:

#include "weekly.h"

您的代码将可用。使用
$HOME/lib
中的共享库,您必须确保运行时系统知道在哪里可以找到库。如果您在
/usr/local
中安装它,这已经为您完成了。如果您在
$HOME/lib
中安装它,您必须调查
/etc/ld.so.conf>之类的事情
LD_LIBRARY_PATH
DYLIB_LIBRARY_PATH
环境变量等

因此,如果我确实理解了,除了创建一个包含函数原型的.h文件和在main.c中包含外,我还必须创建一个库(包含模块的源代码,.c文件)所以GCC可以在编译Python中的主要源代码时找到它们,用来创建一个包含init文件的目录。这就是我推荐的。在短期内,您可以考虑将对象文件保持在某个位置并明确地与之链接。但是如果您开始拥有多于一对这样的文件,则是BETE。r使用库。必须列出标准库的目标文件将是可怕的。您的库没有那么大的不同。