C 和 C++ 中的声明/定义作为语句

2024-01-04

当这不能在 C 中编译时我很困惑:

int main()
{
    for (int i = 0; i < 4; ++i)
        int a = 5; // A dependent statement may not be declaration

    return 0;
}

我习惯了 C++ 来编译它。我只是目瞪口呆地看了一会儿,直到我想起了 SO 上的一个答案,关于在 C 和 C++ 中如何将不同的事物视为“语句”。这是关于 switch 语句的。 for 循环括号后面的“语句”必须出现在 C 和 C++ 中。这可以通过添加分号或创建 { } 波浪括号块来完成。

在 C++ 中“int a = 7;”被视为声明、定义和初始化。在 C 中,我相信它也被认为是所有这些,但是在 C 中,它不被认为是“语句”。

有人能准确地解释为什么在 C 中这不是一个语句,而在 C++ 中它是吗?这让我对语句是什么的概念感到困惑,因为一种语言说它是,另一种语言说它不是,所以我有点困惑。


C++ 允许迭代语句的“子语句”隐式是复合语句 ([stmt.iter])

如果迭代语句中的子语句是单个语句而不是复合语句,则就好像 它被重写为包含原始语句的复合语句。例子:

while (--x >= 0)
   int i;

可以等效地重写为

while (--x >= 0) {
   int i;
}

C标准没有这种语言。

另外,定义一个陈述在 C++ 中进行了更改以包含声明声明,因此即使不进行上述更改,它仍然是合法的。


添加大括号使其起作用的原因是因为您的声明现在变成了复合语句其中可以包含声明。

您可以拥有一个标识符在没有大括号的循环体中,所以你可以这样做:

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

