应用一些基本宏来简化大型项目中的代码是一个好主意吗?

Tim*_*eaf 8 c++ macros project-planning coding-style

我已经在基础c ++库上工作了一段时间,而且我有很多想法可以真正简化代码编写和管理过程.其中之一是引入一些宏来帮助简化经常出现的语句,但比必要时复杂一点.

例如,我想出了这个基本宏来简化最常见的for循环类型:

#define loop(v,n) for(unsigned long v=0; v<n; ++v)
Run Code Online (Sandbox Code Playgroud)

这将使您能够替换那些看起来如此笨重的笨重的循环:

for (int i = 0; i < max_things; i++)
Run Code Online (Sandbox Code Playgroud)

使用更容易编写的内容,甚至更高效:

loop (i, max_things)
Run Code Online (Sandbox Code Playgroud)

使用这样的约定是一个好主意吗?使用不同类型的编译器可能会遇到任何问题吗?对于不熟悉宏的人来说,这会让人感到困惑吗?

dka*_*man 26

恕我直言,这通常是一个坏主意.您实际上是将众所周知且理解的语法改变为您自己的发明.不久你可能会发现你重新发明了这种语言.:)

  • +1绝对不要这样做.宏使未来的开发人员更难理解和调试代码.尝试在Visual Studio中调试宏重代码,您将学习一个新的痛苦定义. (6认同)
  • <sarcasm>但我认为大多数开发人员喜欢重新学习他们已经熟悉的东西.他们真的没有太多事要做或已经学过.</ sarcasm> (3认同)
  • @Noah:你是对的.减少"不要重新发明语言"到"不写功能"是荒谬的.在编译代码之前评估宏,从而破坏类型系统和范围规则.即使使用现代调试器,调试宏也很困难或不可能,因为代码实际上并不存在.由格式错误的宏引起的细微语法错误通常会生成编译器错误,而不会提示实际问题.变量和函数名称可以被静默替换,从而产生极其错误的行为.名单还在继续.这些问题都不适用于功能. (3认同)
  • +1"简化"宏是一个非常糟糕的主意.你最终会得到一个其他人都不知道的秘密语言.我可怜的维护程序员必须学习DoctorT ++来追踪你的错误. (2认同)