为了账号安全,请及时绑定邮箱和手机立即绑定

到底是hello.c调用test.c的,还是test.c调用hello.c的函数

hello.c

#include <stdio.h>

#include "test.c"   //引用test.c文件

extern void printLine()     //这里定义的方法对吗?

{

   printf("**************\n");   

}

int main()

{

    say();

    return 0;

}

test.c

#include <stdio.h>

void say(){

    printLine();

    printf("I love imooc\n");

    printf("good good study!\n");

    printf("day day up!\n");

    printLine();


正在回答

4 回答

是hello.c中的main函数调用say函数,这个say函数是定义在test.c中的。本质上是函数间调用,与文件无关。程序永远是从main函数开始运行的。

你这代码中有很多错误和不合理之处:

不应该直接在代码中include另一个函数定义文件,这样做会将test.c中的内容都包含到hello.c中,所以实际上最后main和say函数都是定义在hello.c中的。

而且在test.c中,say函数调用了printLine函数,但在之前却并没有声明printLine(声明在hello.c中)。

声明函数时不用写extern,函数默认就是external的(准确地说是previous linkage)。


正确的做法是:

一般来说将函数的定义写在某个.c文件中,将其声明写在.h中。函数在使用前需要函数声明,所以将函数声明(非定义)写到一个.h文件中,称为头文件。在其他需要调用这个函数的文件中只需include这个头文件就可以得到函数声明了。如果像你代码中那样直接include进.c文件,就会把函数定义也包含进来,这样可能造成程序中有多处该函数的定义,这是不合法的,编译器会报重复定义错误。

3 回复 有任何疑惑可以回复我~
#1

qq_Guardianship_0 提问者

非常感谢!
2015-07-18 回复 有任何疑惑可以回复我~
#2

慕后端3326841

这个解释的好明白,赞!!!
2016-11-24 回复 有任何疑惑可以回复我~
#3

onemoo 回复 慕后端3326841

如果你看了这里的课程,但它并没有讲明白这些,那么——这就侧面证明这个“C语言入门”课程非常糟糕...
2016-11-25 回复 有任何疑惑可以回复我~

这个是hello.c调用test.c啊

0 回复 有任何疑惑可以回复我~
#1

qq_Guardianship_0 提问者

extern不是外部变量吗,它和动态变量有什么区别啊
2015-07-18 回复 有任何疑惑可以回复我~
#2

乔帮主 回复 qq_Guardianship_0 提问者

http://blog.csdn.net/zhangzheng0413/article/details/7569226你看下这里面吧
2015-07-18 回复 有任何疑惑可以回复我~
#3

onemoo 回复 qq_Guardianship_0 提问者

这个extern修饰的也不是变量啊,它是修饰函数的。再者,函数前无需写上extern,默认就是extern的。
2015-07-18 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

到底是hello.c调用test.c的,还是test.c调用hello.c的函数

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信