在C中使用“隐式声明功能”警告有什么含义?

在C中使用“隐式声明功能”警告有什么含义?,第1张

概述正如问题所述,具有“隐含的功能宣告”警告含义究竟是什么?我们只是在 gcc上加了警告标志,发现了很多这些警告的例子,我很好奇在修复它们之前可能会引起什么类型的问题? 另外,为什么这是警告而不是错误. gcc如何成功链接这个可执行文件?正如您在下面的示例中所看到的,可执行文件按预期运行. 以下面两个文件为例: 在file1.c #include <stdio.h>int main(void) 正如问题所述,具有“隐含的功能宣告”警告的含义究竟是什么?我们只是在 gcc上加了警告标志,发现了很多这些警告的例子,我很好奇在修复它们之前可能会引起什么类型的问题?

另外,为什么这是警告而不是错误. 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中使用“隐式声明功能”警告有什么含义?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1212823.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存