C 和 C++ 中的声明/定义作为语句 的相关文章

  • 在搜索 List 时,为什么 Enumerable.Any(Func predicate) 比带有 if 语句的 foreach 慢

    最近有件事引起了我的好奇心 Why is the Enumerable Any Func
  • 使用具有现有访问令牌的 Google API .NET 客户端

    用例如下 移动应用程序正在通过 Google 对用户进行身份验证 并且在某些时候 我们需要将用户的视频发布到他的 YouTube 帐户 出于实际原因 实际发布应该由后端完成 已经存储在那里的大文件 由于用户已经通过应用程序的身份验证 因此应
  • 为什么我不能用 `= delete;` 声明纯虚函数?

    Intro 纯虚函数使用通用语法声明 virtual f 0 然而 自 c 11 以来 有一种方法可以显式地传达non existence 特殊 成员函数的 Mystruct delete eg default constructor Q
  • 为什么大多数 C 开发人员使用 Define 而不是 const? [复制]

    这个问题在这里已经有答案了 在许多程序中 define与常量具有相同的用途 例如 define FIELD WIDTH 10 const int fieldWidth 10 我通常认为第一种形式优于另一种形式 它依赖于预处理器来处理基本上是
  • 如何创建可以像 UserControl 一样编辑的 TabPage 子类?

    我想创建一个包含一些控件的 TabPage 子类 并且我想通过设计器来控制这些控件的布局和属性 但是 如果我在设计器中打开子类 我将无法像在 UserControl 上那样定位它们 我不想创建一个带有 UserControl 实例的 Tab
  • 从 MVC 迁移到 ASP.NET Core 3.1 中的端点路由时,具有角色的 AuthorizeAttribute 不起作用

    我正在尝试将我的项目从 UseMVC asp net core 2 2 兼容样式 升级到 UseEndpoint Routing 并且我的所有请求都被重定向到我的验证失败页面 它与声明有关 如果我删除 Authorize Roles Adm
  • C++:重写已弃用的虚拟方法时出现弃用警告

    我有一个纯虚拟类 它有一个纯虚拟方法 应该是const 但不幸的是不是 该接口位于库中 并且该类由单独项目中的其他几个类继承 我正在尝试使用这个方法const不会破坏兼容性 至少在一段时间内 但我找不到在非常量方法重载时产生警告的方法 以下
  • Clang 编译器 (x86):80 位长双精度

    我正在尝试在 x86 Windows 平台上使用本机 80 位长双精度 海湾合作委员会选项 mlong double 80 https gcc gnu org onlinedocs gcc x86 Options html似乎不适用于 cl
  • 构造函数中显式关键字的使用

    我试图了解 C 中显式关键字的用法 并查看了这个问题C 中的explicit关键字是什么意思 https stackoverflow com questions 121162 但是 那里列出的示例 实际上是前两个答案 对于用法并不是很清楚
  • 从多个类访问串行端口

    我正在尝试使用串行端口在 arduino 和 C 程序之间进行通信 我对 C 编程有点陌生 该程序有多种用户控制形式 每一个都需要访问串口来发送数据 我需要做的就是从每个类的主窗体中写入串行端口 我了解如何设置和写入串行端口 这是我的 Fo
  • 访问者和模板化虚拟方法

    在一个典型的实现中Visitor模式 该类必须考虑基类的所有变体 后代 在许多情况下 访问者中的相同方法内容应用于不同的方法 在这种情况下 模板化的虚拟方法是理想的选择 但目前这是不允许的 那么 模板化方法可以用来解析父类的虚方法吗 鉴于
  • 当前的 c++ 工作草案与当前标准有何不同

    通过搜索该标准的 PDF 版本 我最终找到了这个链接C 标准措辞草案 http www open std org jtc1 sc22 wg21 docs papers 2012 n3376 pdf从 2011 年开始 我意识到我可以购买最终
  • Qt 创建布局并动态添加小部件到布局

    我正在尝试在 MainWindow 类中动态创建布局 我有四个框架 它们是用网格布局对象放置的 每个框架都包含一个自定义的 ClockWidget 我希望 ClockWidget 对象在调整主窗口大小时相应地调整大小 因此我需要将它们添加到
  • Azure 事件中心 - 按顺序接收事件

    我使用下面的代码从 Azure Event Hub 接收事件 https learn microsoft com en us azure event hubs event hubs dotnet framework getstarted s
  • 生产代码中的 LRU 实现

    我有一些 C 代码 需要使用 LRU 技术实现缓存替换 目前我知道两种实现LRU缓存替换的方法 每次访问缓存数据时使用时间戳 最后比较替换时的时间戳 使用缓存项的堆栈 如果最近访问过它们 则将它们移动到顶部 因此最后底部将包含 LRU 候选
  • Excel 2010 在 IF 函数中搜索文本 - 单独的单元格数据

    Program Excel 2010 Require 一种将名字 姓氏 电子邮件提取到各个单元格的方法 Data 我的数据有一个包含原始 脏数据 的表 它是原始的并且一团糟 我用一个简单的方法整理它 IF A7 Order 1 然后其余单元
  • 在 C 中使用 GNU automake 中的解析器

    我是 GNU autotools 的新手 在我的项目中使用了 lex 和 yacc 解析器 将它们作为 makefile am 中的源代码会产生以下错误 配置 in AC CHECK PROGS YACC bison yacc none i
  • 如何挤出平面 2D 网格并赋予其深度

    我有一组共面 连接的三角形 即二维网格 现在我需要将其在 z 轴上挤出几个单位 网格由一组顶点定义 渲染器通过与三角形数组匹配来理解这些顶点 网格示例 顶点 0 0 0 10 0 0 10 10 0 0 10 0 所以这里我们有一个二维正方
  • 获取 2 个数据集 c# 中的差异

    我正在编写一个简短的算法 它必须比较两个数据集 以便可以进一步处理两者之间的差异 我尝试通过合并这两个数据集并将结果更改放入新的数据集来实现此目标 我的方法如下所示 private DataSet ComputateDiff DataSet
  • 耐用功能是否适合大量活动?

    我有一个场景 需要计算 500k 活动 都是小算盘 由于限制 我只能同时计算 30 个 想象一下下面的简单示例 FunctionName Crawl public static async Task

