问答详情
源自:5-13 内部函数与外部函数

到底是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();


提问者:qq_Guardianship_0 2015-07-18 13:58

个回答

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

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

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