单次进入/单次退出规则[关闭]

2023-11-21

我在某处读过一条规则:

遵循单进/单出规则。切勿在同一个函数中编写多个返回语句。

这个说法属实吗?如果是这样,您能否详细说明为什么我们应该遵守这条规则?


这是真的?

这就是规则在使用和执行的地方所说的内容。这是一个好的规则吗?我竭尽全力反对它的收养。我认为这是一个愚蠢的规则。比愚蠢更糟糕的是:这对 C++ 来说是一条有害的规则。

我确实同意规则的第一部分“单一条目”。福特兰语言entry声明引起的问题比它解决的问题多得多。该规则的第一部分不适用于 C 或 C++,原因很简单,这两种语言都没有提供多入口点机制。 “单次输入”在 C 和 C++ 中是无操作。

那么“单一出口”又如何呢?提前返回并不一定会造成问题。在返回之前未能处理分配的资源是导致问题的原因。正确的规则是“清理你的烂摊子”,或者不要留下悬而未决的资源。单一出口并不能解决这个问题,因为它没有说要清理你的烂摊子。

在 C 语言中,单次进入/单次退出规则通常与允许(甚至鼓励)使用goto用于错误处理。我可以看到这个地方goto用于 Linux 内核代码中的错误处理。但在 C++ 中则不然。这就是为什么我写到单次进入/单次退出在 C++ 中是有害的。该规则不鼓励使用 RAII 和异常安全编程,并鼓励使用goto.

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

