我知道有两种解决办法(不知道是否真的正确),但是有一个问题不解。

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

初心者Kay

2018-06-29 02:14

两种方法解决,第一种,将hello.c中的#include "test.c";这一行删去,在函数printLine之前加上extern(事实上可省略)使其成为外部函数,使其能被test.c调用从而在test.c中完成函数say,函数say默认为外部函数,能被(删去#include "test.c"的)hello.c调用,从而完成。
第二种,在hello.c中只将函数printLine改为外部函数使其能在test.c中被调用,而在test.c中,将函数say改为test.c的内部函数,即在其之前加上static。由于hello.c中已经包含include"test.c"所以能直接调用该函数。

不知道我的这两个思路是否正确,但是对于第二种方法,有一个问题是,(若第一种方法思路正确,成立)既然函数say默认为外部函数,那么即使不包含test.c的文件(如把#include "test.c"删去的hello.c)都能直接调用函数say(第一种方法采用),为什么包含了test.c文件的默认的hello.c文件却不能直接调用,需要先把函数say改为test.c文件的内部函数才能调用呢?

写回答 关注

2回答

  • 为年轻时吹得牛逼而努力着
    2018-07-20 10:05:17

    明白了,多谢!

  • kirito_yes
    2018-07-04 12:30:31

    我来解释一下,为什么你的第二种方法一定要改为static内部函数,如果不加,你看到报错内容了吗,https://img.mukewang.com/5b3c4bfd0001debe03830139.jpg

    因为多次定义了say()这个函数,为什么会多次定义呢?因为hello.c中已经引用了test.c这个文件,相当于把整个代码拿进去了,而hello.c和test.c在同一文件夹下,test.c的say又是外部函数,导致say()这个函数相当于外部函数同名了知道吗?那怎么解决呢,一改为静态函数,这样就可以同名了;二去掉引用test.c文件,这样就不存在多次定义了。

    qq_tor...

    还有上一位朋友说的第二个方法中,将say函数改为内部函数还是会报错,为什么/?

    2018-09-01 22:57:10

    共 3 条回复 >

C语言入门

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

926866 学习 · 21068 问题

查看课程

相似问题