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

避免重复代码

发布时间:2020-12-16 03:16:26 所属栏目:百科 来源:网络整理
导读:让我们说: switch( choice ) { case A: stmt; do_stmt_related2A; break; case B: stmt; do_stmt_related2B; break; case C: something_different(); ... } 如何避免重复stmt代码? 但是有没有解决办法? gcc扩展标签作为值看起来相当不错的情况. switch( c
让我们说:
switch( choice ) {
  case A:   
     stmt;
     do_stmt_related2A;
  break;

  case B:
     stmt;
     do_stmt_related2B;
  break;

  case C: something_different();
   ...
  }

如何避免重复stmt代码?

但是有没有解决办法?
gcc扩展标签作为值看起来相当不错的情况.

switch( choice ) {
     do {
     case A:  ptr = &&A_label;
     break;
     case B:  ptr = &&B_label;
     } while(0);
              stmt;
              goto *ptr;
     case C: ...

有什么技巧可以在ANSI-C中做同样的事情吗?
编辑:当然我已经想到了功能/宏/内联.但还有什么?
这不是关于性能.只是为了教育目的;)

解决方法

为什么你不重构stmt(我假设这是一大块指令,而不是单行)到自己的函数do_stmt()并调用它?就像是:
switch( choice ) {
    case A:
        do_stmt();
        do_stmt_related2A;
        break;
    case B:
        do_stmt();
        do_stmt_related2B;
        break;
    case C: something_different();
        ...
}

那个gcc的伎俩是真的很可怕.我宁愿在任何一天在这样的怪物上有可读的代码.

你应该总是认为继承你的代码的程序员是一个杀人的疯子谁知道你住的地方:-)

(编辑:李大同)

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

    推荐文章
      热点阅读