C 中“隐式声明函数”警告有何含义?

2024-01-27

正如问题所述,“隐式函数声明”警告究竟意味着什么?我们刚刚调高了 gcc 上的警告标志,发现了很多这些警告的实例,我很好奇在修复它们之前这可能会导致什么类型的问题?

另外,为什么这是一个警告而不是错误。 gcc 如何能够成功链接这个可执行文件?正如您在下面的示例中看到的,可执行文件按预期运行。

以下面两个文件为例:

file1.c

#include <stdio.h>

int main(void)
{
   funcA();
   return 0;
}

file2.c

#include <stdio.h>

void funcA(void)
{
   puts("hello world");
}

编译输出

$ 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并且有固定数量的参数,并且没有原型),并且您总是使用正确数量和类型的参数来调用它,那么就不会产生任何负面影响(除了糟糕的、过时的风格)。

即,在上面的代码中,就好像该函数被声明为:

int funcA();

从此doesn't匹配函数定义、调用funcA() from file1.c调用未定义的行为,这意味着它可能会崩溃。在您的架构上,使用当前的编译器,显然不会 - 但架构和编译器会发生变化。

GCC 能够链接它,因为当函数类型更改时,表示函数入口点的符号不会更改(同样......在您当前的体系结构上,使用当前的编译器 - 尽管这很常见)。

正确声明你的函数是一件好事 - 如果没有其他原因,它允许你为你的函数提供一个原型,这意味着如果你使用错误数量或类型的参数调用它,编译器必须对其进行诊断。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C 中“隐式声明函数”警告有何含义? 的相关文章

  • 有没有快速创建集合的方法?

    目前我正在创建一个像这样的新集 std set a s s insert a1 s insert a2 s insert a3 s insert a10 有没有办法创建s在一行 int myints 10 20 30 40 50 std s
  • QCombobox 向下箭头图像

    如何更改Qcombobox向下箭头图像 现在我正在使用这个 QSS 代码 但这不起作用 我无法删除向下箭头边框 QComboBox border 0px QComboBox down arrow border 0px background
  • 使用 Enumerable.OfType() 或 LINQ 查找特定类型的所有子控件

    Existed MyControl1 Controls OfType
  • 类特定的新删除运算符是否必须声明为静态

    标准中是否要求类特定的 new new delete 和 delete 是静态的 我可以让它们成为非静态成员运算符吗 为什么需要它们是静态的 它们被隐式声明为静态 即使您没有键入 static
  • 如何在 SqlDataReader.Read() 期间从死锁异常中恢复

    我的 NET 应用程序的事件日志显示 它在从 Sql Server 读取数据时偶尔会出现死锁 这种情况通常非常罕见 因为我们已经优化了查询以避免死锁 但有时仍然会发生 过去 我们在调用ExecuteReader函数在我们的SqlComman
  • 为什么这个没有特殊字符的正则表达式会匹配更长的字符串?

    我正在使用此方法来尝试查找匹配项 例如 Regex Match A2 TS OIL TS OIL RegexOptions IgnoreCase Success 我得到了真实的结果 我很困惑 我认为这应该返回 false 因为模式中没有特殊
  • 类的成员复制

    在学习 复制成员 概念时 书中给出了如下说法 此外 如果非静态成员是引用 const 或没有复制赋值的用户定义类型 则无法生成默认赋值 我不太明白这个声明到底想传达什么 或者说这个说法指的是哪一种场景 谢谢 该语句与编译器自动为您编写的类
  • vs2008 c#:Facebook.rest.api如何使用它来获取好友列表?

    如何在此基础上取得进一步的进步 获取好友列表的下一步是什么 string APIKey ConfigurationManager AppSettings API Key string APISecret ConfigurationManag
  • 如何获取 QTableView 的标题列表?

    我有一个QTableView我的对话框中的对象 我需要访问该表的水平标题并将它们放入QStringList object 尽管进行了大量搜索 但我在 Qt 文档中找不到如何获取此标头列表 编辑 我发现的最接近的地方是this https w
  • 单例模式和 std::unique_ptr

    std unique ptr唯一地控制它指向的对象 因此不使用引用计数 单例确保利用引用计数只能创建一个对象 那么会std unique ptr与单例执行相同 单例确保只有一个实例属于一种类型 A unique ptr确保只有一个智能指针到
  • 在 JSQMessagesViewController 中显示 LocationMediaItem

    我刚刚尝试实施LocationMediaItem in my Xamarin iOS应用程序使用JSQMessagesViewController 一切都很顺利 唯一的问题是UICollectionView应该显示位置的单元格永远停留在加载
  • C++ php 和静态库

    我创建了一个library a 其中包含 cpp 和 h 文件 其中包含很多类 嵌套类和方法 我想在 php 示例中包含这个静态库并尝试使用它 我想提一下 我是 php 新手 我已经在 test cpp 文件中测试了我的 libray a
  • 每个租户的唯一用户名和电子邮件

    我正在使用以下代码编写多租户应用程序ASP NET Core 2 1 我想覆盖默认的与用户创建相关的验证机制 目前我无法创建多个具有相同的用户UserName My ApplicationUser模型有一个名为TenantID 我想要实现的
  • C# 中的 strstr() 等效项

    我有两个byte 我想找到第二个的第一次出现byte 在第一个byte 或其中的一个范围 我不想使用字符串来提高效率 翻译第一个byte to a string会效率低下 基本上我相信就是这样strstr 在 C 中做 最好的方法是什么 这
  • 我可以让 ungetc 取消阻止阻塞的 fgetc 调用吗?

    我想在收到 SIGUSR1 后使用 ungetc 将 A 字符重新填充到标准输入中 想象一下我有充分的理由这样做 调用 foo 时 stdin 中的阻塞读取不会被收到信号时的 ungetc 调用中断 虽然我没想到它会按原样工作 但我想知道是
  • 跨多个域的 ASP.NET 会话

    是否有合适的 NET 解决方案来在多个域上提供持久服务器会话 即 如果该网站的用户在 www site1 com 下登录 他们也将在 www site2 com 下登录 安全是我们正在开发的程序的一个问题 Thanks 它是否需要在会话中
  • 使用taskkill停止Windows服务

    我需要帮助来使用 C 终止 Windows 服务 现在要终止该服务 请使用以下选项 从命令 sc queryex ServiceName 发现后PID服务的 taskkill pid 1234 exemple f 为了便于阅读 但如果您明白
  • 每个数据库多个/单个 *.edmx 文件

    我有一个通过 ADO net 数据服务与数据库交互的项目 数据库很大 近 150 个具有依赖关系的表 该项目几年前开始 当时使用的是数据集 现在我们正在转向实体模型关系 由于我们添加了更多需要使用的表 该模型正在不断增长 这是管理这一切的正
  • QFileDialog::getSaveFileName 和默认的 selectedFilter

    我有 getSaveFileName 和一些过滤器 我希望当用户打开 保存 对话框时选择其中之一 Qt 文档说明如下 可以通过将 selectedFilter 设置为所需的值来选择默认过滤器 我尝试以下变体 QString selFilte
  • xsi:type 属性搞乱了 C# XML 反序列化

    我使用 XSD exe 根据 XML 架构 xsd 文件 自动生成 C 对象 我正在反序列化 OpenCover 输出 但其中一个部分类未正确生成 这是导致异常的行

