2015-09-13 78 views
0
for(int i = 0 ; i<n ; i++) { do something } 

具有同等while循環:爲什麼兩個FOR循環的相同變量聲明是正確的?

int i = 0; 
while(i<n) { 
    do something 
    i++; 
} 

現在,

for(int i = 4 ; false ;); 
print i;//prints 4 
for(int i = 7 ; false ;); 
print i;//prints 7 

根據我的理解,必須等同於:

int i = 4; 
while(false); 
int i = 7; 
while(false); 

這兩次聲明「一世'。而且,明顯的錯誤。

現在,爲什麼在for循環中沒有針對'i'的重新聲明錯誤?

警告:給予兩次警告後

碼跑 'I1' 的名稱查找更改爲新的ANSI '爲' 作用域

警告:使用過時的 'I1'結合

+0

這不是'C',也許'C++'?請添加正確的標記 – Nasr

+2

'打印我; //打印4'和'打印我; //打印7'不會編譯 –

+0

運行代碼後,我問了這裏。 – user3104225

回答

0

微軟提出他們的編譯器的擴展,如果啓用,for循環變量的範圍擴展到外部範圍,示例不會編譯。這不符合標準,這是一個歷史遺留問題。擴展可以在項目設置中禁用。

+3

[https://msdn.microsoft.com/en-us/library/84wcsx8x.aspx](https://msdn.microsoft.com/en-us/library/84wcsx8x.aspx) – 4566976

+0

@ 4566976所以它是一些設置錯誤?如果我使設置正確。它不會編譯? – user3104225

+0

@ user3104225當你使用gcc時,這是不相關的。它適用於Microsofts編譯器cl.exe。 – 4566976

2

沒有,他們是不相等的

for(int i = 4 ; false ;); // scope of i is within for 
print i; // This is a compilation error 
for(int i = 7 ; false ;); // scope of i is within for loop 
print i; // This is a compilation error 

如果這裏

int i = 4; // scope is not strictly blocked hence 
while(false); 
int i = 7; // re declaration error for this 
while(false); 
+0

不是'while(false)'無限循環,並且會導致系統崩潰? – Nasr

+0

@Nasr無限循環不會造成崩潰。順便說一句,那個循環不是一個無限循環。它甚至不會運行一次。你在想'while(true)'嗎? –

+0

@CoolGuy是的,你是對的,在這裏誤讀:)但在OS上運行的無限循環會導致崩潰(取決於操作系統),對不對? – Nasr

相關問題