单次进入/单次退出规则[关闭] 的相关文章

  • 使用 CLion 进行 OpenCV Windows 设置

    我想在 Windows 上为 CLion IDE 设置 OpenCV 我尝试使用 OpenCV 3 1 和 2 4 得到相同的结果 我有 Windows 10 64 位 CLion 使用 cygwin 环境 到目前为止我做了什么 1 从Op
  • 在 OnModelCreating 期间设置列名称

    Issue 我目前正在尝试通过设置的属性为我的表及其列添加前缀 我正在使用实体框架核心 我已经正确地为表名添加了前缀 但我似乎无法弄清楚列的前缀 我有一种感觉 我需要使用反射 我已经留下了我的 可能很糟糕的 反思尝试 有人有办法在实体中设置
  • 有没有办法在 xcode 上使用 c++0x ?我想使用 gcc 4.4 或更高版本

    我想使用 gcc 4 4 或更高版本进行 iphone 开发 有人知道怎么做吗 不 你不知道 相信我 你不会 Apple 仍保留 gcc 4 2 1 因为 4 2 2 及更高版本使用 GPLv3 这意味着他们必须放弃对其平台的控制 对于 i
  • 在 C# 中调用 C++ 库 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有很多用 C 编写的库 我想从 C 调用这些库 但是 我遇到了很多问题 我想知道是否有书籍或指南告诉我如何做到这一点 Dll导入 htt
  • 检测到堆栈崩溃

    我正在执行我的 a out 文件 执行后 程序运行一段时间 然后退出并显示消息 stack smashing detected a out terminated Backtrace lib tls i686 cmov libc so 6 f
  • 如何制作可启动程序?

    所以 这个问题可能看起来很奇怪 但假设我编译了 int main void int x 3 int y 4 int z x y 是否可以让CPU这样运行 如何 例如 这允许我写入监视器吗 如果我没记错的话 内存中有些地方可以写入要显示的内容
  • C# 5 async/await 线程机制感觉不对?

    为什么让调用线程进入异步方法直到内部 等待 一旦调用异步方法就生成一个线程 这不是更干净吗 这样您就可以确定异步方法会立即返回 您不必担心在异步方法的早期阶段没有做任何昂贵的事情 我倾向于知道某个方法是否要在 我的 线程上执行代码 不管是堵
  • 为什么'enable_if'不能用于禁用这里声明

    include
  • C# 开源 NMEA 解析器 [已关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找 C 开源 NMEA 解析器 嗯 我自己也不熟悉 但是一些快速搜索显示了一个代码项目 htt
  • 使用 LINQ 更新 IEnumerable 对象的简单方法

    假设我有一个这样的业务对象 class Employee public string name public int id public string desgination public int grade List
  • 访问 ascx 文件中的母版页控件

    我有一个母版页文件 其中包含 2 个面板控件中的 2 个菜单 我还使用控件来检查用户是否登录并获取用户类型 根据我想要显示 隐藏面板的类型 控件本身不在母版页中引用 而是通过 CMS 系统动态引用 我想在用户控件中使用findcontrol
  • 使用具有抗锯齿功能的 C# 更改抗锯齿图像的背景颜色

    我有一个图像需要更改背景颜色 例如 将下面示例图像的背景更改为蓝色 然而 图像是抗锯齿的 所以我不能简单地用不同的颜色替换背景颜色 我尝试过的一种方法是创建第二个图像 仅作为背景 并更改其颜色并将两个图像合并为一个图像 但是这不起作用 因为
  • 从BackgroundWorker线程更新图像UI属性

    在我正在编写的 WPF 应用程序中 我有一个 TransformedBitmap 属性 该属性绑定到 UI 上的 Image 对象 每当我更改此属性时 图像就会更新 因此显示在屏幕上的图像也会更新 为了防止在检索下一张图像时 UI 冻结或变
  • 如何从 Rx Subscribe 回调异步函数?

    我想回调 Rx 订阅中的异步函数 例如 像那样 public class Consumer private readonly Service service new Service public ReplaySubject
  • 从浏览器访问本地文件?

    您好 我想从浏览器访问系统的本地文件 由于涉及大量安全检查 是否可以通过某种方式实现这一目标 或使用 ActiveX 或 Java Applet 的任何其他工作环境 请帮帮我 要通过浏览器访问本地文件 您可以使用签名的 Java Apple
  • 如何在 winforms 应用程序的主屏幕显示之前显示欢迎屏幕?

    我想在应用程序启动时加载欢迎屏幕 然后用户单击欢迎屏幕上的按钮 然后关闭欢迎屏幕 最后显示主屏幕 static void Main startup method being called Application EnableVisualSt
  • 需要提取字符串中点后的最后一个数字,如“7.8.9.1.5.1.100”

    我需要提取 C 字符串中最后一个点后面的最后一个数字 例如 7 8 9 1 5 1 100 并将其存储在整数中 Added 该字符串也可以是 7 8 9 1 5 1 1 或 7 8 9 1 5 1 0 我还想验证它在最后一个点之前恰好是 7
  • 如何得知客户端从服务器的下载速度?

    根据客户的下载速度 我想以低质量或高质量显示视频 任何 Javascript 或 C 解决方案都是可以接受的 Thanks 没有任何办法可以确定 您只能测量向客户端发送数据的速度 如果没有来自客户端的任何类型的输入来表明其获取信息的速度 您
  • DataContractSerializer 事件/委托字段问题

    在我的 WPF 应用程序中 我正在使用DataContractSerializer序列化对象 我发现它无法序列化具有事件或委托声明的类型 考虑以下失败的代码 Serializable public abstract class BaseCl
  • 如何使用placement new重新初始化该字段?

    我的课程包含字段 private OrderUpdate curOrderUpdate 我一遍又一遍地使用它 经常需要重新初始化 for int i 0 i lt entries size i auto entry entries i ne

