for循環中的三語句執行順序

for循環的執行語法是:

for(<;初始化>;<條件表達式>;<增量>) 語句;

初始化總是一個賦值語句,它用來給循環控制變量賦初值;條件表達式是一個關係表達式,它決定什麼時候退出循環;增量定義循環控制變量每循環一次後按什麼方式變化。這三個部分之間用";"分開。


在for循環中的三個語句執行順序是如何的呢?通過對彙編代碼的調試發現了其中的玄機。

for( int i = 0;i <= 10;i++)
{
	cout<<i<<endl;
}
 反編譯後的代碼如下
	for( int i = 0;i <= 10;i++)
00413632  mov         dword ptr [i],0 
00413639  jmp         main+104h (413644h) 
0041363B  mov         eax,dword ptr [i] 
0041363E  add         eax,1 
00413641  mov         dword ptr [i],eax 
00413644  cmp         dword ptr [i],0Ah 
00413648  jg          main+13Ch (41367Ch)
	{
		cout<<i<<endl;
0041364A  mov         esi,esp 
0041364C  mov         eax,dword ptr [__imp_std::endl (418290h)] 
00413651  push        eax  
00413652  mov         edi,esp 
00413654  mov         ecx,dword ptr [i] 
00413657  push        ecx  
00413658  mov         ecx,dword ptr [__imp_std::cout (418288h)] 
0041365E  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (418298h)] 
00413664  cmp         edi,esp 
00413666  call        @ILT+315(__RTC_CheckEsp) (411140h) 
0041366B  mov         ecx,eax 
0041366D  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (418294h)] 
00413673  cmp         esi,esp 
00413675  call        @ILT+315(__RTC_CheckEsp) (411140h) 
	}
0041367A  jmp         main+0FBh (41363Bh) 
0041367C  mov         dword ptr [i],0 

可以看到for循環的執行過程是:

1.首先對變量int i進行賦值,而後從第3行跳到第7行;

2.執行條件表達式,判斷是否跳出循環;

3.執行for循環體;

4.執行循環體完畢後,從26行跳轉到第4行,執行增量語句,再順序判斷條件表達式;

5.執行for循環體。。。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章