这可能是一个风格问题,但我们的开发团队存在一些分歧,我想知道是否还有其他人对此事有任何想法......
基本上,我们有一些调试打印语句,我们在正常开发期间将其关闭。我个人更喜欢执行以下操作:
//---- SomeSourceFile.cpp ----
#define DEBUG_ENABLED (0)
...
SomeFunction()
{
int someVariable = 5;
#if(DEBUG_ENABLED)
printf("Debugging: someVariable == %d", someVariable);
#endif
}
不过,一些团队更喜欢以下内容:
// #define DEBUG_ENABLED
...
SomeFunction()
{
int someVariable = 5;
#ifdef DEBUG_ENABLED
printf("Debugging: someVariable == %d", someVariable);
#endif
}
...您觉得哪种方法更好,为什么?我的感觉是,第一个更安全,因为总是有一些定义,并且不存在它可能破坏其他地方的其他定义的危险。
我最初的反应是#ifdef
, 当然, 但我觉得#if
实际上对此有一些显着的优势 - 原因如下:
首先,您可以使用DEBUG_ENABLED
在预处理器中and编译的测试。示例 - 通常,我希望在启用调试时有更长的超时时间,因此使用#if
,我可以写这个
DoSomethingSlowWithTimeout(DEBUG_ENABLED? 5000 : 1000);
... 代替 ...
#ifdef DEBUG_MODE
DoSomethingSlowWithTimeout(5000);
#else
DoSomethingSlowWithTimeout(1000);
#endif
其次,如果您想从#define
为全局常数。#define
大多数 C++ 程序员通常都不赞成这种做法。
第三,你说你的团队存在分歧。我的猜测是,这意味着不同的成员已经采用了不同的方法,您需要标准化。裁定#if
是首选意味着代码使用#ifdef
即使在以下情况下也会编译并运行DEBUG_ENABLED
是假的。这是much更容易追踪和删除不应该生成的调试输出,反之亦然。
哦,还有一个小的可读性问题。您应该能够在您的代码中使用 true/false 而不是 0/1#define
,并且因为该值是单个词法标记,所以这是您不需要在其周围添加括号的一次。
#define DEBUG_ENABLED true
代替
#define DEBUG_ENABLED (1)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)