加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C代码纯度

发布时间:2020-12-16 03:34:23 所属栏目:百科 来源:网络整理
导读:我正在C环境工作: a)我们禁止使用异常 b)是应用/数据服务器代码,用于评估不同类型的请求 我有简单的类封装服务器操作的结果,也是内部使用的很多功能. class OpResult{ ..... bool succeeded(); bool failed(); .... ... data error/result message ...}; 当
我正在C环境工作:
a)我们禁止使用异常
b)是应用/数据服务器代码,用于评估不同类型的请求

我有简单的类封装服务器操作的结果,也是内部使用的很多功能.

class OpResult
{
  .....
  bool succeeded();
  bool failed(); ....
  ... data error/result message ...
};

当我尝试使所有的功能都小而简单时,就会出现很多这样的块:

....
OpResult result = some_(mostly check)function(....);
if (result.failed())
  return result;
...

问题是,使宏观看起来像这样吗?

#define RETURN_IF_FAILED(call) 
  {                            
    OpResult result = call;    
    if (result.failed())       
      return result;           
  }

我明白有人可以称之为讨厌,但有更好的方法吗?
你会建议什么其他方法处理结果和避免很多的膨胀代码?

解决方法

这是一个权衡.您正在交易代码大小来模糊逻辑.我更喜欢将逻辑保留为可见.

我不喜欢这种类型的宏,因为它们打破Intellisense(在Windows上)和程序逻辑的调试.尝试在函数中的所有10个返回语句上放置一个断点,而不是检查,只是返回.尝试逐步浏览宏中的代码.

最糟糕的一点是,一旦你接受这一点,很难反对一些程序员喜欢用于常见的迷你任务的30行怪物宏,因为他们澄清了事情.我已经看到代码,其中不同的异常类型由四个级联宏处理,导致源文件中的4行,宏实际上扩展到> 100条真线.现在,你是否减少代码膨胀?不可以用宏来容易地说出来.

反对宏的另一个一般论据即使在这里并不明显适用,也是能够将它们嵌套在难以破译的结果上,或传递引起奇怪但可编译的参数的参数.在使用参数两次的宏中使用x.我总是知道我在哪里站立的代码,我不能说一个宏.

编辑:我应该补充的一个意见是,如果你真的重复这个错误检查逻辑一遍又一遍,也许在代码中有重构机会.不是一个保证,但更好的方法减少代码膨胀,如果它适用.查找重复的调用序列,并将公共序列封装在自己的函数中,而不是解决每个调用如何单独处理.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读