1
10
我会沿着这条线做一些事情:
有点c99宏魔法
并使用
但是,如果除了IO错误之外还有其他错误条件,您仍然需要使用一个或多个错误变量来跟踪它们。
|
2
10
穷人基于goto的C异常处理(事实上,goto的唯一实例不是有害的):
你明白了。根据需要重新构造(单个/多个返回、单个清除、自定义错误消息等)。根据我的经验,这是目前最常见的C错误处理模式。关键点是:永远不要忽略stdlib返回代码,任何这样做的好理由(例如可读性)都不够好。 |
3
2
您可以编写一个包装函数
然后用新的“写入”替换所有对“写入”的调用 |
4
2
忽略错误是个坏主意。最好做一些讨厌的事情,比如让程序崩溃,这样至少你知道出了什么问题,而不是默默地继续。更棒的是错误检查和恢复。 如果你使用C++,你可以为文件创建一个RAII包装器,以便它总是被关闭。查看std::auto_ptr了解想法。然后,您可以随时返回一个有用的错误代码或函数,或者抛出一个异常,而不必担心忘记的清理项。 |
5
0
您可以删除如下警告:
解决您的主要问题,如果fwrite()调用中的任何一个失败,我想继续下去是没有意义的,因为输出可能已损坏。在这种情况下,当你标记这个C++时,我会抛出一个异常。 |
6
0
嵌套不好,多次返回也不好。 我以前用过以下模式:
我知道它看起来很难看,但它只有一个返回点,没有过度的嵌套和非常容易维护。 |
7
0
好。。。您可以创建一个包装函数,该函数在写入失败时重新尝试写入,可能最多重试几次,并返回success/failure:
那么您的主代码可以写为
|
8
0
您的第一个解决方案看起来不错。通常是
要使GCC安静,只需:
|
9
0
为什么不把
|
10
0
也许是这样?您可以捕获错误,而不会使代码太不可读,并且可以在人造循环结束后进行清理。
|
11
0
像这样的东西行得通
如果你担心指针被清理干净,你可以在执行fwrite之前用某种形式的智能指针包装指针。 如果你不想使用智能指针,那么这就可以了,但这很麻烦,所以我先试试智能指针路由
|
12
0
对于这一点,一个潜在的优雅的C解决方案可以是这样的(警告-未测试,前面还有未编译的代码):
以上两个目标同时实现:
不幸的是,“丑”
|
13
0
好吧,既然我在找
然后在我的代码中我有:
|
Community wiki · C中有哪些耗时的操作? 1 年前 |
Community wiki · 将所有处理器电源都投入到任务中 1 年前 |
Community wiki · C++为C添加了什么?[已关闭] 1 年前 |
Community wiki · 打印1到1000,不带循环或条件 1 年前 |