随机推荐

  • 异步多线程异常处理?

    我希望在异步编程 beginInvoke endInvoke 中采用一种异常处理方法 其中如果任何一个线程 beginInvoke 失败 那么我希望所有其他异步处理线程停止工作 请提出一些解决方案 下面我还附上了我的示例代码 public
  • 如何与框架项目 swift 共享父(主机)项目 pod?

    我正在开发框架 我已将此框架项目添加到宿主项目中 现在我想将 cocoapods pod 框架 添加到父 主机 项目中 并将相同的 pod 共享到子 框架 项目中 或者我可以添加一些东西到 Podfile 中 它将与子项目共享 SwiftP
  • Report Builder 3.0 SWITCH 表达式 DEFAULT/ELSE

    我正在尝试根据用户的特许经营号码显示不同的徽标 参数 UserFranNr 如果值 99 且 87 则要显示的嵌入图像是 ID0 嵌入图像名称是字符串 这适用于嵌套 IIF 但似乎是使用正确的时间 地点SWITCH 未来很可能会有更多特许经
  • 无法登录 Magento 管理员

    我已将 magento 安装在子目录中 www domain com subdir magento 该网站一度运行得非常完美 我什么也没做 直到我的客户说他无法登录到 magento admin 我从我的电脑上登录得很好 但在他的电脑上 它
  • 使用 Delphi 以编程方式添加、删除文件并将文件提交到 Subversion 存储库中

    我想以编程方式检查文件是否已版本化 并使用 Delphi 添加 删除文件并将文件提交到 subversion 存储库中 有谁有示例代码可以帮助我创建必要的函数和过程 Thanks Steve Delphi XE 集成是开源的 基于 MPL
  • 我如何从左侧切换而不使用 jquery-ui

    如何在不使用 jquery ui 的情况下从左侧切换 JavaScript document ready function button click function content slideToggle HTML div This is
  • Javascript toFixed 不四舍五入

    我正在使用 javascript 绑定到一些复选框 并且toFixed 2 没有四舍五入 有什么想法为什么不四舍五入吗 例如 如果数字是859 385它只是显示859 38代替859 39 我还读到toFixed可以根据您使用的浏览器进行不
  • 消息中的换行符

    使用Google Apps脚本 如何在变量中换行以发送邮件 换行符在msgBox Browser msgBox line 1 n line 2 请注意 您需要使用额外的反斜杠转义 n
  • React Native 应用程序崩溃,没有任何错误日志

    React Native 应用程序崩溃 没有任何错误日志 没有输出 react native log android 终端 没有出现错误的红屏 Android 模拟器只是崩溃 尝试使用 Expo 运行 再次崩溃 没有错误 工作时发生Text
  • 滚动到 UWP 的 ListView 中的新项目

    我正在创建一个带有包含消息的 ListView 的聊天应用程序 当发送 接收新消息时 ListView 应滚动到新消息 我正在使用 MVVM 所以 ListView 看起来像
  • ASP.NET 正则表达式验证器(密码强度)

    我有一个具有以下表达式的验证控件 d 2 w 2 W 1 8 这是一个至少包含以下内容的密码2 digits 2 个字母字符 1 个非字母数字 and 最少 8 个字符 不幸的是 这似乎不兼容跨浏览器 此验证在 Firefox 中完美运行
  • 在 HPC 集群上使用 python 代码 (mpi4py) 提交作业

    我正在工作带有 MPI 的 python 代码 mpi4py 我想在 HPC 集群的队列中跨多个节点 每个节点有 16 个处理器 实现我的代码 我的代码结构如下 from mpi4py import MPI comm MPI COMM WO
  • 是否有与 SQL Profiler 等效的 IBM Iseries/DB2?

    主题说明了一切 希望捕获提交给 DB2 的 sql 查看 Iseries SQL 退出点 它允许您记录任何提交的 SQL 唯一的问题是您必须编写自己的程序来进行日志记录 http publib boulder ibm com infocen
  • Ant 继承 Maven 属性

    我正在考虑将 Ant Ivy 项目转换为 Ant Maven Ant Tasks 我不想单独使用 Maven 因为我需要对构建过程进行更多控制 有没有办法让Ant build xml 文件继承pom xml 文件中设置的属性 我一直在创建一
  • Python cv2 中的皮肤检测和背景扣除

    在过去的几天里 我一直在使用 OpenCV Python 开发手势识别程序 理想情况下 我希望拥有一个如图所示的系统这个视频 https youtu be xML2S6bvMwI list PLtszSfeV ZqjcPArVX1PU68V
  • 默认的 WCF 绑定是什么?

    我已经挣扎了几天了这个问题 https stackoverflow com questions 6186663 cant send wcf service request as soapxml 在这个过程中学到了很多关于绑定的东西 不过 有
  • 如何浏览特定版本的Android源代码?

    我知道android源代码保存在这里 https android googlesource com https android googlesource com 但我看不到任何浏览旧版本代码的方法 我会如何看待 比如说 dalvik lib
  • SubGit:如何排除分支?

    我正在测试 SubGit 作为从 SVN 迁移到 Git 的一种方式 我想做的是能够在 git 存储库中创建所有用户都可以使用的远程分支does not同步回 SVN 我只希望 SubGit 跟踪 master 分支并将其同步回 SVN 以
  • 如何使用java获取文件到文件夹的相对路径[重复]

    这个问题在这里已经有答案了 可能的重复 如何在 Java 中从两个绝对路径 或 URL 构造相对路径 https stackoverflow com questions 204784 how to construct a relative
  • C 中“隐式声明函数”警告有何含义?

    正如问题所述 隐式函数声明 警告究竟意味着什么 我们刚刚调高了 gcc 上的警告标志 发现了很多这些警告的实例 我很好奇在修复它们之前这可能会导致什么类型的问题 另外 为什么这是一个警告而不是错误 gcc 如何能够成功链接这个可执行文件 正