我们不能包含 .c 文件吗?

Can't we include .c file?

本文关键字:文件 不能 包含 我们      更新时间:2023-10-16

今天我在那里接受了一次采访,他们问我可以.c file包含在源文件中吗?我说yes.因为几年前我在他们包含.c file的一些项目中看到了同样的情况。但刚才我也在尝试。

美国广播公司

#include<stdio.h>
void abc()
{ printf("From ABC() n"); }


主.c

#include<stdio.h>
#include "abc.c"
int main()
{   void abc();
    return 0;
}

收到错误:

D:Embedded...abc.c :- multiple definition of 'abc'

哪里出了问题?

我写了一个abc.h

文件(abc.h的正文是{ extern void abc(void); }),并将文件包含在abc.c中(注释掉#include abc.c)。工作正常。

按如下方式操作:

abc.c

#include <stdio.h>
void abc()
{printf("From ABC() n");}

main.c

#include<stdio.h>
#include "abc.c"
int main()
{   
    abc();
    return 0;
}

(不需要头文件)

然后,要编译,您只需编译main.c .不要尝试同时编译abc.cmain.c,因为那样你就会定义两次abc()函数。

您需要了解#include基本上是"复制粘贴",仅此而已。如果你告诉它#include "abc.c",它将简单地获取abc.c的内容,并将它们"粘贴"到你的main.c文件中。因此,使用上述 for main.c ,在预处理器处理它之后,您的main.c将如下所示(我忽略了#include <stdio.h> s):

#include<stdio.h>
#include <stdio.h>
void abc()
{printf("From ABC() n");}
int main()
{   
    abc();
    return 0;
}

这是一个有效的程序。

也就是说,您通常不应该这样做;您应该单独编译所有.c文件,然后才将它们链接在一起。

包含 C 文件

是完全有效的,只要您不尝试自行编译包含的 C 文件,然后将其与包含另一个文件的 C 文件中的目标文件链接在一起。

如果这样做,您将在两个文件中定义相同的符号(通常是函数),这将导致您发布的错误。

如果您有多个源文件,则通常不包含它们,而是单独编译它们。然后,链接器将目标文件合并到单个可执行文件(或库中)。

您可以包含任何扩展名的文件。

在您的程序中,您在 main () 中重新定义了void abc();,而只是将语句abc ();

您可以包含任何您喜欢的内容,预处理器不关心文件扩展名。将标头命名为".h",将源文件命名为".c"或".cpp"只是一些传统。

只需要确定,在编译整个项目后,你不会遇到链接器问题(例如,同时向编译器提供"abc.c"和"main.c"会导致函数的多个定义)。