最奇怪的事情发生在我的一个XCode项目中。我有一个包含2个项目的解决方案,一个是用C编写的游戏内核库,另一个是使用C库的常见cocos2D / Box2d通用项目。
我为C库中分配的 bool 变量分配一个值,其中包含一个[... boolValue],它是从Objective C单例的plist文件中读取的。
type.bSolid = [[tileInfo objectForKey:@"solid"] boolValue];
即使在bool变量上分配了计算值 true ,当我将其分配给另一个bool变量时,值总是 false ,我无法弄清楚为什么编译器会这样做。
for(i = 0; i < 4; i++)
{
//expression dismembrement in attempt to figure out what's happening
c = pTiles[i]->cType;
p = &pTiledMap->pTileTypes[c];
b = p->bSolid;
printf("%d %c %d %ld\n", i, pTiles[i]->cType, (bool)p->bSolid, sizeof(p->bSolid));
if(pTiles[i] && !(bool)pTiledMap->pTileTypes[pTiles[i]->cType].bSolid)
{
newDistance = distanceOverPoints2D(pTiles[i]->x, pTiles[i]->y, oDest->x, oDest->y);
if(distance == 0 || newDistance < distance)
{
distance = newDistance;
iBest = i;
}
}
}
我不知道为什么b = p-&gt; bSolid在 b 上分配 false ,如果p-&gt; bSolid是<,则没有任何区别strong> true 或 false 。调试工具,手表等一切都可以,就像下一个屏幕截图所示。
我已经尝试将C ++编译器从Apple LLVM 4.1更改为LLVM GCC 4.3但没有成功,我用尽了我的想法,原因可能是什么。
我无法弄清楚为什么XCode会这样做。任何想法?我的Xcode是4.5.2。