随机推荐

  • xsd:如何使用无序列表的元素扩展类型

    这是我的 xml 架构的一部分
  • $readmem 可以在 Verilog 中综合吗?

    我正在尝试在 FPGA 上实现微控制器 我需要为其程序提供一个 ROM 如果我使用 readmemb 它会被正确合成到 ROM 中吗 如果不是 执行此操作的标准方法是什么 这取决于合成工具是否 readmemb是可以合成的 阿尔特拉的推荐的
  • 如何取消 Android Seekbar 上的“拖动”动作?

    我一直在阅读文档 但我不知道如何在搜索栏完成后取消搜索栏上的 拖动 例如 当我将条拖到末尾时 我希望发生一个事件 但是 如果我将手指放在屏幕上并将手指拖过 SeekBar 即使我重置了 Seekbar 的进度 它也会继续触发该事件 我怎样才
  • 在 swift 中关闭模式 viewController 时传递数据

    我正在尝试从模态视图控制器 to his 源视图控制器 我想我必须使用代表团但它不起作用 protocol communicationControllerCamera func backFromCamera class Camera UIV
  • 加载的 swf 舞台的尺寸

    情况是这样的 我有一个加载外部 swf 的 shell 现在 该 swf 的大小为 800x600 但它是一个动画片段 并且有一些元素延伸到舞台之外 当我将 swf 加载到 shell 并调用其 width 属性时 它返回 1200 因为它
  • 在 .NET 中将 RTF 转换为 HTML

    我已经成功地使用了相反的方法WebBrowser and RichTextBox 但是如何将 RTF 转换为 HTML 呢 如果您弹出 NuGet 并搜索 RTF 现在最受欢迎的结果如下所示RtfPipe 您可以直接安装它 或者通过包管理器
  • 输入类型=“文件”自动点击

    如何在页面首次打开时自动打开输入类型 文件 的浏览对话框 我认为你不应该这样做 如果您曾经访问过 MySpace 页面 您就会知道当网页在加载时自行激活某些内容时会多么令人沮丧 不要违反 UI 的工作方式 让用户请求对话框 此外 如果用户本
  • Pandas:使用 groupby 重新采样时间序列

    给定以下 pandas DataFrame In 115 times pd to datetime pd Series 2014 08 25 21 00 00 2014 08 25 21 04 00 2014 08 25 22 07 00
  • sql存储过程参数作为动态查询的参数

    该过程具有三个参数 但是当我尝试通过传递参数来执行时 它显示一个错误 请帮我 create procedure queryfunctions Tabname varchar 150 colname varchar 150 valuesnam
  • ReactJS 警告:数组或迭代器中的每个子项都应该有一个唯一的“key”属性

    var divArr div 布吉岛啊 div div 呵呵呵 div ReactDOM render div divArr div document getElementById example 但它是错误的 Warning Each c
  • 如何使用 Jetpack Compose 垂直旋转堆叠文本?

    尝试对齐文本元素 如下图所示 如何在 Jetpack Compose 中做到这一点 通常我会使用垂直方向的线性布局和带有rotation of 90 想知道如何在撰写中实现这一目标 撰写版本 1 0 0 beta02 要旋转元素 您可以使用
  • 带有通过键盘向上移动的编辑文本的底页

    我有底片片段向用户显示对他的评论的回应 在底部工作表的底部 我们有编辑文本 用户可以在其中添加新评论 因此 当软键盘打开时 底板会位于键盘上方 并且其顶部会远远超出屏幕 但当键盘打开时 底部工作表应该调整大小 这是我的代码
  • UIImageView 快速捏缩放

    我希望有人能帮助我 我试图允许用户在 UIImageView 上捏缩放 允许最大和最小级别 但由于某种原因 它不能正常工作 图像放大一点然后又弹回来 谢谢 这是缩放功能 func zoom sender UIPinchGestureReco
  • 在 .NET 等托管环境中是否可能出现内存泄漏?

    在 C 中 很容易出现永久性内存泄漏 只需分配内存而不释放它 new char permanent memory leak guaranteed 并且该内存在堆的生命周期内保持分配状态 通常与程序运行时持续时间相同 在 C 程序中是否可能出
  • 如何在R中读取utf-8格式的数据?

    我的系统 win7 R 3 0 2 gt Sys getlocale 1 LC COLLATE Chinese Simplified People s Republic of China 936 LC CTYPE Chinese Simpl
  • 截击补丁错误

    com android volley NoConnectionError java net ProtocolException 未知方法 PATCH 必须是 OPTIONS GET HEAD POST PUT DELETE TRACE 之一
  • 如何调试 Android java.lang.IndexOutOfBoundsException HeaderViewListAdapter.java 行

    我有一个应用程序位于 android playstore 中 最近我开始在其中看到来自 Crashlytics 的崩溃报告 其中包含以下跟踪 Fatal Exception java lang IndexOutOfBoundsExcepti
  • jQuery .show('slide', { Direction: 'right' }) 不起作用,但 .show('slide') 起作用

    我在顶部菜单 ListItems 的开头插入一个菜单选项并使用 newMenuItem show slide 成功地 但是 我不喜欢它从左上角滑入的方式 所以我将其更改为 newMenuItem show slide direction r
  • 添加共享用户 ID 后,Android 应用程序无法从市场更新

    我将共享用户ID添加到我的应用程序中 当尝试从Google Play商店更新应用程序时 我收到 504错误 设备日志如下 清单文件是正确的 从 android studio 或 adb 安装时没有问题 但无法从市场更新 有任何想法吗 Cop
  • 单次进入/单次退出规则[关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我在某处读过一条规则 遵循单进 单出规则 切勿在同一个函数中编写多个返回语句 这个说法属