C语言为什么无法include另一个源代码文件

第一个程序try1

#include<stdio.h>
#include"try2.c"
int main()
{
    int i;
    scanf("%d",&i);
    printf("%d\n",jc(i));
}

第二个程序 try2

#include<stdio.h>
int jc(int a)
{
    int b=a;
    while(a-->1)
    {
        b*=a;
    }
    return b;
}

报错:
||=== Build file: "no target" in "no project" (compiler: unknown) ===|
F:Ctry1.o:try1.c|| undefined reference to `jc'|
||error: ld returned 1 exit status|
||=== Build failed: 2 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
想试一下一起编译两个源文件,为什么不成功?

阅读 8.6k
5 个回答

这我以前也想过,首先你看下这个:http://blog.csdn.net/laojiu_/...

然后再回到你的问题,为何不可以在一个a.c里再包含一个b.c文件呢?我们知道include的作用简单来说就是把该文件内容在include位置全数展开,此时若可以进入.obj链接过程,链接器就会发现有两份b.c文件,一份是b.c自己的,另一份是已包含在a.c里的,这不就是重定义了么。

所以,在一个a.c里再包含一个b.c文件这种做法是错误的,应该包含.h文件。

extern

#include <stdio.h>
#include "try2.c"
extern int jc(int); // 声明 jc 在外部定义
int main()
{
    int i;
    scanf("%d",&i);
    printf("%d\n",jc(i));
}

图片描述
@刘毅

因为你没有指定或安装编译器。。。

你大概用的是 Code::Blocks?

http://wiki.codeblocks.org/in... 这里可能对你有帮助。

Code::Blocks 是一个 IDE、Editor,不是一个编译器。

新手上路,请多包涵

夏几把扯淡,我用keil uvision5就可以!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