我有一段代码,其中似乎变量在预处理器代码块的末尾发生了变化。
int initialKeyCount;
#if(DEBUG)
// int initialKeyCount = _root.CountAllKeys();
initialKeyCount = 20000;
#endif
currNode = currNode.EnsureDegreeKeysPresent(parent); //initialKeyCount = 19969 here
#if(DEBUG)
int currentKeyCount = _root.CountAllKeys();
Debug.Assert(initialKeyCount == currentKeyCount,
string.Format("EnsureDegreeNodesPresent changed the node count from {0} to {1}.", initialKeyCount, currentKeyCount));
#endif
在应该分配 20000 之后在调试器中执行此操作时,initialKeyCount = 19969。我已经玩了一点,发现在第一个预处理器块内分配给 initialKeyCount 是正确的,但是一旦代码离开第一个预处理器阻止值神奇地更改为 19969。
无论变量是在第一个预处理器块内部还是外部声明,此行为都是相同的。该值在第二个预处理器块内保持为 19969。
预处理器块中的分配是否在该块之外未定义?这似乎是错误的,但似乎就是这里发生的事情。