问答详情
源自:5-13 内部函数与外部函数

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

#include <stdio.h>

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

{

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

}

int main()

{

say();

return 0;

}

https://img4.mukewang.com/5d3982a000017c5a14880776.jpg

https://img1.mukewang.com/5d39837e000156c607120576.jpg

提问者:满慕星辰 2019-07-25 18:25

个回答

  • 忘川之梦
    2019-09-16 00:32:43

    不怪,只不过是环境惹得祸。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"。

  • 我是男神胡大人
    2019-08-08 10:58:18

    你安装的是哪个版本啊?为什么会有中文,而且底色是黑色的?


  • 满慕星辰
    2019-07-25 18:30:56

    https://img.mukewang.com/5d3984c200012af705470134.jpg

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