什么是C语言的隐式函数声明。
在C语言中,函数在调用前不一定非要声明被调用的函数。如果没有声明的话,那么编译器会自动按照一种隐式声明的规则,为调用函数的C代码产生汇编代码。
首先说明的是,在一份优先的源代码中,编译时通常是不会出现关于函数隐式声明的警告。
因为有着严格的编程规范,防止出现这种情况
请看下面的代码样例,有什么问题吗?
#include
int main(void)
{
int val = sqrt(4);
printf("sqrt = %d", val);
}
在使用函数sqrt
时没有包含头文件
,在通过 IDE 软件编译链接时,通常会给出隐式函数声明的警告,很多初学者一般不怎么在意,只会在乎编译是否报错,因为只要能编译通过,程序就能正常运行。
然而,忽略隐式函数声明的警告程序就一定能正常运行吗?
根据隐式函数声明规则,编译器在编译时如果碰到这种问题,会自动按照一种隐式声明的规则,为调用函数的C代码产生汇编代码,或者查找与隐式声明同名的函数。
如上述的代码示例中隐式声明的函数原型为:
int sqrt(int);
而对于的同名函数原型为:
double sqrt(double);
由于隐式函数声明,函数的返回值类型和参数类型均不一样,导致了错误的调用方式,在实际运行过程中极有可能出现错误。
特别是嵌入式软件开发,会接触很多系列的MCU平台,有着不一样的IDE软件可以开发,同样的代码,如果存在函数隐式声明的情况,在不同的IDE软件编译下,可能某一个编译下载后运行正常,而另一个IDE软件编译下载后却异常了,甚至出现跑飞的情况,那么一定要关注函数隐式声明的警告。
-Werror=implicit-function-declaration
将警告设置为错误全部0条评论
快来发表一下你的评论吧 !