另外,为什么这是警告而不是错误. gcc如何成功链接这个可执行文件?正如您在下面的示例中所看到的,可执行文件按预期运行.
以下面两个文件为例:
在file1.c
#include <stdio.h>int main(voID){ funcA(); return 0;}@H_403_18@file2.c中
#include <stdio.h>voID funcA(voID){ puts("hello world");}@H_403_18@编译&产量
$gcc -Wall -Wextra -c file1.c file2.cfile1.c: In function 'main':file1.c:3: warning: implicit declaration of function 'funcA'$gcc -Wall -Wextra file1.o file2.o -o test.exe$./test.exehello world@H_403_18@解决方法 如果函数有一个与隐式声明匹配的定义(即它返回int并且具有固定数量的参数,并且没有原型),并且您总是使用正确数量和类型的参数调用它,那么没有负面影响(除了坏的,过时的风格).即,在上面的代码中,就好像函数被声明为:
int funcA();@H_403_18@由于这与函数定义不匹配,因此从file1.c调用funcA()会调用未定义的行为,这意味着它可能会崩溃.在您的架构上,使用您当前的编译器,它显然不会 – 但架构和编译器会发生变化.
GCC能够链接它,因为当函数类型改变时,表示函数入口点的符号不会改变(再次……在当前架构上,使用当前的编译器 – 尽管这很常见).
正确地声明你的函数是一件好事 – 如果没有其他原因它允许你给你的函数一个原型,这意味着如果你用错误的数量或类型的参数调用它,编译器必须诊断它.
总结以上是内存溢出为你收集整理的在C中使用“隐式声明功能”警告有什么含义?全部内容,希望文章能够帮你解决在C中使用“隐式声明功能”警告有什么含义?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)