C 中的隐式函数声明

2023-12-13

术语“函数的隐式声明”是什么意思?在不包含适当头文件的情况下调用标准库函数会产生警告,如下所示:

int main(){
  printf("How is this not an error?");
  return 0;
}

难道不应该在没有声明错误的情况下使用函数吗?请详细解释一下。我搜索了这个网站并发现了类似的问题,但找不到明确的答案。大多数答案都提到了包含头文件以消除警告,但我想知道这为什么不是错误。


应将其视为错误。但C是一门古老的语言,所以这只是一个警告。
编译用-Werror(GCC)修复了这个问题。

当 C 找不到声明时,它会采用以下隐式声明:int f();,这意味着该函数可以接收您提供的任何内容,并返回一个整数。如果这恰好足够接近(并且如果printf,它是),然后事情就可以进行了。在某些情况下(例如,函数实际上返回一个指针,并且指针大于整数),这可能会造成真正的麻烦。

请注意,这已在较新的 C 标准中得到修复(C99 and C11)。在这些标准中,这是一个错误。但是,GCC 默认情况下并不实现这些标准,因此您仍然会收到警告。

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

C 中的隐式函数声明 的相关文章

  • 在 CPP 类中将 C 函数声明为友元

    我需要在 C 函数中使用类的私有变量 我正在做这样的事情 class Helper private std string name public std getName return name friend extern C void in
  • Environment.CurrentDirectory 与 System.IO.Directory.GetCurrentDirectory

    我正在编写一个 Net WinForms 并不断在调试和发布配置之间切换 并且有一些文件我需要任一配置才能访问 我想做的是将文件放在 BIN 文件夹中的公共目录中 这样它看起来像这样 MyProject Bin CommonFiles My
  • 转换 const void*

    我有一个函数返回一个const void 我想用它的信息作为char 我可以将它投射为 C 风格的罚款 char variable但是当我尝试使用reinterpret cast like reinterpret cast
  • 如何在类文件中使用 Url.Action() ?

    如何在 MVC 项目的类文件中使用 Url Action Like namespace 3harf public class myFunction public static void CheckUserAdminPanelPermissi
  • 按扩展名过滤搜索文件返回太多结果

    我正在开发一个 C 控制台应用程序 它必须管理 Windows 操作系统上的文件 我需要获取具有特定扩展名的文件名 列表 我找到了很多解决方案 最建议的是以下一种 HANDLE hFind WIN32 FIND DATA data hFin
  • 语音识别编程问题入门

    所以 你们可能都看过 钢铁侠 其中托尼与一个名为贾维斯的人工智能系统进行交互 演示剪辑here http www youtube com watch v Go8zsh1Ev6Y 抱歉 这是广告 我非常熟悉 C C 和 Visual Basi
  • 如何在 C# Designer.cs 代码中使用常量字符串?

    如何在 designer cs 文件中引用常量字符串 一个直接的答案是在我的 cs 文件中创建一个私有字符串变量 然后编辑 Designer cs 文件以使用此变量 而不是对字符串进行硬编码 但设计者不喜欢这样抛出错误 我明白为什么这行不通
  • 如何使用 Regex.Replace 从字符串中删除数字?

    我需要使用Regex Replace从字符串中删除所有数字和符号 输入示例 123 abcd33输出示例 abcd 请尝试以下操作 var output Regex Replace input d string Empty The d标识符
  • 不同 C++ 文件中的相同类名

    如果两个 C 文件具有相同名称的类的不同定义 那么当它们被编译和链接时 即使没有警告也会抛出一些东西 例如 a cc class Student public std string foo return A void foo a Stude
  • 如何使用 x64 运行 cl?

    我遇到了和这里同样的问题致命错误 C1034 windows h 未设置包含路径 https stackoverflow com questions 931652 fatal error c1034 windows h no include
  • 从网页运行 ClickOnce 应用程序,无需用户操作

    我们有一个基于 Java 的 Web 应用程序以及用 C 编写的相同应用程序 如果 java 检查器发现客户端计算机上没有安装 Java 则应该运行该应用程序 这个想法是运行 C 单击一次 http en wikipedia org wik
  • 不可变类与结构

    以下是类与 C 中的结构的唯一区别 如果我错了 请纠正我 类变量是引用 而结构变量是值 因此在赋值和参数传递中复制结构的整个值 类变量是存储在堆栈上的指针 指向堆上的内存 而结构变量作为值存储在堆上 假设我有一个不可变的结构 该结构的字段一
  • Oauth2中如何同时撤销RefreshToken和使AccessToken失效

    我正在使用 Owin Oauth2 授权和资源服务器相同 开发单页面应用程序 AngularJS Net MVC Json Rest API 的身份验证流程 我选择了 Bearer Token 路由而不是传统的 cookie session
  • C++ 对象用 new 创建,用 free() 销毁;这有多糟糕?

    我正在修改一个相对较大的 C 程序 不幸的是 并不总是清楚我之前的人使用的是 C 还是 C 语法 这是在一所大学的电气工程系 我们 EE 总是想用 C 来做所有事情 不幸的是 在这种情况下 人们实际上可以逃脱惩罚 但是 如果有人创建一个对象
  • Visual Studio 2015:v120 与 v140?

    仅供参考 Win10 x64 我今天开始尝试 Visual Studio 2015 在弄清楚如何运行 C C 部分后 我尝试加载一个大型个人项目 该项目使用非官方的glsdk http glsdk sourceforge net docs
  • 如何解压 msgpack 文件?

    我正在将 msgpack 编码的数据写入文件 在编写时 我只是使用 C API 的 fbuffer 如 我为示例删除了所有错误处理 FILE fp fopen filename ab msgpack packer pk msgpack pa
  • 将 Lambda 表达式树与 IEnumerable 结合使用

    我一直在尝试了解有关使用 Lamba 表达式树的更多信息 因此我创建了一个简单的示例 这是代码 如果作为 C 程序粘贴到 LINQPad 中 它可以工作 void Main IEnumerable
  • 我可以使用 lambda 函数或 std::function 对象来代替函数指针吗?

    我有一个需要使用的库 它定义了以下内容 typedef void CallbackFunction const int i 并且有一个注册回调的函数 如下所示 void registerCallback CallbackFunction p
  • 当用户更改 Windows 中的语言键盘布局时如何通知?

    I want to show a message to user when the user changes the language keyboard layout of Windows for example from EN to FR
  • 如何在 C 中将 char 连接到 char* ?

    我怎样才能前置char c to char myChar 我有c值为 A and myChar值为 LL 我怎样才能前置c to myChar使 ALL 这应该有效 include

