我想在另一个文件中包含.c文件.有可能吗?如果我在.c文件中包含头文件,它可以正常工作,但如果我在另一个.c文件中包含.c文件,它也不能正常工作.
我正在使用Visual Studio,我收到以下错误:
main.obj : error LNK2005: _sayHello already defined in sayHello.obj
/* main.c */
#include "sayHello.c"
int main()
{
return 0;
}
/* sayHello.c */
#include <stdio.h>
void sayHello()
{
printf("Hello World");
}
Run Code Online (Sandbox Code Playgroud)
我不知道这个错误可能意味着什么.是时候问更高级的C编码员了.:)
Joh*_*ode 20
我想在另一个文件中包含.c文件.
不,你没有.你真的,真的没有.不要采取任何走上这条道路的步骤; 它只会以痛苦和痛苦结束.这对于像你的例子这样的琐碎程序来说是不好的做法,对于任何真正复杂的程序来说都是如此.一个文件中的一个简单的单行更改将要求您重建该文件和包含它的任何内容,这是浪费时间.您失去了控制数据和功能访问的能力; 包含的.c文件中的所有内容对包含文件都是可见的,甚至声明了函数和文件范围变量static.如果最终包含一个.c文件,其中包含另一个.c文件,其中包含另一个.c文件,那么weiter,您最终可能会使用一个太大而无法让编译器处理的转换单元.
单独的编译和链接是一个明确的好事.您应该包含在.c文件中的唯一文件是描述接口的头文件(类型定义,函数原型声明,宏定义,外部声明),而不是实现.
它有效,但您需要小心如何构建程序.此外,正如人们在评论中指出的那样,这通常被认为是一个坏主意.这是意料之外的,它会产生这样的问题.很少有benetfits,特别是对于看似简单的程序.你应该重新考虑这种方法.
做完这样的事情之后,你应该只编译main.c,而不是试图将它与sayHello.c你似乎正在做的编译结果联系起来.
您可能需要告诉Visual Studio 从构建中排除后一个文件.
小智 5
是的,任何“.c”文件都可以包含到另一个程序中。因为在程序中包含“.h”文件,例如“stdio.h”。之后我们就可以调用写入这个外部文件的函数了。
测试.c::
#include<stdio.h>
#include<conio.h>
void xprint()
{
printf("Hello World!");
}
Run Code Online (Sandbox Code Playgroud)
main.c::
#include "test.c"
void main()
{
xprint();
getch();
}
Run Code Online (Sandbox Code Playgroud)
输出::世界你好!
您可能定义了该函数两次
void sayHello()
{
printf("Hello World");
}
Run Code Online (Sandbox Code Playgroud)
一份在当前文件中,一份在 sayhello.c 中
您必须删除一个定义。