【发布时间】:2020-09-03 09:30:40
【问题描述】:
我正在与一位高级 C++ 开发人员一起工作。在他的大部分代码中,他都包含调试部分。它看起来像这样:
void do_something() {
int var = 10
#ifndef NODEBUG
trace("Function Start %s", __FUNCTION__);
#endif
while (someCondition) {
var += 1
#ifndef NODEBUG
trace ("Var = %d \n", var)
#endif
}
... (Do some other stuff)
... (Do some more stuff)
#ifndef NODEBUG
trace("Function End %s", __FUNCTION__);
#endif
}
我没有他那么有经验,但是这些代码 sn-ps 到处都是,这确实阻碍了可读性和可理解性。在我看来,预处理器条件至少应该与其余代码一起使用。
我应该养成这种习惯吗?我不确定这是否是一个好方法,但在我看来,这会极大地膨胀代码,应该被排除在外。
【问题讨论】:
-
也许
#ifndef可以移动到trace中。取决于trace是什么以及它在其他地方的使用方式。 -
您可以通过将
#ifdef移动到trace或在trace不属于您的情况下编写包装器来改进。除此之外,虽然日志记录确实会影响代码的可读性,但它的用处远远超过了这种损失。 -
...阻碍了可读性... 嗯,这取决于您使用的编辑器。就像在 VS Code 上一样,如果您定义了
NODEBUG,该块的透明度会低得多。这个问题显然是基于意见的。我认为,如果您与您的上级交谈并尝试了解他发表这些声明的观点,那肯定会有所帮助。 -
不错。九行代码,实现零思维。他们将在下一次加薪谈判中派上用场!
-
这里的“专业提示”是不要创建一个不可读的预处理器丛林,而是通过版本控制来处理它。做一个调试分支,单独维护调试代码。保存您的生产代码,使其看起来完全是垃圾。