为什么不去掉#include "test.c"会报错
#include <stdio.h>
extern void printLine() //这里定义的方法对吗?
{
printf("**************\n");
}
int main()
{
say();
return 0;
}
#include <stdio.h>
extern void printLine() //这里定义的方法对吗?
{
printf("**************\n");
}
int main()
{
say();
return 0;
}
2019-07-25
不怪,只不过是环境惹得祸。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"。
举报