一、报错信息
Implicit declaration of function 'eg68' is invalid in C99
二、报错原因
该警告明确告诉我们在C99的规范中,不允许出现隐含声明的用法。这是C99规范中增加的规则,不过即便不遵守此规则,也仅仅是一个警告而已。
什么是隐含声明呢,也很简单,就是你调用函数的c文件中,没有正确包含对应的头文件。一般来说,c,c++都会将类,函数,的声明放在头文件中,这样在需要的时候包含对应头文件就可以了,在编译器的前期处理中,需要通过头文件来建立一些函数,变量,类的表,如果调用到了声明中没有的函数,编译器会认为是有危险的,显而易见,如果直接调用函数,在运行期间会出现程序异常。
因此强烈建议大家不要忽略这个警告,更不要象个别文章建议的那样把编译环境配置成C89,这样隐患依然存在。
一开始我一直忽略这个警告,但是当我更新XCode之后,原来可以运行的代码 直接就报错了!!!
三、解决方案
由于我是调用的另一个源文件中的函数,所以这里我直接用 extern
就解决了问题。
1、method.c
int eg68(){
printf("调用eg68()方法");
return 0;
}
1、main.c
#include <stdio.h>
int main(){
extern int eg68(); // 用extern 来导入其他源文件的函数 extern + 函数类型 + 函数名();
eg68();
}
【注】:一个源文件想要调用其他源文件,如果用 #include“ ”
的方法会发生错误,错误的原因在于 重定义
。