2009-05-11 26 views
15

セミコロンを過度に使用するコードに遭遇しました。あるいは、私が気付いていないさまざまな目的のためにセミコロンを使用しました。if文の末尾にあるセミコロンとCの関数

if文の最後と関数の最後にセミコロンがあります。たとえば:

int main (int argc, char * argv[]) { 
    // some code 

    if (x == NULL) { 
     // some code 
    }; <----- 

    // more code 

    return 0; 
}; <--- 

gccではなくccでコンパイルされています。 セミコロンは何をしていますか?私は、コンパイラが単に空の文と見なすので、違いはないと仮定しています。

+2

機能終了後のセミコロンは間違っています。 'cc'がそれを受け入れるなら、何らかの空のグローバル宣言としてそれを扱わなければなりませんが、それは間違いです。もう一方のセミコロンはよく説明されています。 –

+0

'-pedantic'フラグを使用すると、gccは最後にセミコロンを警告します。 'cc'はあなたのプラットフォームに依存しますが、しばしば 'gcc'へのソフトリンクですので、試してみるか、 'man cc'を見てみてください。 –

答えて

30

何もしません。彼らは言語をひどくよく理解していない人の兆候だと私は思う。

これが概念的に「所有」しているソースコードの場合は、コードを削除し、作成者と丁寧にチャットしてみます。

+5

これまでのところ、Turbo PascalからC言語に移行するプログラマーのチームがあったとき、これはかなり長年のことでしたが、Pascalではほとんどの状況で「終了」の後にセミコロンが必要で、プログラマーは間違ってコロンと一緒に。いったん習慣が形成されると、それは固執する。 –

7

これはダミーの状態です。サンプルは

if (x == NULL) { 
// some code 
do_something_here(); 
} 

/* empty (dummy statement) here */ ; 

// more code 
some_other_code_here(); 
+0

あなたは思ったよりも良い例を挙げました。 "// some code"は空であり、0個のダミーステートメントは1個のダミーステートメントと同様に有効であるため、ここでは "// empty"にする必要があります。 –

+0

私は彼の例に従っています。そのため、「いくつかのコード」があります。彼は実際のコードに何かを持っていなければなりません。 – Francis

5

と同じです。コンパイラはそれらが空文であるとみなします。それらは必要ではない、私はプログラマが何とか彼らがそうであると思ったと思う。

1

これらのセミコロンは不要です(あなたが言ったように、それらは空文です)。あなたのコードはgccでコンパイルされ、 'x'が定義されていれば(チェックhttp://www.codepad.org) Cコンパイラがコードをコンパイルすることを拒否する理由はありません。

2

最初のセミコロン(if文の後ろ)は、何もしない空の式です。私はそこにそれを持っているのを見ることに失敗します。

2番目のセミコロン(関数の後ろ)は、コードブロックの外にあるのでエラーです。コンパイラは警告を出すべきです。あなたは、コードを足場た場合の対処、まだそれをコンパイルしたいかもしれません

if(condition for tbd block) 
    ; 
else { 
    //Some code here 
} 

+0

CCによる警告なし。だから私はこのコードが奇妙だと思ったのです。 これをlintで実行すると、エラー/警告がスローされることがあります。 – codingbear

+0

私はC標準が内容のない外部宣言を許可したと考えました。言い換えれば、奇妙だが法的に奇妙なことだ。たぶん私はもう一度チェックするほうがいいかもしれない。 –

+0

Windowsプログラマは、メンバ関数の定義の後にオプションのセミコロンを使用できるC++です。しかし、CやC++のどちらも普通の関数定義の後に私の知る限りでは表示されません。 –

0

私は、著者のようなもののために行くされている可能性があると思います。 Jonが示唆しているようにそれがちょうど誤りであるという良いチャンスがあります。

0

これらのセミコロンは、すでに他の人が指摘しているように役に立たない。私が追加したいのはIMOです。これらは最適化されています。つまり、コンパイラはこれらのコードを生成しません。

関連する問題