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

来源:5-13 内部函数与外部函数

qq_Guardianship_0

2015-07-18 13:58

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();


写回答 关注

2回答

  • onemoo
    2015-07-18 14:18:27
    已采纳

    是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文件,就会把函数定义也包含进来,这样可能造成程序中有多处该函数的定义,这是不合法的,编译器会报重复定义错误。

    onemoo 回复慕后端332...

    如果你看了这里的课程,但它并没有讲明白这些,那么——这就侧面证明这个“C语言入门”课程非常糟糕...

    2016-11-25 14:56:15

    共 3 条回复 >

  • 乔帮主
    2015-07-18 14:02:30

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

    onemoo 回复qq_Gua...

    这个extern修饰的也不是变量啊,它是修饰函数的。再者,函数前无需写上extern,默认就是extern的。

    2015-07-18 14:20:25

    共 3 条回复 >

C语言入门

C语言入门视频教程,带你进入编程世界的必修课-C语言

926020 学习 · 20793 问题

查看课程

相似问题