i“被编译器优化了“,“未定义标识符”,调试时watch不到此变量,调试时跳过了此变量

问题

在做一个工程的时候,我使用如下语句进行变量赋值:

	int i = 0;//被跳过了
	int Num_W[32], Num_R, Num_W_Temp;
//需要写入寄存器的数据和从寄存器读出来的寄存器当前值和暂存单元
	
    for (i = 0;i < 32; i++)//被跳过了
	{
		Num_W_Temp = Num_W[i];//被跳过了
		Num_W_Temp = Num_W_Temp <<  OtherPara[i][1];//被跳过了
		Num_R = SPIRead(OtherPara1Ctrl[i][0]);
		Num_W_Temp = Num_W_Temp | Num_R;//被跳过了
		SPIWrite(OtherPara[i][0], Num_W_Temp);
	}

在标注//被跳过了的地方,调试时都跳过了

原因

开发环境是VS2015,编译分为debug模式和release模式,出现此问题的时候,我选择的是release模式,此模式会分析代码中没有读写过的部分或者变量值确定了的部分,并且用常量替代之,这几处被算完了、出结果了,编译器认为“这些都是已知变量,都用常量替换了把”,然后watch的时候自然就看不到变化,也看不到定义了。之所以这个循环计数变量都莫得了,当然也是上述原因,循环结构被展开成了顺序结构,在运行的时候自然不会给计数变量留内存,因为都“平铺”开来了嘛。

解决

release不让咱们看,换debug就行了嘛。

猜你喜欢

转载自blog.csdn.net/Mr_liu_666/article/details/107377039