随机推荐

  • 在 R Shiny 中使用 renderText() 输出多行文本

    我想使用一个输出多行文本renderText 命令 然而 这似乎不可能 例如 从闪亮教程我们已经截断了代码server R shinyServer function input output output text1 lt renderTe
  • 什么是 JavaScript 数组?

    我试图了解 JavaScript 数组是什么 因为传统编程语言将数组定义为可以使用偏移量寻址的连续存储区域 现在 一个普通的 JavaScript 对象可以被寻址为 myObj myProperty my Value or myObj my
  • React:如何从子组件渲染父组件?

    我的任务是为客户构建一个项目 该项目需要一个父组件包装三个子组件 具体来说 父组件按照以下方式渲染子组件 父级 顶部 中间 底部 PARENT 组件代表一组项目中的一个 在顶部组件中 有一个菜单按钮 显示组中所有项目的列表 其目的是 如果用
  • 在循环中使用 Promises 和 fs.readFile

    我试图理解为什么下面的承诺设置不起作用 注意 我已经使用 async map 解决了这个问题 但我想了解为什么我的以下尝试不起作用 正确的行为应该是 bFunc 应根据需要运行多次以读取所有图像文件 下面的 bFunc 运行两次 然后 cF
  • 计算不带小数的平均值

    我希望我能弄清楚这一点 我需要生成一个表 其平均值称为 AVG AMT 整数 并且没有小数 它可以舍入或截断 对于这张桌子来说 这确实不重要 这是我试图写的 SELECT TC Code AVG ALW AMT as int 8 0 AS
  • 如何在我不想编辑的第 3 方代码中禁用 gcc 发出的未使用变量警告?

    我想知道您将什么开关传递给 gcc 编译器来关闭未使用的变量警告 我在 Windows 上的 boost 中遇到错误 并且我不想触及 boost 代码 C boost 1 52 0 boost system error code hpp A
  • Angular JS 指令 - 模板、编译还是链接?

    我想创建一个 Angular JS 指令来检查字符串的长度 如果字符串太长 无法使用过滤器缩短它 并在鼠标悬停时显示 Angular UI 弹出窗口 我应该在指令中的哪个位置放置功能以使其正常工作 链接 模板或编译 风景 div proje
  • 如何暂停多处理进程?

    我希望用户能够在启动后的任何给定时间暂停多处理的执行 如何实现 我的代码是 coding utf 8 from PySide import QtCore QtGui from Ui MainWindow import Ui MainWind
  • 无法将 1 和 0 的字符串写入二进制文件,C++

    我有一个函数 它接收一个指向带有要打开的文件名的字符串的指针 并用 1 和 0 进行编码 编码线包含类似的东西010100110101110101010011写入二进制文件后 我有完全相同的 你会推荐吗 谢谢 void codeFile c
  • docker React 无法在本地主机上运行

    我正在尝试使用 docker 运行我的 React 应用程序 当我运行容器时 一切看起来都很好 但我无法在本地主机 或 127 0 0 1 上访问它 这是我的配置 Dockerfile FROM node carbon RUN mkdir
  • Django 中的 AbstractUser 与 AbstractBaseUser?

    指某东西的用途AbstractUser and AbstractBaseUser看起来很相似 from django contrib auth models import AbstractUser AbstractBaseUser 两者有什
  • 如何使ForeignKey('self')禁令的管理员引用其自身?

    我有一个模型 其自身带有外键 例如 class Folder models Model name models CharField parent folder models ForeignKey self null True blank T
  • 运行单个 Maven 插件执行?

    我以为我是一个经验丰富的 Maven 用户 但我对如何做到这一点有一个心理障碍 我已经能够使用 Maven sql 插件通过我定义并绑定到的插件执行在数据库中删除 创建和安装模式pre integration test phase 然而 现
  • 在公式栏中隐藏公式

    当我在 Visual Basic 中使用下面所示的代码时 HYPERLINK公式中出现的部分bar 在工作表中 我只想 TextHere 显示在公式栏中 我可以添加哪些额外代码 我尝试通过在保护选项卡中更改其属性来隐藏它 但它不允许我再编辑
  • 以编程方式 Fling ListView Android

    有没有一种方法可以以编程方式在列表视图上执行 Fling 我知道有猴子可以做所有这些事情 但这需要计算机与 adb 等连接 我想在任何手机上使用我的应用程序来完成此操作 而不需要猴子 谢谢 费萨尔 有两种方法可以 平滑滚动 而不是跳转到某个
  • 多个强制参数集

    我正在开发一个包含多个参数集的函数 其中一些是强制性的 一些是可选的 这只是一个例子 但想象一下以下情况 从 AD 组中添加或删除用户或计算机的功能 由于某种原因 您需要区分用户和计算机 请记住这只是一个例子 在这种情况下 添加 删除单个内
  • 在Java cacerts中导入根证书和中间证书的正确方法

    我公司有自己的ROOT证书 使用他们签署的这个证书intermediate证书 然后我们发布了CSRserver证书并签署intermediate证书 正确的导入方式是什么ROOT证书和intermediate在Java cacerts文件
  • 如何使用 d3.time.scale() 生成均匀间隔的日期数组?

    这看起来应该是微不足道的 我想用d3 time scale 获取涵盖特定时间范围的均匀间隔的日期数组 例如 年 2012 01 01 2013 01 01 2014 01 01 或几个月 2012 01 01 2012 02 01 2012
  • Ruby on Rails:安装捆绑包时验证 SSL 证书的问题

    我是 ruby on Rails 的新手 在使用此命令创建我的第一个项目时rails new n project 我收到这个错误 run bundle install Fetching source index from https rub
  • C 中的隐式函数声明

    术语 函数的隐式声明 是什么意思 在不包含适当头文件的情况下调用标准库函数会产生警告 如下所示 int main printf How is this not an error return 0 难道不应该在没有声明错误的情况下使用函数吗