if 语句后的变量声明

2024-04-10

另一个论坛上出现了一个问题,我知道如何解决它,但它揭示了我特有的编译器功能。该人收到错误“嵌入式语句不能是声明或标记语句”,因为他们在 if 语句后面有一个变量声明,没有括号。这不是他们的意图,但他们注释掉了紧跟在 if 语句之后的代码行,这使得变量声明成为要执行的事实上的代码行。无论如何,这就是背景,这让我想到了这一点。

下面的代码是非法的

if (true)
    int i = 7;

但是,如果将其括在括号中,则一切都是合法的。

if (true)
{
    int i = 7;
}

这两段代码都没有用。不过第二个还可以。这种行为的具体解释是什么?


The C#语言规范 http://download.microsoft.com/download/3/8/8/388e7205-bc10-4226-b2a8-75351c669b09/CSharp%20Language%20Specification.doc区分三种类型的语句(更多详细信息请参见第 8 章)。一般来说,您可以有以下陈述:

  • 标记语句- 我猜这是给老式的goto陈述
  • 声明-声明- 这将是一个变量声明
  • 嵌入语句- 几乎包括所有剩余的语句

In the if声明身体必须是嵌入语句,这解释了为什么第一个版本的代码不起作用。这是语法if根据规范(第 8.7.1 节):

if ( 布尔表达式 ) 嵌入语句
if ( 布尔表达式 ) 嵌入语句 else 嵌入语句

变量声明是声明-声明,所以它不能出现在体内。如果将声明括在方括号中,您将得到一个语句块,它是一个嵌入语句(所以它可以出现在那个位置)。

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

