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

这个题为什么要注释掉第二行代码

这道题是怎么运行的,int函数里没有调用printLine,而且运行结果是怎么出来的,求大佬解释。

正在回答

1 回答

因为 static的意思是内部函数(静态),外部想调用他是不可以的。可以理解为一种自控的状态,不受别人的控制。反之extren是外部函数(动态),可以随意调动,可以被人操控和使用。现在我们是在hello.c中调用text.c的(int) printLine函数因为他被调用了,所以它(printLine)是被使用了。要把他定义为外部函数(extern),所以要改的第一次为:(hello.c)static——extern 第二细心观察一下hello.c中的第二行(#include"text".c【包括(含)text.c文件】) 再看一下第九行(say();【调用text.c】) 细心观察一下text.c的源代码你会发现其实这俩行的目的都是一样的在调用(hello.c调用text.c),所以就变成了重复调用text.c这时系统就会报错。所以我们应该将text.c中的第2行(erxtern(默认)) void say()改成static void say()[这里的static是对函数的作用范围的一个限定限定该函数只能在其所处的源文件中使用]   这样就不会和前面的起冲突了。  

第二个方法就是把hello.c的第二行引用注释(#include"text.c")去掉  这样只要把hello.c中的void printLine()前加上关键字【extern】,因为text.c中的say()前没有关键字,所以系统默认为extern。这样外部函数就可以随意被调用了。

希望对你有帮助!


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

宝慕林5318477

大佬你好我想问下,为什么 “因为text.c中的say()前没有关键字,所以系统默认为extern”呢?是调用了才会这样默认的吗?还是每个函数都是这样默认的?
2019-04-13 回复 有任何疑惑可以回复我~
#2

qq_慕先生9035235 回复 宝慕林5318477

C语言规定,在没有指定函数的作用范围时,系统会默认认为是外部函数,因此当需要定义外部函数时extern也可以省略。
2019-04-14 回复 有任何疑惑可以回复我~
#3

慕圣1432959

text.c中say()变为静态函数主函数还能调用他吗?还是我理解错误,麻烦解释一下。
2019-05-20 回复 有任何疑惑可以回复我~
#4

qq_恒牙_0

回复 慕圣1432959不能,主函数和text中say()不在一个源文件中
2019-07-06 回复 有任何疑惑可以回复我~
#5

qq_慕用5232731

因为第二行已经调用了test.c,如果test.c中的say()不改成static类型的话,那么hello.c中的第九行中的say()就会被系统认为再一次调用了test.c文件,从而报错;如果改为static类型,那么hello.c中的第九行中的say()就只能从第二行已调用的test.c文件中调用,从而避免了二次调用。个人见解。。。
2020-01-29 回复 有任何疑惑可以回复我~
#6

慕田峪9069542 回复 慕圣1432959

我也这里不明白
2020-12-18 回复 有任何疑惑可以回复我~
查看3条回复

举报

0/150
提交
取消

这个题为什么要注释掉第二行代码

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