同样的代码为什么别人的就对了 引用的代码我没动

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

海问香00

2019-02-07 15:45

#include <stdio.h>

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

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

{

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

}

int main()

{

    say();

    return 0;

}


写回答 关注

4回答

  • 远空的你
    2019-03-03 11:56:05

    如果你“  //#include "test.c"   //引用test.c  ”文件这一语句就可以不用加static.你编译也不会错

    原因是1test.c中需要引用hello.c中的printline();  而这里就是属于引用外部函数

            2而我在test.c中加static就确定了程序的执行顺序也就是test.c先引用hello.c中的printline(),而不是hello.c先引用say.

            3我认为这里会报错是因为重复引用和程序的不确定定性而产生的而且你会发现test.c中没有main函数。

    前面学的这里不说了

    在此声明我也才刚学C语言如果有更好的见解一定要和我分享啊!!

    有错误请指出谢谢


  • 林小七_sorina
    2019-02-21 13:45:17

    注意到第二个源文件也就是test.c【后面将用T代替】调用了第一个源文件hello.c【后面将用H代替】中的函数,因此我们先将H中被T调用的函数printLine()修改为外部函数也就是加上一个extern,这样T也就是一个正常的源文件了。   现在讨论两种情况:

    A。当我们把T编译为静态函数的时候——static say()   ,我们在H若要使用T的这个静态函数,这需要将他调用过来,而一个静态函数是无法直接调用的,此时我们需要先引入say()函数所在的源文件,也就是H中的第二行代码的用意。     

    B。当我们把T编译为动态函数的时候——say()或者extern say()【因为extern可以省略】,我们若要在H中使用T的这个函数say()那么我们可以直接调用,因为say()是一个外部函数,无需引入其所在的源文件T也就是不需要H的第二行,因此会有人说“只要把第二行注释掉就行了”其实这句话的前提是say()是一个外部函数。


  • 远空的你
    2019-02-09 14:37:58

    就是你必须明确这两个源文件的关系,以及他们如何调用。不然会出现程序混乱!

  • 远空的你
    2019-02-09 14:32:52

    把第二个改为

    #include <stdio.h>

    static void say(){

        printLine();

        printf("I love imooc\n");

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

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

        printLine();

    }

    在test.c的里 void say()前加上static就可以了

    慕妹1447...

    回复 HarryDong 对哇 test.c被引用为什么要加static

    2019-03-07 08:50:44

    共 4 条回复 >

C语言入门

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

926026 学习 · 20793 问题

查看课程

相似问题