Maw*_*awg 40 c++ embedded exception-handling exception
我意识到这可能是主观的,所以会问一个具体的问题,但首先,背景:
我一直是一名嵌入式软件工程师,但通常在OSI堆栈的第3层或第2层.我不是一个硬件家伙.我一般都经常使用电信产品,通常是手机/手机,这通常意味着像ARM 7处理器.
现在我发现自己处于一个更通用的嵌入式世界中,在一个小型的初创公司中,我可能会转向"不那么强大"的处理器(这是主观位) - 我无法预测哪个.
我已经阅读了很多关于嵌入式系统中C++异常处理的争论,并没有明确的答案.有一些关于可移植性的小担忧和一些关于运行时的担忧,但它似乎主要归结为代码大小(或者我正在阅读错误的辩论?).
现在我必须决定是否使用或放弃异常处理 - 对于整个公司,永远(它将进入一些非常核心的s/w).
这可能听起来像"一根绳子有多长",但有人可能会回答"如果你的琴弦是8051,那就不要.如果,OTOH,那就是......".
我跳哪个方向?超级安全,失去一个好的功能,或特殊的代码,可能会在以后遇到问题?
Joh*_*ler 19
在性能方面,我的理解是异常实际上减小了代码的正常执行路径的大小并提高了性能,但使异常/错误路径更加昂贵.(通常是一个很多更昂贵).
因此,如果你唯一担心的是表现,我会说以后不用担心.如果今天的CPU可以处理它,那么明天也会如此.
但是.在我看来,例外是那些需要程序员更聪明的功能之一,所有的时间比程序员可以合理地预计.所以我说 - 如果你可以远离基于异常的代码.远离.
看看Raymond Chen的Cleaner,更优雅,更难以识别.他说这比我做得好.
是否使用例外的选择应该取决于它们是否能够很好地适应您的程序的问题域.
我已经广泛使用了C++异常,无论是在改造旧的C代码还是在一些较新的代码中.(提示:不要试图重新安装在低内存环境中编写的具有各种不一致异常的20岁C代码.这只是一场噩梦).
如果您的问题适合处理一个地方的所有错误(例如,某种类型的TCP/IP服务器,其中每个错误条件都满足'分解连接并再试一次'),那么异常就是好的 - 您可以在任何地方抛出异常,并且知道它将在何处以及如何处理.
另一方面,如果你的问题不适合中央错误处理,那么异常就是一种真正的痛苦,因为试图找出某些东西(或者应该)被处理的东西很容易成为一种Sisyphean任务.通过查看代码很难看到问题.相反,您必须查看给定函数的调用树,并查看该函数的异常将在何处结束,以便确定您是否有问题.