当前位置:  开发笔记 > 程序员 > 正文

投掷,返回或错误?

如何解决《投掷,返回或错误?》经验,为你挑选了1个好方法。

我正在创建一个系统.我想知道的是,如果msg不受支持,它该怎么办?我应该说不支持的消息吗?我应该返回0还是-1?或者我应该设置一个errno(base-> errno_).有些消息我不在乎是否有错误(例如setBorderColour).其他我会(addText或者如果我创建一个保存cmd可能保存).

我想知道最好的方法是什么1)快速编码2)调试3)扩展和维护.我可能会调试第三,它很难调试ATM,但那就是有很多遗漏的代码,我没有填写.实际的错误不是很难纠正.什么是让用户知道有错误的最佳方法?

系统的工作方式与此类似但不完全相同.这是C风格,mycode有一堆内联函数,包含settext(const char*text){到msg(this,esettext,text)

Base base2, base;
base = get_root();
base2 = msg(base, create, BASE_TYPE);
msg(base2, setText, "my text");
const char *p = (const char *)msg(base2, getText);

Tyler McHenr.. 8

通常,如果它是C++,除非性能至关重要,或者除非您可能在不支持异常的环境(例如嵌入式平台)中运行,否则更喜欢异常.到目前为止,异常是调试的最佳选择,因为它们在发生时非常明显并被忽略.此外,例外是自我记录.它们有自己的类型名称,通常包含解释错误的消息.返回代码和errno需要单独的代码定义和某种带外方式来传达代码在任何给定上下文中的含义(例如,手册页,注释).

为了快速编码,返回代码可能更容易,因为它们不涉及可能定义您自己的异常类型,并且错误检查代码通常不像异常那样冗长.但是当然最大的风险是静默忽略错误返回代码要容易得多,导致问题直到它们发生之后就不会被注意到,这使得调试和维护成为一场噩梦.

尽量避免使用errno,因为它本身非常容易出错.它是一个全局的,所以你永远不知道谁在重置它,它最明确地不是线程安全的.

编辑:我刚刚意识到你的意思是一个errno成员变量,而不是C风格的errno.这是更好的,因为它不是全局的,但你仍然需要额外的结构来使它的线程安全(如果你的应用程序是多线程的),它保留了返回代码的所有问题.



1> Tyler McHenr..:

通常,如果它是C++,除非性能至关重要,或者除非您可能在不支持异常的环境(例如嵌入式平台)中运行,否则更喜欢异常.到目前为止,异常是调试的最佳选择,因为它们在发生时非常明显并被忽略.此外,例外是自我记录.它们有自己的类型名称,通常包含解释错误的消息.返回代码和errno需要单独的代码定义和某种带外方式来传达代码在任何给定上下文中的含义(例如,手册页,注释).

为了快速编码,返回代码可能更容易,因为它们不涉及可能定义您自己的异常类型,并且错误检查代码通常不像异常那样冗长.但是当然最大的风险是静默忽略错误返回代码要容易得多,导致问题直到它们发生之后就不会被注意到,这使得调试和维护成为一场噩梦.

尽量避免使用errno,因为它本身非常容易出错.它是一个全局的,所以你永远不知道谁在重置它,它最明确地不是线程安全的.

编辑:我刚刚意识到你的意思是一个errno成员变量,而不是C风格的errno.这是更好的,因为它不是全局的,但你仍然需要额外的结构来使它的线程安全(如果你的应用程序是多线程的),它保留了返回代码的所有问题.


C风格的errno是线程安全的; 请参阅http://stackoverflow.com/questions/449778/is-there-a-way-to-use-errno-safely-in-a-multi-threaded-application(但我同意"这是一个全球性的,所以你永远不知道谁在重置它").
推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有