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

为什么不去掉#include "test.c"会报错

#include <stdio.h>

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

{

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

}

int main()

{

say();

return 0;

}

https://img1.sycdn.imooc.com//5d3982a000017c5a14880776.jpg

https://img1.sycdn.imooc.com//5d39837e000156c607120576.jpg

正在回答

3 回答

不怪,只不过是环境惹得祸。vs的集成开发环境是多线程(面向对象学习后你就晓得了)编译的,适合大型项目开发。你可以理解编译test.c文件和其他文件是同时进行的。当编译test.c文件时并未找到printLine()的声明或定义(因为这时候main.c文件还没有编译完成),只能假设printLine()的返回值是int类型(为啥假设int类型,,,等你有机会了问比尔·盖茨吧。),而在编译main.c文件时找到了printLine()的定义,但是printLine()的定义却是void,导致再次定义失败。

解决方法:在test.c文件中,say()前添加声明  void printLine(); 挡掉vs集成开发环境的自作主张。

也不错,你可以理解c函数分两级内部(static)、外部(extern 默认)。函数被static标记后就被固定在test.c文件中了,就不能再默认跨文件调用了。想要调用就要引入文件,也就是#include "test.c"。

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

https://img1.sycdn.imooc.com//5d3984c200012af705470134.jpg

去掉之后出现say未定义。。。


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

小小疾飞

我也感到好奇怪,左下角没去掉的。看其他大神怎么回答吧。
2019-07-26 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么不去掉#include "test.c"会报错

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