为什么 C++ 中必须声明函数,而 C 中则不然?

2024-03-15

所以我之前的一次考试有这个问题,到目前为止我一直在读你不需要任何语言的声明?

哪个是对的?如果没有声明,C++会报错还是会运行?


在涉及 C 和 C++ 的讨论中,“函数声明”是一个相当模糊的术语。这些语言在这方面有很大不同。

在C++语言中只有一种函数声明:带有所有参数类型和返回类型的声明。这样的声明是必要的,因为 C++ 语言支持函数超载。为了选择调用哪个函数,编译器需要了解该函数的所有信息,并且需要知道该函数的哪些重载版本可用。如果您“忘记”声明某个重载版本,重载决策将不会考虑它。这至少是 C++ 中需要函数声明的原因之一。

C语言中有两种函数声明:非原型声明和原型声明(或者简单地原型)。 C 中的原型与 C++ 声明非常相似 - 它包括所有参数类型。在标准 C 中,可变参数函数(带有...参数)。对于非可变参数函数原型即使在今天也不需要声明。但至少从C99开始非原型所有其他函数都需要声明。在较旧的 C89/90 版本中,不需要非可变参数函数的语言函数声明。

所以,这基本上应该回答你的问题了。在 C++ 中,函数声明是必需的,因为语言功能严重依赖它们。在现代 C 语言中,还需要函数声明,只是为了使代码更安全。在旧版本的 C 函数声明中,不需要函数声明,主要是因为该语言被定义为无需函数声明即可工作。

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

为什么 C++ 中必须声明函数,而 C 中则不然? 的相关文章

随机推荐

  • 材质UI下一个对话框文本字段下划线颜色

    如何使用辅助调色板颜色更改对话框内文本字段的下划线颜色 我无法做到这一点 因为文档非常混乱 假设您使用的是material ui next 您可以使用覆盖 in 创建Mui主题 import MuiThemeProvider createM
  • Rails 模型中的实例变量

    我想在 Rails 模型中初始化一个实例变量 该变量将保存一个数组 并且我想在模型中的其他方法中访问该变量 我试过这个 class Participant lt ActiveRecord Base possible statuses exi
  • 根据 Python pandas 中索引的补集挑选元素

    我有一个数据框 我从中选择两个子集 dfs df a and df b 例如在iris数据集 df a iris iris Name Iris setosa df b iris iris Name Iris virginica 获得所有元素
  • 有没有一种方法可以透明地对 SQLAlchemy 对象执行验证?

    有没有办法在设置属性之后 或设置属性时 但在提交会话之前对对象执行验证 例如 我有一个领域模型Device有一个mac财产 我想确保mac属性在添加到数据库或在数据库中更新之前包含有效且经过清理的 mac 值 看起来 Pythonic 方法
  • PHP在提交表单失败后保留表单信息

    你好 我正在 mvc 系统视图中构建一个表单 并且我希望保留所有插入的值 以防表单提交失败 如何做到这一点 我尝试过 字段示例
  • 点击鼠标绘制一个矩形

    可以用鼠标点击画一个矩形吗 我的代码到目前为止还不能工作 你能帮助我吗 private void panel1 MouseClick object sender MouseEventArgs e Graphics g this Create
  • 源码分析工具? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 C 和 C 的源代码分析和探索工具似乎非常缺乏 是否有任何工具可以用来收集有关 C 和 或 C 源文件的信息 cscope 完成了我需要的
  • 单元测试持久层 - Symfony

    我想在 Symfony2 中测试持久性 我想知道是否更好地模拟实体并提供给实体管理器 或者是否更好地模拟实体管理器并将实体传递给管理器 我的第一个选择是实体管理器抛出异常 而不是对象不是实体学说 如何在 PHPUNIT 中测试 symfon
  • 使用正则表达式或类似表达式更改 Chrome 中的当前 URL

    当在 Chrome 中输入已弃用的 URL 时 应根据正则表达式或类似表达式将其更改为更新的 URL 我想做以下事情 向系统输入一条规则 将 olddomain com 更改为 newdomain com 在 Chrome 中输入 oldd
  • 当插入符进入 contenteditable div 中的 span 元素时触发事件

    我有一个内容可编辑的 div 其跨度如下 div some span spanned span text div 我想知道是否有任何事件监听器可以附加到span元素本身可用于检测插入符是否在元素内部移动span元素 我并不是在寻找有听众的答
  • 在 Web 服务中使用 JSON 字节数组以及 application/x-www-form-urlencoded

    有3个问题 我正在使用 Java Restful Web 服务 请求是 HTTP POST 客户端如何发送 JSON 数据以及 application x www form urlencoded 的 MediaType 使用字节数组是否可以
  • 按 EditText 时的 TimePicker 对话框

    这个问题以前曾被问过 但当时的答案似乎不再适用于 Android Studio 或者我错过了一些东西 我希望当您按下编辑文本区域时显示一个 timePicker 对话框 以在 editText 中设置时间 然而 由于某种原因 普通键盘在按下
  • 使用自动热键捕获右键单击+左键单击;意外的行为

    我想捕获关键事件 按下鼠标右键 然后按下鼠标左键 自动热键没有问题 然而 我仍然无法让鼠标右键单独工作 1 这有效 RButton LButton Send X Return 按预期工作 如果我按下鼠标右键 然后按下鼠标左键 X 将发送到活
  • HTML5 语法验证

    我正在验证一些 HTML 并注意到一些我不熟悉的新错误 这些列表项会根据用户输入使用 JavaScript 进行填充 Element li缺少以下一项或多项属性 aria checked aria expanded aria valuema
  • R 中最快的列排序

    我有一个数据框full我想从中取出最后一列和一列v 然后我想对两列进行排序v以尽可能最快的方式 full从 csv 中读取 但这可以用于测试 包括一些真实性的 NA n lt 200000 full lt data frame A runi
  • 基本 CSS 功能在 IE8 中不起作用

    我在这里完全不知所措 我正在开发一个网站 需要支持大量使用 IE8 的用户 一切都可以在 IE9 及更高版本以及 Chrome Firefox 和 Safari 中运行 但我一生都无法获得基本的 CSS 例如高度属性 来在 IE8 中一致工
  • 如何创建从左下角到右上角的动态对角线?

    我创建了一个简单的布局 其中有三个可以交互的 div 一个是屏幕中间的徽标 另一个是使用 jQuery 将两个块移出屏幕 我用的是skewCSS 中应用度数转换的选项 我想根据屏幕应用一定的程度 因此该程度将正确应用于所有屏幕 视觉示例 h
  • 如何使用TabNavigator的tabBarComponent?标签栏不显示

    我正在尝试制作自己的自定义选项卡栏 似乎 tabBarComponent 是通过设置为我自己的组件来实现此目的的方法 使用下面的代码我的标签栏不会显示 const TabNav TabNavigator LaunchScreen scree
  • 查询SQL Server上存储过程的内容

    我正在探索一个遗留数据库系统 对其内部结构知之甚少 我想找到调用另一个存储过程的所有存储过程A 如何最好地做到这一点 我可以写这样的伪代码吗 select name from AllStoredProcedures as Asp where
  • 为什么 C++ 中必须声明函数,而 C 中则不然?

    所以我之前的一次考试有这个问题 到目前为止我一直在读你不需要任何语言的声明 哪个是对的 如果没有声明 C 会报错还是会运行 在涉及 C 和 C 的讨论中 函数声明 是一个相当模糊的术语 这些语言在这方面有很大不同 在C 语言中只有一种函数声