随机推荐

  • 在 C# / .NET 中执行批量更新的最快方法

    我试图找出通过 SQL Server 中的迷你控制台应用程序执行批量更新的最佳方法是什么 我已经编写了自己的批量更新方式 如下所示 SqlCommand command new SqlCommand command Connection n
  • 在移动 Web 应用程序中使用 JavaScript

    我需要在移动 Web 应用程序的表单中使用 JavaScript 我需要一些有关它的信息 涉及浏览器兼容性以及在移动 Web 应用程序中使用 JavaScript 的方式 语法 这是一场噩梦 这就像 20 世纪 90 年代使用网络浏览器工作
  • 使用 Json.NET 将 JSON 反序列化为对象

    我正在玩一点新的堆栈溢出 API https blog stackoverflow com 2010 03 stack overflow api private beta starts 不幸的是 我的 JSON 有点弱 所以我需要一些帮助
  • C#:如何在特定时间启动线程[重复]

    这个问题在这里已经有答案了 如何在一天中的特定时间 例如 16 00 启动后台线程 因此 当应用程序启动时 线程将等待那个时间 但如果应用程序在那之后启动 那么线程将立即运行 ThreadPool QueueUserWorkItem Met
  • 适用于 SDK 环境的 Android 名片扫描仪库 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有名片扫描仪的库 我是 Android 新手 帮帮我 提前致谢 工具信息 ABBYY 移动 OCR
  • 让整个CSS表变得很重要!

    有没有办法让整个 CSS 样式表优先于另一个样式表 我知道你可以做到这一点 重要的是 但我可以用一行来做到这一点 而不是修改工作表上的所有数千个属性吗 Thanks 确保您想要的样式表最后调用 或者您想要的特定样式最后调用 例如 使用这个
  • 使用带有正则表达式的字典(Scala?)的 PySpark UDF 优化挑战

    我正在尝试优化下面的代码 PySpark UDF 它为我提供了所需的结果 基于我的数据集 但在非常大的数据集 大约 180M 上速度太慢 结果 准确度 优于可用的 Python 模块 例如 geotext hdx python countr
  • 如何使用ReportingService2010?

    我正在尝试使用报告服务器 Web 服务通过代码部署报告服务器解决方案 http 服务器名称 ReportServer ReportService2010 asmx wsdl http Server Name ReportServer Rep
  • 从 mongodb 数组中删除元素

    我是 mongodb 的新手 我想删除数组中的某些元素 我的文件如下 id ObjectId 4d525ab2924f0000000022ad name hello time stamp 2010 07 01T12 01 03 75 02
  • 覆盖 matplotlib 的平移工具 (wx)

    我正在使用 wxPython 面板中的 matplotlib 来执行一些繁重的绘图 我的问题是在使用本机平移工具时出现的 当您拖动平移手柄时 似乎 matplotlib 试图不断重绘画布 随着我绘制的数据量变得非常不稳定 已经使用数据集合等
  • 使用 AND 和 OR 运算符的 Solr 字段查询 (fq)

    我一直在努力使用 AND 和 OR 运算符形成 solr 字段查询 为什么 solr 对于 1 和 2 3 和 4 查询返回不同的结果 即使所有查询都有相同的逻辑 fq 名称 abc AND 城市 1 3 OR 名称 abc AND loc
  • 无法访问developer.apple.com 中的证书、标识符和配置文件

    我正在尝试遵循以下内容有效的配置文件均不包含设备 https stackoverflow com questions 28585821 none of the valid provisioning profiles include the
  • tkinter GUI 写入文本小部件并替换文本

    from tkinter import from tkinter import ttk parent Tk p ttk Panedwindow parent orient HORIZONTAL p pack fill BOTH expand
  • 无法访问已处置的对象。对象名称:FileBufferingReadStream

    我正在尝试在天蓝色中上传文件 所以基本上我正在尝试将文件转换为流 以便我可以在服务器上创建一个文件并写入其数据 public async Task UploadFileOnAzure string path string name IFor
  • 从外部文件调用 jQuery 日期选择器

    我对 jQuery 比较陌生 并且很难让 jQuery 日期选择器从外部 js 文件工作 最初 我将脚本创建为函数 但认为这样做会限制范围 并且无法在函数外部访问它 我还尝试将其定义为函数 并命名该函数 然后使用 document read
  • 允许用户在 iOS 应用程序内切换应用程序跟踪同意状态

    如何使用户能够从菜单中轻松切换同意inside具有新的应用程序跟踪透明度要求的实时 iOS 应用程序 我曾经通过复选标记按钮来跟踪用户同意情况 而无需 Apple 的 ATT 要求 我还可以使用此同意状态吗 我可以通过网络视图跟踪同意吗 T
  • 时差节目

    我正在使用以下函数来计算时差 它没有显示正确的输出 1 个月的时差后显示 2 分钟的差异 我的程序出了什么问题 public String TimestampDiff Timestamp t long t1 t getTime String
  • 打开新窗口时,Visual Studio 中的 Silverlight 调试停止工作

    我有一个托管 silverlight 应用程序的 aspx 页面 调试工作正常 当我直接转到页面时 silverlight 应用程序中的断点会被命中 但是当我从其托管 ASP NET 应用程序在新窗口中启动页面时 断点将停止被命中 有任何想
  • Zend_db 更新更好的错误报告

    当我更新记录时 我使用 更新 的结果来确定它是否正常工作 a this gt db gt insert self TABLE saveData a 1 表示更新了一条记录 a 0 表示它没有更新任何内容 如果表格没有任何改变 我可以得到 0
  • C 和 C++ 中的声明/定义作为语句

    当这不能在 C 中编译时我很困惑 int main for int i 0 i lt 4 i int a 5 A dependent statement may not be declaration return 0 我习惯了 C 来编译它