内部奇怪的无副作用声明的含义

eml*_*lai 3 c++ language-agnostic if-statement no-op

我浏览了一个项目,发现了这个:

if(!StaticAnimatedEntities)
  int esko = esko = 2;
Run Code Online (Sandbox Code Playgroud)

(StaticAnimatedEntities这里的类型是一个简单的无符号短.)

这让我感到非常奇怪,所以我抓住了项目esko并找到了其他类似if的东西,只有它们内部的那条线,f.ex.这个:

if(ItemIDMap.find(ID) != ItemIDMap.end())
  int esko = esko = 2;
Run Code Online (Sandbox Code Playgroud)

(注意,esko在这些ifs 之外没有其他变量.)

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

AnT*_*AnT 5

您有时可以看到这样的代码,只是作为一个锚点位置,在交互式调试器中放置一个断点,以便捕获一些"不寻常"(通常是错误的)条件.

调试器提供的条件断点通常非常慢和/或原始,因此人们经常故意提前计划并提供这样的条件分支,以便为断点创建编译位置.这样一个编译好的条件断点不会像调试器提供的条件断点那样减慢程序执行速度.

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

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

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

  • 我想你一定是对的.Esko是芬兰人的正确男性名字.可能是程序员. (3认同)