|
|
1
11
错误处理是以下情况中罕见的情况之一
但如果我必须维护那个代码,我会非常沮丧
所以在这种情况下
|
|
|
2
8
使用
|
|
|
3
7
此代码:
可以合法地写成:
内存分配是否成功。 这是有效的,因为如果传递一个NULL指针,free()什么也不做。在设计自己的API以分配和释放其他资源时,您可以使用相同的习语:
设计这样的API可以大大简化资源管理。 |
|
|
4
3
清理
**也许Linus的观点不是一个好论点的最佳例子,但它确实表明
|
|
|
5
3
如果第一个malloc失败,则清理p1和p2。由于goto,p2没有初始化,可能指向任何东西。我用gcc快速运行了这个程序进行检查,试图释放(p2)确实会导致seg错误。 在上一个示例中,变量的作用域在大括号内(即它们仅存在于FAIL_SECTION_BEGIN块中)。 假设代码在没有大括号的情况下工作,您仍然需要在FAIL_SECTION_BEGIN之前初始化所有指向NULL的指针,以避免分段错误。 我并不反对goto和macros,但我更喜欢Neil Butterworth的想法。。
或者,如果它更合适的话。。
|
|
6
2
术语“结构化编程”,我们都知道它是反goto的东西,最初是作为一堆使用goto(或JMP)的编码模式开始和发展的。这些模式被称为
所以,如果你正在使用goto,请以结构化的方式使用它们。这限制了损害。这些宏观政策似乎是一种合理的方法。 |
|
7
2
当每次分配操作后都有大量工作时,您可以在第一个分配操作之前使用标签
我查看了一些确实有嵌入goto语句的宏的代码。第一次遇到时,看到一个标签被可见代码“未引用”,但无法删除,这很令人困惑。我宁愿避免这种做法。当我不需要知道宏做什么时,宏是可以的——它们只是做而已。当你必须知道它们扩展到什么才能准确使用时,宏就不那么好了。如果他们不向我隐瞒信息,他们更像是一种麻烦,而不是一种帮助。 插图-为保护罪犯而伪装的名字:
有几十种变体
使用这些代码的一个地方包含了这个循环——在一个大型交换机的单个案例中,在一个较大的代码块中,有一些小代码块和一些大代码块(结构不是特别好):
那里的代码中是否包含goto语句并不明显!很明显,对它所来自的代码的罪恶进行全面的解释需要一整天的时间——它们是多种多样的。 |
|
|
8
1
在我看来,第一个例子比宏化版本更具可读性。 和 mouviciel 说得比我好多了 |
|
|
9
0
这并不是说你真的可以从失败的malloc中恢复,除非你有值得编写事务系统的软件,如果你这样做了,可以在malloc_or_die中添加回滚代码。 为了更好地使用goto,请查看使用计算goto的解析调度代码。 |
|
|
MaPo · Linux,设置锁定ICMP_过滤器选项 1 年前 |
|
Doohyeon Won · 内联函数上的奇怪现象?[关闭] 1 年前 |
|
|
Bobby · 复合字面值总是左值吗? 1 年前 |
|
9-Pin · C: 嵌套结构的堆栈内存分配 1 年前 |