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 中“隐式声明函数”警告有何含义? 的相关文章

  • BASIC 中的 C 语言中的 PeekInt、PokeInt、Peek、Poke 等效项

    我想知道该命令的等效项是什么Peek and Poke 基本和其他变体 用 C 语言 类似PeekInt PokeInt 整数 涉及内存条的东西 我知道在 C 语言中有很多方法可以做到这一点 我正在尝试将基本程序移植到 C 语言 这只是使用
  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • C 编程:带有数组的函数

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include

随机推荐

  • 异步多线程异常处理?

    我希望在异步编程 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 如何能够成功链接这个可执行文件 正