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

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

两种方法解决,第一种,将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 回答

明白了,多谢!

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

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

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

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

寒山远火

请问 外部函数同名了 是什么意思?
2018-08-07 回复 有任何疑惑可以回复我~
#2

qq_tor_1

我想问一下,#include"test.c"起的作用就是从test.c中调取文件的吗?是不是也因为如此,say函数由于是外部函数所以无法这样调用以致报错?
2018-09-01 回复 有任何疑惑可以回复我~
#3

qq_tor_1

还有上一位朋友说的第二个方法中,将say函数改为内部函数还是会报错,为什么/?
2018-09-01 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C语言入门
  • 参与学习       927298    人
  • 解答问题       21537    个

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

进入课程

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

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号