У меня есть кусок кода, где кажется, что переменная изменяется в конце блока кода препроцессора.
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
При выполнении этого в отладчике initialKeyCount = 19969 после предположительного присвоения 20000. Я немного поиграл с этим и обнаружил, что назначение initialKeyCount правильно внутри первого блока препроцессора, но как только код покидает первый препроцессор block значение волшебным образом меняется на 19969.
Это поведение одинаково независимо от того, объявлена ли переменная внутри или снаружи первого блока препроцессора. Значение остается 19969 внутри второго блока препроцессора.
Назначения, сделанные в блоке препроцессора, не определены вне этого блока? Это кажется неправильным, но, похоже, это то, что здесь происходит.