2012-01-04 14 views
0

私は単純なelse ifを持っていて、単語の構文に〜のエラーがあります。 私はこの構文if else inside function

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

機能定義の本文を正しく閉じていますか?おそらくあなたはそうですが、関数定義全体を投稿していないので、それを見逃してしまった場合には不思議です。 –

+0

上記のコードは完全ではありません。 – obo

+0

'enticl()'を囲むコードのいくつかを投稿できますか? – hmjd

答えて

4
for (int i = 0; ... 

この構文はC99です。これは以前の標準では許可されていません。あなたが(それはあなたが先にあなたの関数で定義されたiをシャドウします)とにかくそこにブロックレベルiをしたい場合は、使用

for (i = 0; ... 

:あなたはすでにiを宣言したので、あなただけにそれを変更することができます:

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

またはC99をサポートするコンパイラを入手してください。

1

このコードは、コンパイルする必要があります。

もう1つの問題は、iの再宣言です。私はこれをいくつかのコンパイラで見たことがあります。また、note - forループでは、iを再宣言する必要はありません。既存の宣言を使用することができます。

自分でprintという機能を定義したとします。

+0

私が扱ったすべてのコンパイラは、同じ名前のブロック内で変数の宣言を処理できます。しかし、いくつかのデバッガはできないので、おそらくそれはあなたを捨てましたか? –

+0

gccでコンパイルすると、エラーが出ます。 –

+0

"forループの変数を宣言する"とは、何らかの混乱があるようです。ごめんなさい。私はあなたがint iを持っていれば意味しました。 for(...){int i;} 'は常に正しいはずです。しかし、 'for(int i = ...)'では、コンパイラは仕様にすべて同意せず、問題が始まります。 –

1

Cを厳密に使用している場合は、今のようにFor loop本体の変数を宣言することはできません。私はGCCを使用してこれを試して、私はコンパイルエラーを得た。

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

はまた、あなたがiを再宣言しているようだ、といくつかのコンパイラは、新しいスコープとしてそれを検出することができなくなります。

+1

これはC99であるかどうかによって異なります。また、私はそのような再定義を扱うことができない単一のコンパイラを知らない。それはスペックです! –

+0

@MrLister:http://codepad.orgでCを選択してコンパイルしようとしましたが、そのエラーが発生しました。再定義に関しては、forループの中で変数を再宣言するとVC++ 6.0が苦情を言いました。しかし、私はVC++ 6.0を使用して以来、長い時間がかかりました。 –

+0

VC++ 6は、 '*'の後に変数を宣言すると、 'for'節で宣言していると文句を言います。 VC++ 6は、 'for'節で宣言された変数に対して 'pre-standard style'スコープを使用しました。つまり、変数は' for'ループの終了後に 'alive'のままでした。したがって、 'for'ループの後に変数名の別の定義を持つことはできませんでした。完全性のために、VC6(Cコードのコンパイル)では 'for'節(またはブロック内の最初の非宣言文の後ろ)で変数宣言を許可しませんでした。残念ながら、これはCコードをコンパイルするときにもMSVCのケースです。 –

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]); 
    } 
}