if 中奇怪的无副作用语句的含义

Meaning of weird side-effectless statement inside if

我在浏览一个项目时遇到了这个:

if(!StaticAnimatedEntities)
  int esko = esko = 2;

(这里StaticAnimatedEntities的类型是一个普通的unsigned short。)

这让我觉得很奇怪,所以我为 esko 搜索了该项目,并发现其他类似的 if 里面只有那一行,f.ex。这个:

if(ItemIDMap.find(ID) != ItemIDMap.end())
  int esko = esko = 2;

(请注意,在 if 之外没有其他名为 esko 的变量。)

这段神秘的代码是什么意思?

您有时会看到这样的代码只是作为一个锚点位置,在交互式调试器中放置一个断点,以捕获一些 "unusual"(最常见 - 错误的)条件。

调试器提供的条件断点通常非常慢 and/or 原始,所以人们经常故意提前计划并提供这样的条件分支,以便为断点创建编译位置。这种内置条件断点不会像调试器提供的条件断点那样减慢程序执行速度。

在许多情况下,此类代码被 #ifndef NDEBUG/#endif 包围,以防止其进入生产版本。在其他情况下,人们只是让它不受保护,相信优化编译器无论如何都会将其删除。

为了使其正常工作,if 下的代码应该在调试版本中生成一些机器代码。否则,不可能在上面设置断点。不同的人在这方面有不同的偏好,但代码几乎总是看起来很奇怪和毫无意义。

正是这些代码的无意义为程序员提供了完全的自由,可以在那里编写他们想要的任何东西。而且我会说它经常成为每个程序员签名风格的一部分,某种程度上的指纹。显然,有问题的人 int esko = esko = 2;