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

这一节不懂?

基本都是两种方法:
第一:hello文件,去掉第二行,第三行static改为extern;
第二:hello文件,第三行static改为extern;test文件,第二行void前加上static。
具体原理我不懂,求大神指教。

正在回答

2 回答

关于这道题的理解:

图一图二分别为两个源文件

图一中末尾处调用了say(),由于say()在第二个源文件中是外部函数,因此say有两个来源,其中之一为源文件1引用里的say,另一是源文件2里的say,因此报错。

解决方式:

1. 干脆删去引用,将say看作外部函数直接从源文件2中调用

2. 将源文件2的say改为内部函数,这样源文件1末位1处的say()一定是调用的引用处的数据块里的say,而不是源文件2里的say,因为内部函数只能在所在的源文件中调用。


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

第一步(hello.c)static——extern ,这个易懂,然后细心观察一下hello.c中的第二行(#include"text".c【意思是包括(含)text.c文件,引用了一次文件了】) 再看一下第九行使用函数say();使用文件中函数会再次【调用text.c】) ,所以就变成了重复调用text.c这时系统就会报错。所以我们应该将text.c中的第2行(erxtern(默认)) void say()改成static void say()[这里的static是对函数的作用范围的一个限定限定该函数只能在其所处的源文件中使用]   这样就只是#include"text".c调用另一个文件(include的作用就是把另一个文件的内容全部复制过来),下面第九行使用函数say()就不能调用另一个文件了因为已经改为局部的,但是已经复制过来了,say()已成为hello.c的一部分,所以还是能调用say()

第二个方法就是把hello.c的第二行引用注释(#include"text.c")去掉  这样下面使用say()函数的时候就只是引用一次另一个文件就不会重复了,然后把hello.c中的void printLine()前加上关键字【extern】,因为text.c中的say()前没有关键字,所以系统默认为extern。这样外部函数就可以随意被调用了。


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

银河与星星

还是懵懵的……
2019-12-05 回复 有任何疑惑可以回复我~
#2

苏洋哈哈 回复 银河与星星

我想吃掉你,小甜饼
2019-12-24 回复 有任何疑惑可以回复我~
#3

抹茶松露冰激凌 回复 苏洋哈哈

我想吃掉你
2020-01-16 回复 有任何疑惑可以回复我~
#4

慕粉2875371 回复 抹茶松露冰激凌

我想吃掉你,抹茶松露冰激凌
2020-01-16 回复 有任何疑惑可以回复我~
查看1条回复

举报

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

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

进入课程

这一节不懂?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信