2012-01-04 235 views
0

我有簡單的其他如果和有錯誤的單詞語法 - 爲。 請幫我解決這個語法如果其他功能

Error 4 error C2143: syntax error : missing ';' before 'type' 
Error 7 error C2143: syntax error : missing ';' before '{' 
Error 3 error C2143: syntax error : missing ')' before 'type' 
Error 6 error C2059: syntax error : ')' 

我的代碼檢查哪個數組較大並提出更大。 這就是我的全部fnction:

void PrintIdentical(...) 
{ 
    int i; 
    int smaller; 


    ... 

    for (i = 0; i < smaller; i++) 
    { 
     printf ("%d", arrA[i]); 
     printf ("%d", arrB[i]); 
    } 
} 
+0

您是否正確地關閉了函數定義的主體?也許你是,但是你還沒有發佈整個函數定義,所以想知道如果你錯過了。 – 2012-01-04 08:21:32

+0

上面的代碼不完整。 – obo 2012-01-04 08:23:40

+0

你可以發佈一些圍繞'enticl()'的代碼嗎? – hmjd 2012-01-04 08:24:05

回答

4
for (int i = 0; ... 

該語法是C99,它在以前的標準中是不允許的。既然你已經宣佈i,你可以更改到:

for (i = 0; ... 

如果你想在那裏塊級i無論如何(這將影子,你在你的函數之前定義的i),然後使用:

int i; 
for (i = 0; ... 

或者得到一個支持C99的編譯器。

1

此代碼應編譯,除非你居然忘了有拖尾}關閉功能。

另一個問題可能是重新聲明i。我在一些編譯器上看到了這一點。另外,一個註釋 - 在for循環中,你不需要重新聲明i,你可以使用現有的聲明。

我還假設你自己定義了函數print

+0

我一直在使用的所有編譯器都可以處理塊內的變量的聲明,並且具有相同的名稱。但是,有些調試器不能,所以也許會把你扔掉? – 2012-01-04 08:34:48

+0

它不會讓我失望,編譯與gcc(不記得版本)在solaris下definetely給出錯誤。 – 2012-01-04 08:41:35

+0

對於「在for循環中聲明變量」的含義似乎存在一些混淆。抱歉。我的意思是如果你有'我'; for(...){int i;}'應該總是正確的。但是,對於'for(int i = ...)'編譯器並不都同意規格,然後問題就開始了。 – 2012-01-06 09:49:58

1

如果您嚴格使用C,則無法像現在這樣在For loop正文中聲明變量。我已經嘗試使用GCC,並且出現編譯錯誤。

error: 'for' loop initial declaration used outside C99 mode 

而且,你似乎重新申報i,和一些編譯器將不能夠檢測到,作爲一個新的領域。

+1

這取決於這是否是C99。此外,我不知道一個編譯器不能處理這樣的重定義。這是在規格! – 2012-01-04 08:29:20

+0

@MrLister:我試着在http://codepad.org上編譯它,選擇C,然後我得到了那個錯誤。至於重新定義,我記得VC++ 6.0,如果我們在for循環內重新聲明一個變量,抱怨。雖然我使用VC++ 6.0已經很長時間了。 – 2012-01-04 08:36:03

+0

如果你在'for'子句中聲明*之後聲明瞭一個變量*,VC++ 6會抱怨。 VC++ 6對'for'子句中聲明的變量使用'預標準樣式'範圍 - 也就是說,變量在'for'循環結束後保持'活動'。所以你不能在'for'循環之後有另一個變量名的定義。爲了完整起見,VC6(編譯C代碼)不允許在'for'子句中的變量聲明(或者在塊中的第一個非聲明語句之後)。不幸的是,編譯C代碼時MSVC仍然是這種情況。 – 2012-01-04 09:09:25

0
void enticl(int arrA[], int arrA_size, int arrB[], int arrB_size) 
{ 
    int i; 
    int smaller; 
    int *arr; 

    if(arrA_size>arrB_size) 
    { 
     smaller=arrB_size; 
     arr = arrB; 
    } 
    else 
    { 
     smaller=arrA_size; 
     arr = arrB; 

    } 

    for(i = 0; i < smaller; i++) 
    { 
     printf("%d\n", arr[i]); 
    } 
}