if 语句后的变量声明 的相关文章

  • OpenGL缓冲区更新[重复]

    这个问题在这里已经有答案了 目前我正在编写一个模拟水的程序 以下是我所做的步骤 创建水面 平面 创建VAO 创建顶点缓冲区对象 在其中存储法线和顶点 将指针绑定到此 VBO 创建索引缓冲区对象 然后我使用 glDrawElements 渲染
  • 如何调整 Windows 窗体以适应任何屏幕分辨率?

    我知道这是重复的问题 但我检查了所有其他相关问题 他们的答案没有帮助 结果仍然与屏幕截图 2 中所示相同 我是 C Windows 窗体新手 如截图1所示 我有Form1有一些控件 每组控件都放在一个面板中 我在 PC1 中设计了应用程序
  • 在 Mac OS X 上安装 libxml2 时出现问题

    我正在尝试在我的 Mac 操作系统 10 6 4 上安装 libxml2 我实际上正在尝试在 Python 中运行 Scrapy 脚本 这需要我安装 Twisted Zope 现在还需要安装 libxml2 我已经下载了最新版本 2 7 7
  • MSMQ接收和删除

    是否有任何选项可以在读取消息后将其从 MSMQ 中删除 比如 接收 删除可以作为原子操作运行吗 听起来您想查看下一条消息 然后在处理完成后接收它 Message message Queue Peek Queue ReceiveById me
  • 类中是否可以有虚拟类声明?

    我正在为个人项目中框架的各个组件设置一个接口 我突然想到了一些我认为可能对接口有用的东西 我的问题是这是否可能 class a public virtual class test 0 class b public a public clas
  • 虚拟并行端口模拟器

    在我的计算机网络课程中 我们应该通过使用本机寄存器 例如使用 outportb 等命令 来学习并行端口编程 我没有并行端口 因为我住在 2011 年 但想练习这些程序 我使用 dosbox 安装了旧的 Turboc 3 IDE 有没有一个程
  • C# Winforms Designer 无法打开,因为它无法在同一程序集中找到类型

    我收到以下错误 找不到类型 My Special UserControl 请确保引用包含此类型的程序集 如果此类型是您的开发项目的一部分 请确保已使用当前平台或任何 CPU 的设置成功构建该项目 但没有任何意义的是My Special Us
  • 名称查找、实例化点 (POI) 和基本类型

    以下代码针对 X 进行编译 但不适用于 double struct X void foo double void foo X namespace NN struct A void foo A foo double error foo not
  • 为什么 std::function 不是有效的模板参数,而函数指针却是?

    我已经定义了名为的类模板CallBackAtInit其唯一目的是在初始化时调用函数 构造函数 该函数在模板参数中指定 问题是模板不接受std function作为参数 但它们接受函数指针 为什么 这是我的代码 include
  • 从点云检测平面集

    我有一组点云 我想测试3D房间中是否有角落 所以我想讨论一下我的方法 以及在速度方面是否有更好的方法 因为我想在手机上测试它 我将尝试使用霍夫变换来检测线 然后我将尝试查看是否有三条线相交 并且它们也形成了两个相交的平面 如果点云数据来自深
  • 是否可以在Linux上将C转换为asm而不链接libc?

    测试平台为Linux 32位 但也欢迎 Windows 32 位上的某些解决方案 这是一个c代码片段 int a 0 printf d n a 如果我使用 gcc 生成汇编代码 gcc S test c 然后我会得到 movl 0 28 e
  • 如何使用 C# 查询远程 MS ACCESS .mdb 数据库

    我正在尝试使用 C 查询 mote MS ACCESS 数据库 mdb 文件 将文件复制到本地计算机时可以成功查询它 我只想远程放置文件 所以我的客户端程序不包含原始数据 static string m path http www xyz
  • 在 mvc4 中创建通用 mvc 视图

    我以前也提过类似的问题 没有得到答案 如何创建一个通用的 mvc4 视图 该视图可以显示传递给它的模型列表或单个模型 模型可以是个人 组织或团体 无论传递给它的是什么 如果您正在寻找类似的东西 model MyViewModel
  • 如何测试某些代码在 C++ 中无法编译? [复制]

    这个问题在这里已经有答案了 可能的重复 单元测试编译时错误 https stackoverflow com questions 605915 unit test compile time error 我想知道是否可以编写一种单元测试来验证给
  • 时间:2019-03-17 标签:c#TimerStopConfusion

    我想通过单击按钮时更改文本颜色来将文本框文本设置为 闪烁 我可以让文本按照我想要的方式闪烁 但我希望它在闪烁几次后停止 我不知道如何在计时器触发几次后让它停止 这是我的代码 public Form1 InitializeComponent
  • 使用 boost 异步发送和接收自定义数据包?

    我正在尝试使用 boost 异步发送和接收自定义数据包 根据我当前的实现 我有一些问题 tcpclient cpp include tcpclient h include
  • 初始化列表在 VC10 中不起作用

    我在 VC 2010 中编写了这个程序 class class1 public class1 initializer list
  • 使用 IdentityDbContext 和 Code First 自动迁移表位置和架构的实体框架?

    我正在尝试使用 IdentityDbContext 类设置自动迁移更新 并将更改传播到整个数据库的实际 DbContext 在进入代码之前 在使用自动迁移实现 IdentityDbContext 时 我收到此错误 影响迁移历史系统表位置的自
  • IDisposable 的显式实现

    虽然有很多关于IDisposable在 SO 上找到 我还没有找到答案 我通常遵循这样的做法 当我的一个班级拥有一个IDisposable对象然后它也实现IDisposable并打电话Dispose在拥有的对象上 然而最近我遇到了一个类 它
  • 是否可以使用 Dapper 流式传输大型 SQL Server 数据库结果集?

    我需要从数据库返回大约 500K 行 请不要问为什么 然后 我需要将这些结果保存为 XML 更紧急 并将该文件通过 ftp 传输到某个神奇的地方 我还需要转换结果集中的每一行 现在 这就是我正在做的事情 TOP 100结果 使用 Dappe

