看到我创建了一个有几个.h&的库。几个.c文件。
现在在某些情况下,我没有删除说
的警告警告:隐式声明函数'getHandle'
现在我想问你,这会导致我的图书馆二进制文件出现任何问题吗?
它会对嵌入式平台或其他任何地方的库的执行产生负面影响吗?
答案 0 :(得分:4)
在C90中,对没有可见声明的函数的调用会创建一个函数的隐式声明,返回int并获取参数的提升类型。例如,如果您的getHandle
函数返回一个指针,那么编译器将生成代码,假设它返回int
。将结果分配给指针对象应该至少触发另一个警告。它可能正常工作(如果int和指针类型的大小相同,并且int和指针函数结果以相同的方式返回),或者它可能会出错(例如,如果int为32位且指针为64)位,或者如果指针结果在68K样式的地址寄存器中返回。)
C99标准从语言中删除了隐式int。调用没有可见声明的函数是违反约束的,需要诊断并可能导致您的程序被拒绝。
如果您只是解决问题,那么如果您不解决问题,则不必浪费时间弄清楚它是如何以及是否可行。
答案 1 :(得分:3)
在这种情况下,编译器无法验证getHandle
的使用是否正确 - 也就是说,返回值和参数是否属于正确的类型和计数。它只会接受你调用它的方式,而没有明确说明这是正确的方法。
添加函数的原型是一种告诉编译器这是函数的预期用法的方法,并且编译时错误不符合该函数。
如果调用它的方式与函数期望其参数的方式不匹配,它可能会导致一些令人讨厌的错误。最可能的影响是堆栈损坏。
如果不匹配,则在运行时不会产生任何差异。