C++中的goto陷阱

尽管程序设计中不提倡使用goto语句,但是有的时候为了简化代码,难免会使用到goto。下面我要讨论的这个陷阱C语言程序中不会遇到,反而C++中稍不注意就会引起问题。

直接看以下代码:

int _tmain(int argc, _TCHAR* argv[])
{
	int t1 = 1;
	if (t1 >0)
	{
		goto __next;
	}
	int t2 = 5;
__next:
	t2++;
	return 0;
}


这段代码在vs2008,以及vs2013上都能顺利编过,甚至不会有任何警告。但如果你编译的是release版本程序,很遗憾,程序虽然能运行,但是t2中得到的值并不是我们想看到的6!

下面,看看这段代码不带优化编译的汇编程序:

	int t1 = 1;
00961016  mov         dword ptr [t1],1 
	if (t1 >0)
0096101D  cmp         dword ptr [t1],0 
00961021  jle         wmain+17h (961027h) 
00961023  jmp         __next (96102Eh) 
	{
		goto __next;
00961025  jmp         __next (96102Eh) 
	}
	int t2 = 5;
00961027  mov         dword ptr [t2],5
__next:
	t2++;
0096102E  mov         eax,dword ptr [t2] 
00961031  add         eax,1 
00
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值