随机推荐

  • 如何将UIView裁剪为半圆?

    我想将 UIView 裁剪为半圆形 提前致谢 一个方便的方法就是子类 aUIView 在其上添加一个图层 并使视图颜色透明 如果不是默认情况下 import UIKit class SemiCirleView UIView var semi
  • BaseX RESTXQ“你好世界”示例

    我正在努力开始使用基本 REST API 我已下载并安装了最新版本的 Windows 版 BaseX 我通过单击 BaseX 安装添加到 Windows 开始菜单中的 BaseX Server 开始 图标启动了 BaseX Server 看
  • node/express:使用Forever连续运行脚本时设置NODE_ENV

    我怎样才能设置NODE ENV http expressjs com guide html configuration当我使用时变量 参数为 生产 forever https github com indexzero forever启动我的
  • 如何利用 Android 的“清除缓存”按钮

    在 Android 的设置中 在 管理应用程序 活动中 单击应用程序时 数据会分解为应用程序 数据和缓存 还有一个清除缓存的按钮 我的应用程序缓存音频文件 我希望用户能够使用此按钮清除缓存 我如何存储它们 以便它们与缓存集中在一起并且用户可
  • 使用另一个域的用户凭据连接到 SQL Server

    如何使用另一个域中的用户登录名 密码连接到 SQL Server 数据库 如果我使用我的帐户连接到数据库 它工作正常 cnxn pyodbc connect DRIVER SQL Server SERVER server name DATA
  • Netbeans 错误:项目文件夹已存在且不为空

    我安装了Netbeans 因为我正在读这本书 Java in 21 days 我在编程领域完全是个新手 当我尝试在 Netbeans 中打开一个新项目时 出现错误 项目文件夹已存在且不为空 删除 nbproject 文件夹并重新启动 IDE
  • 如何让用户重新排序 UITableView 中的部分

    我正在开发一个包含股票的应用程序 按投资组合排列 所以这很适合表格视图 我正在研究编辑交互 它足够简单 允许用户添加或删除股票 将它们拖动到一个投资组合或另一个投资组合中 但我无法优雅地做的一件事是让用户将一个投资组合拖动到另一个投资组合的
  • 字符串损坏或 preg_match 错误?

    NO BREAK SPACE 和许多其他 UTF 8 符号需要 2 个字节来表示 http www fileformat info info unicode char a0 index htm 因此 在假定的 UTF8 字符串上下文中 非
  • Linux内核中的模块间通信

    我有两个 Linux 内核模块 其中一个可以为另一个提供一些功能 但使用该功能并不是必需的 即使第一个模块不存在 第二个模块也可以 并且应该 工作 如果我只是从第一个模块导出函数并在第二个模块中使用它 则第二个模块依赖于该符号 并且在没有第
  • 我可以在本地主机上使用实际网络环境进行性能测试吗?

    我需要测试在本地主机上运行的应用程序的性能 就像在在线环境中一样 我的意思是通过网络流量模拟 有限带宽模拟或其他参数进行的性能测试 就像在线一样 Apache Ab 可以模拟吗 我们用过Charles http www charlespro
  • Spring 与 JUnit 测试和依赖注入不起作用

    我尝试在 Junit 测试用例中使用 Spring 自己的依赖注入 import static org hamcrest CoreMatchers equalTo import static org hamcrest CoreMatcher
  • 有没有办法将背景图像设置为base64编码图像?

    我想在 JS 中动态更改背景 并且我的图像集采用 Base64 编码 我尝试 document getElementById bg image style backgroundImage url http amigo com 300107
  • 如何替换 Pandas 数据框字符串列中的文本?

    我的数据框中有一列 如下所示 range 2 30 50 290 400 1000 我想更换 逗号与 短跑 我目前正在使用这种方法 但没有任何改变 org info exc range replace inplace True 有人可以帮忙
  • 如何从存储中干净地删除证书

    您可以使用 certmgr msc 中的向导将证书安装到证书存储中 右键单击安装 有谁知道如何使用向导 代码 首选 脚本 干净地 删除所有证书 我希望能够从 LocalMachine 和 或 CurrentUser 存储中删除所有内容 我之
  • 应用程序传输安全阻止 HTTPS

    我的 ATS 有问题 我使用的是 XCode 9 1 我的开发目标是 11 0 我正在使用react native 0 49进行开发 我的程序正在获取https https www xxxx com https www xxxx com 具
  • 使用Windows powershell从实时(更新)日志文件中过滤字符串

    我有一台计算机正在通过串行端口记录来自设备的事件 Putty 正在将它们记录到文件中 我曾经在 Linux 机器上运行过这个 基本上会tail f event log gt gt script sh 这是 nix 脚本 bin bash o
  • 这个 jQuery 代码片段可以缩短吗?

    我刚刚开始使用 jQuery 虽然下面的代码可以完成工作 但我感觉它可以缩短 var accountAddress document createElement input addClass readOnly attr contentEdi
  • Grails 2.3 和 GGTS 3.4 停止按钮不起作用

    如何使用 grails 2 3 停止 GGTS 3 4 中的 grails 进程 GGTS 的停止按钮没有停止服务器运行 并且 java exe 进程仍然显示在任务管理器中 评论一下grails project fork BuildConf
  • 如何在每次实体框架数据库迁移后访问上下文

    当我添加迁移时 我使用 Up Down 方法获得适当的 DbMigration 类 我可以在其中进行架构更改 并且 使用 Sql 方法 也可以进行数据 内容更改 我希望能够使用数据库上下文在每次迁移时进行内容更改 我知道我可以在 Confi
  • if 语句后的变量声明

    另一个论坛上出现了一个问题 我知道如何解决它 但它揭示了我特有的编译器功能 该人收到错误 嵌入式语句不能是声明或标记语句 因为他们在 if 语句后面有一个变量声明 没有括号 这不是他们的意图 但他们注释掉了紧跟在 if 语句之后的代码行 这