在C中隐式声明函数和警告的含义是什么? [英] What are the implications of having an "implicit declaration of function" warning in C?
本文介绍了在C中隐式声明函数和警告的含义是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
正如问题所述,具有"隐式函数声明"警告的确切含义是什么?我们刚刚调高了GCC身上的警告标志,发现了相当多的这些警告的例子,我很好奇在修复它们之前,这可能会导致什么类型的问题?
另外,为什么这是一个警告而不是一个错误。GCC怎么能成功链接到这个可执行文件呢?正如您在下面的示例中看到的,可执行文件的功能与预期一致。以以下两个文件为例:
文件1.c
#include <stdio.h>
int main(void)
{
funcA();
return 0;
}
文件2.c
#include <stdio.h>
void funcA(void)
{
puts("hello world");
}
编译输出(&A)
$ gcc -Wall -Wextra -c file1.c file2.c
file1.c: In function 'main':
file1.c:3: warning: implicit declaration of function 'funcA'
$ gcc -Wall -Wextra file1.o file2.o -o test.exe
$ ./test.exe
hello world
推荐答案
如果函数具有与隐式声明匹配的定义(即它返回int
并且有固定数量的参数,并且没有原型),并且您总是使用正确的参数数量和类型调用它,则没有负面影响(除了不好的、过时的风格)。
ie,在上面的代码中,该函数被声明为:
int funcA();
由于此与函数定义不匹配,因此从file1.c
对funcA()
的调用会调用未定义的行为,这意味着它可能会崩溃。在您的体系结构上,使用您当前的编译器,它显然不会改变--但是体系结构和编译器会发生变化。
正确声明您的函数是一件好事--如果没有其他原因,它允许您为您的函数提供原型,这意味着如果您使用错误的参数数量或类型调用它,编译器必须诊断它。
这篇关于在C中隐式声明函数和警告的含义是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文