|
|
1
17
|
|
|
2
35
|
|
|
3
8
你在教室里干什么
这样,您就短路了整个函数,甚至不必担心下面的函数调用。
回到过去,我又读了一遍,我意识到你在家里做什么并不重要
|
|
4
6
如果错误代码是布尔型的,请尝试下面更简单的代码:
|
|
|
5
5
|
|
|
6
4
其他人提出了好主意。以下是我见过的成语
你可以把这个宏出来
或者,如果你真的觉得自己很有动力的话,可以打电话检查一下,这样就可以像这样使用它们了
或
--
您可以使用该模式,或者尝试用宏来简化它。 -- 最后,如果您感觉/真的/有动力,可以使用setjmp/longjmp。
本质上,一个新jmp\u buf和一个setjmp函数的声明就是设置try块。setjmp返回非零的情况是catch,调用longjmp是抛出。我写这篇文章的时候传递了jmpèbuf,以防您需要嵌套处理程序(例如,如果您需要在发出错误信号之前释放内容);如果您不需要它,可以随意声明err和jmp\u buf为globals。
-- 呸。我受够了(疯狂的例子未经检验。一些细节可能会被删除。) |
|
|
7
3
你应该看看DirectX对HRESULT做了什么-基本上就是这样。例外的产生是有原因的。或者,如果你在Win32上运行,他们有SEH在C程序中运行。 |
|
|
8
3
而现在为了完全不同的东西。。。 另一种方法是使用结构来包含错误信息,例如:
这提供了丰富的错误报告:如果方法失败,您可以填写一个以上的简单错误代码(例如错误消息,代码行和失败的文件,或其他)。作为一个结构的好处是,如果你以后想一些有用的东西,你可以添加它——例如,在我上面的结构中,我允许调试构建包含错误的位置(文件/行),但是您可以随时在其中添加整个调用堆栈的转储,而不必更改任何客户机代码。 您可以使用全局函数来填写ErrorInfo,以便可以干净地管理错误返回,并且可以更新结构以方便地提供更多信息:
…您可以使用此函数的变体返回FALSE、0或NULL,以允许将大多数错误返回表述为一行:
这为您提供了其他语言中异常类的许多优点(尽管调用者仍然需要处理错误-调用者必须检查错误代码,并且可能必须提前返回,但是它们什么也不做或者几乎什么都不做,并且允许错误传播到一系列调用方法中,直到其中一个方法希望处理它,就像异常一样。
然后,如果从调用的函数中“捕获”错误,则可以创建新的更高级别的错误描述,并返回这些错误的链。e、 g.“鼠标速度将恢复为默认值”(因为)“无法找到首选项块‘MousePrefs’”(因为“XML读取器失败”(因为)“找不到文件”)。
|
|
|
9
2
这可能不是您真正想要做的,而是使用了多少函数式编程语言,更常见的是它们如何对代码进行优化建模。 |
|
|
10
1
我最近看到的是:
do/while循环构造的意义并不明显,因为循环构造被用作廉价的goto替换,这只能在循环尾部看到。我第一次肯定这个构造会引起很多“WTF”时刻。 至少需要一个注释来解释为什么代码是按要求的方式编写的。 |
|
|
11
1
这是一篇内容丰富的文章&IBM Unix测试文件系列文章:
使用标准错误机制 https://www.ibm.com/developerworks/aix/library/au-errnovariable/
|
|
|
12
0
如果您使用的是特定的上下文,我认为下面的模式非常好。其基本思想是对错误集状态的操作是不可操作的,因此可以将错误检查推迟到方便的时候!
一个具体的例子:反序列化上下文。任何元素的解码都可能失败,但该功能可能会在不进行错误检查的情况下继续,因为所有
|
|
Fahim B · 删除id号之间的空格[重复] 1 年前 |
|
|
Matt Schaaf · 如何获得每15分钟生成的数据点的日均值? 1 年前 |