2011-09-07 9 views
5

我々は二つの方法でコメントをすることができますCで:Cでコメントを書く方が良いですか?

1>

/* this is one way */ 

2>

// this is 2nd way 

二つの違いは何ですか?
もう一方の方が優れていますか?

または

は両方とも同じ影響と任意のプラットフォームでコンパイルや処理に差はありますか?

編集:ちょうどより便利かつ自然な方使用 は、特に組み込み

+0

私はCでプログラミングしませんが、オープンソースプロジェクト(RubyインタプリタのMRI版など)は最初の方法しか許さないと思います。あなたがそれらに貢献することを計画しているなら、自分の好みに合わせる習慣に入ることもあります。 –

答えて

4

一つ(おそらく理論的な)理由ないは、彼らがC90でサポートされていないということです。最近のCコンパイラのほとんどは、C99の残りの部分をサポートしていなくても//のコメントをサポートしていますが、別のコンパイラではの異なるサブセットがサポートされています。

C90をサポートするコンパイラは、C90準拠のモードで呼び出すと、//のコメントを拒否(または少なくとも警告)します。

移植性について熱心で、コードがどのCコンパイラでもコンパイルされるようにするには、C90準拠のモードでコンパイルする必要があります。つまり、//のコメントは拒否されます。 拡張機能または部分的な(完全な)C99準拠を有効にしますが、他のC99機能も有効にします。コンパイラは警告を表示しません。その他 C99固有の機能偶然にも。

Andrew Grimmのコメントで指摘されているように、一部のプロジェクトでは、ある形式を必要とするコーディング標準がある場合があります。

たとえば、gccは//コメントとlong long(その他の多くのC99機能)をサポートしています。 gccの//コメントをに設定すると、long long診断が無効になります。

しかしほとんどの場合、これはおそらく//のコメントを避けるための十分な理由ではありません。 C99固有の機能、それらの機能をサポートするコンパイラ、およびサポートしているコンパイラを認識している場合は、移植可能なコードを書くことができます。

+0

これは私が知りたいリレーです。古いバージョンのc..thanksでは//がサポートされていないことを疑う –

5

のためのコードを書きます。短いコメントの末尾にある短いコメント、いくつかの言葉は//でうまくいきます。複数の行にまたがる長いコメントは、おそらく伝統的にはスタイル/* ... */より優れています。どんなものであれ、それは個人的な好みやチームのコーディング基準になります。

コンパイルプロセスに違いはありません。

8

技術的には、現在と過去のすべてのコンパイラで、最初の方法でのみ動作することが保証されています。実際には、1980年代半ば以降に実装されたCコンパイラは両方とも実装されているため、レガシーコンパイラ用に書かない限り、あなたやあなたの組織にとって最適な方法で操作できます。

+2

C++スタイルのコメント(//)がC99標準でCに追加されましたが、多くのコンパイラではそれ以上の長時間の使用が可能です。 –

+1

'//'コメントは、MSVCがCモードでコンパイルするときにサポートするいくつかのC99言語(非ライブラリ)機能の1つです。実際に、それが唯一のものかどうか疑問に思う? –

0

あなたの言ったことと同じように、どちらのプラットフォームでも同じ影響があり、コンパイルや処理に違いはありません。

0
  1. これは、簡単にあなただけのコメントをこの方法を使用して行ごとにコメントすることができ、複数行のコメント
  2. を作成する方法です。

どちらが良いかは、実際には個人的な好みの問題です。コメントは複数の行にまたがっていますが、最初は使いますが、私の個人的な好みです。

0
/* this is one way */ 

主に1ライン分のブロックコメント と

// 

のためにこれを使用しています。

いずれかの方が良いです。

// 

これはどのコンパイラでも動作することが保証されています。

+0

いいえ、2番目の例(二重スラッシュ)は元々はサポートされていなかったため、どのコンパイラでも動作しません(Wallykは他の回答の1つとして) – fluffyben

+0

訂正のための0xx –

1

//を使用する理由の1つは、内部にコメントを持つ大きなコードブロックをコメントにしたい場合です。 /* */でネストされたコメントはできません。

/* 

/*printf("foo");*/ 
printf("bar"); 

*/ 

をしかし、これはokです::

これはコンパイルされません

/* 

//printf("foo"); 
printf("bar"); 

*/ 
3

あなたはいくつかのコードをgrepをする必要がある場合、あなたはすべてのために使用される単一の行のコメント利点を持っていますあなたがブロックをコメントアウトしても(STRG + Shift + 7)検索フレーズが見つかったグレープコードは、//と表示されます。複数行コメントが表示されないため、誤解を招くことはありません。

1 #define MY_COUNTER 42 
2 if(MY_COUNTER == index) 
3 { 
4  tempVar = calcSomething(); 
5  doThis(); 
6 // tempVar = MY_COUNTER; 
7  doThat(); 
8 } 

grepの結果:
1の#define MY_COUNTER 42
2 IF(MY_COUNTER ==インデックス)
6 // tempVar = MY_COUNTER。

上記のコードでは、grepの結果(MY_COUNTERを検索)に直接表示されます.8行目がコメントアウトされています。ここで

1 #define MY_COUNTER 42 
2 if(MY_COUNTER == index) 
3 { 
4  tempVar = calcSomething(); 
5  doThis(); 
6 /*  
7  tempVar = MY_COUNTER; 
8 */ 
9  doThat(); 
8 } 

あなたはコメントアウト行を見ることができない。(MY_COUNTER ==インデックス)
7 tempVar = MY_COUNTER場合
1の#define MY_COUNTER 42
2。 //コメントを使用する

関連する問題