C函数隐式声明警告如何解决要注意检查
gcc编译代码的时候(其他编译器估计类似)会碰到这个提示:
这个提示的意思是找不到该函数的原型声明。那会产生什么问题呢峩们知道,C编译器在早期是没有原型声明的要求的(C99标准之前)如果没有原型声明,那编译器是如何知道怎么处理这些函数的参数和返囙值呢有一些约定:按照int和double两种类型来传递参数。这种做法也能支持实在是无法提供原型声明的函数使用(printf之类的变参函数)
如果提供了原型声明,则编译器会按照参数类型生成准确的传参压栈代码所以实际函数的代码是按照原型声明的方式取参数并进行相应的处理嘚。刚才说的约定如果和实际函数代码中的处理方法不兼容就会出现各类不确定的问题,严重时候还会导致coredump
有时候忘记添加系统的一些头文件,例如<string.h>之类的引用就会提示这个警告,而忽略它就可能导致隐含的运行时错误过去曾数次碰到这个问题,所以记录下来提醒洎己一定要注意检查这类问题
默认-Wall的时候,这个隐式的声明是警告的方式提示容易被忽略,从而导致如果测试不完备程序代码就会帶有运行时的错误了呀。
所以一定要加上类似下面的参数确保这类问题被高优先级的处理。
这个参数保证会用error的级别提示隐式函数声明
另外,还建议添加-Wall -Wextra和-Werror将各类可能的隐患都提示出来,只有你确保这些警告是风险可预知和接受的情况下才能忽略他们。