c/c++语言开发共享for loop宏编码风格

我在大学的一位导师建议使用宏来减少c99代码中的重复,就像这样。

#define foreach(a, b, c) for (int a = b; a < c; a++) #define for_i foreach(i, 0, n) #define for_j foreach(j, 0, n) #define for_ij for_i for_j 

哪个可以这样使用:

 for_ij { /*do stuff*/; } for_i { /*do stuff*/; } 

另一位具有工业背景的导师不鼓励使用它,声称它被视为他前雇主的反模式(但他不知道背后的原因)。 实际上,通过浏览大型项目的源代码,很少能够在简短的学术范例之外找到这些结构。

我的问题是:为什么这种结构在实践中很少使用? 它在某种程度上是危险的吗?

    这是学术界和现实世界之间差距的完美例证,很难相信。 但是看起来太奇怪了。

    回答你的问题:在实践中使用这种结构,因为它隐藏信息,使用隐式变量和条件是有风险的。

    以下是随意读者会思考的一些问题:

    C程序员非常擅长阅读诸如此类的惯用结构

     for (int i = 0; i < n; i++) { ... } 

    隐藏此循环逻辑的细节不会产生任何影响,适得其反,容易出错,并且应该被本地编码约定禁止。 它不在我的团队中的唯一原因是没有人想出这么奇怪的想法。

    您可能需要谨慎使用希望使用这些缩写的大学导师,可能是APL怀旧,并避免冲突。 你可能想和他一起玩一些打高尔夫球的代码 ,有专门的堆栈交换 ,他会喜欢人们如何浪费无数小时从他们的源代码中削减字节...

    但是你应该遵循其他导师的建议,编写清晰明确的代码,仔细缩进和间隔,重要的是有意义的名称,以及使用很明显的短名称。 尽可能使用惯用结构,因为它使代码更易读,更不容易出错,更适合优化编译器。

    问题在于重复的减少(以及可读性的提高)相当微不足道。 你在减少

     for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) 

     for_ij 

    由于变量名称ijn都很短,因此重复它们不是问题,这并没有太大的改进。

    同时,你隐藏了参数n - 后一个循环隐含地依赖于n ,即使n在for循环中或者(很可能)在for循环体中也没有出现。 隐藏重要信息会使代码更难阅读 - 为了阅读本文,您需要知道n重要性,您只能通过搜索两个级别的宏间接来看到它。

      以上就是c/c++开发分享for loop宏编码风格相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/544605.html

      (0)
      上一篇 2021年1月9日
      下一篇 2021年1月9日

      精彩推荐