Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.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_Compilation - Fatal编程技术网

在C文件中包含源文件

在C文件中包含源文件,c,compilation,C,Compilation,我对C很陌生,所以我为这个新问题道歉 我想在我的项目中使用此源代码: 因此,我将其包含在我的测试文件中: #include <stdio.h> #include "b64.c" int main() { return 0; } 此源文件或任何源文件的正确用法是什么?我们如何正确使用它,或者如何使用该文件中定义的函数 编辑:我知道问题是由于main的重复定义造成的。我知道只有一个。我的问题是,难道不是每个有意义的项目都需要它的主要方法吗?那么为什么b64.c中定义了main方

我对C很陌生,所以我为这个新问题道歉

我想在我的项目中使用此源代码:

因此,我将其包含在我的测试文件中:

#include <stdio.h>
#include "b64.c"

int main()
{
   return 0;
}
此源文件或任何源文件的正确用法是什么?我们如何正确使用它,或者如何使用该文件中定义的函数


编辑:我知道问题是由于main的重复定义造成的。我知道只有一个。我的问题是,难道不是每个有意义的项目都需要它的主要方法吗?那么为什么b64.c中定义了main方法呢?我们应该从源代码中删除这个方法吗?似乎奇怪的是,源代码并没有准备好被包含和使用。

当您包含该源文件时,您会得到2个
main()
声明,这是不正确的。在本例中,您重新定义了“main”


.c
包含到另一个
.c
文件中没有意义。C文件编译为.obj文件,链接器将其链接到可执行代码中,因此不需要将一个.C文件包含到另一个.obj文件中。相反,您可以创建一个列出函数的.h文件并包含该.h文件

您应该使用两个主要函数之一。
如果需要新的main,请在文件中写入main方法,并将其从“b64.c”文件中删除;如果要从“b64.c”文件中使用main方法,请删除(空)main。

如果在b64.c中定义了
main
,则不能在主源文件中简单地重新定义它

您希望在程序中使用b64.c中的几个函数。从中删除
main
函数,并创建一个头文件,在其中原型化b64.c中的所有函数。之后,将此头文件包含在主程序中。看一看。它应该给你一个主题的概述


除此之外:您似乎不太熟悉C。请尝试一些教程并继续阅读有关C的内容。

首先,您必须将.C文件重新声明为.h,然后您必须遍历源代码并重命名任何重复的方法或全局变量名。主方法是程序的起点,因此只能有一个。

在代码中包含C源文件从来都不是一个好主意。您可以将另一个C源文件中的代码复制到您的代码中,也可以在代码中包含所需的原型,并调用函数,在分别编译后链接这些函数。

(通常不包括.C文件,只包括.h)
如果你想在“b64.c”中使用函数,你应该从“b54.c”中删除主函数

C应用程序需要一个main()函数。您的文件b64.c看起来像一个自给自足的c程序,因此您不需要test.c。只需编译并运行b64.c

看起来你的
main
没有做任何事情;为什么你需要你的测试文件呢?看这里:我知道这个main没有任何作用,重复的定义导致了错误。然而,在任何实际项目中,我们不需要定义自己的主方法吗?因此,当我们尝试包含这些源代码时,它会导致错误?在任何实际的项目中,您都不会尝试合并实际的第三方程序,而只是合并第三方库。而且,设计成库的东西不会有自己的
main()
方法。(它也不会被
使用#包括
将源代码添加到项目源代码中。)谢谢。这是我问题的根源,将给定的源代码解释为相当于一个小型库。你所说的“链接它们”是什么意思?我理解在命令行或make中包含原型/调用它们/编译它,但不确定链接它们是什么意思。我不知道您的环境,因此我将假设
gcc
(Microsoft Visual Studio以类似的方式工作)。如果您有两个文件(分别称为
foo.c
bar.c
),可以使用
gcc-cfoo.c
gcc-cbar.c
编译它们。它们生成对象文件
foo.o
bar.o
。然后,您必须使用
gcc-o prog foo.o bar.o
解析从一个文件到另一个文件的引用,其中
prog
是最终的可执行文件。假设您在
bar.c
中定义了一个函数
square
,并从
foo.c
调用该函数。这些步骤将解析引用,最后一步将被称为链接。是的,但我将如何在我自己的项目中实际使用b64.c的函数?删除b64.c中的主函数并调用模块中的其他函数,或者使用b64.c作为起点并在main()中添加/替换您的功能。
test.c:4:5: error: redefinition of ‘main’
b64.c:495:5: note: previous definition of ‘main’ was here
test.c: In function ‘main’:
test.c:5:1: error: number of arguments doesn’t match prototype
b64.c:495:5: error: prototype declaration