メインコンテンツ

CERT C: Rec.MSC04-C

コメントは一貫性のある読みやすい方法で使用する

説明

ルール定義

コメントは一貫性のある読みやすい方法で使用します。1

Polyspace 実装

ルール チェッカーは、"コメント内での /* および // の使用" をチェックします。

すべて展開する

問題

この問題は、コメント内で文字列 /* および // を使用している場合に発生します。

ソース コード内のこのルールに注釈はつけられません。注釈については、コードへの注釈付けと既知の結果または許容可能な結果の非表示を参照してください。

リスク

コード コメント内のこれらの文字列は、予期せぬエラーを示す可能性があります。次に例を示します。

  • コードの /* */ コメントに /* または // が含まれる場合、通常コードが誤ってコメント アウトされたことを意味します。

  • コードの // コメントに /* が含まれる場合、通常誤って /* */ がコメント解除されたことを意味します。

  • コードに入れ子になったコメントが含まれています。このようなコメントは、わかりにくく、開発者を混乱させる可能性があります。

例 - /*// コメントに使用されている
int x,y,z,o;


void non_compliant_comments ( void )
{
	x = y //  	/* Noncompliant
	+ z
	//  */
	;
	x = y//**/ z //Noncompliant
	+o;	
	x = y //*divisor:*/z  //Noncompliant
	+o;
	
	z++;	//	Compliant with exception: // permitted within a // comment
}

void compliant_comments ( void )
{
	x = y /*  	Compliant
	+ z
	*/
	;
	x = y / /*divisor:*/ z //Compliant
	+o;	
	z++;	//	Compliant with exception: // is permitted within a // comment
}

この例では、関数 non_compliant_comments 内で、次のようになります。

  • x の 1 つ目の定義で、文字 /*// コメントとみられる箇所で発生しており、ルールに違反しています。コメントの構造からすると、実行される演算は x = y + z; です。しかし、2 つの // がないと、完全に異なる演算 x=y; が実行されます。いずれの演算が意図されているのか不明確です。

  • x の 2 つ目の定義と 3 つ目の定義で、文字 /*// コメントとみられる箇所で発生しており、このルールに違反しています。わかりにくいコメント配置のために、x は、これらのステートメント内で、意図された x = y/z + o ではなく、y+o として定義されています。

コメント形式は意図が明確となるよう使用してください。たとえば、関数 compliant_comments では次のようになります。

  • x の 1 つ目の定義では、x が x = y として定義されており、残りのコードが故意にコメント アウトされていることが明確です。

  • x の 2 つ目の定義では、x が x = y/z+o として定義されていることが明確です。コメント /*divisor*/ の配置は、わかりやすく、コードの理解を阻害していません。

演算 x=y; が意図されていることが明確です。

チェック情報

グループ: Rec.48.その他 (MSC)

バージョン履歴

R2019a で導入

すべて展開する


1 This software has been created by MathWorks incorporating portions of: the “SEI CERT-C Website,” © 2017 Carnegie Mellon University, the SEI CERT-C++ Web site © 2017 Carnegie Mellon University, ”SEI CERT C Coding Standard – Rules for Developing safe, Reliable and Secure systems – 2016 Edition,” © 2016 Carnegie Mellon University, and “SEI CERT C++ Coding Standard – Rules for Developing safe, Reliable and Secure systems in C++ – 2016 Edition” © 2016 Carnegie Mellon University, with special permission from its Software Engineering Institute.

ANY MATERIAL OF CARNEGIE MELLON UNIVERSITY AND/OR ITS SOFTWARE ENGINEERING INSTITUTE CONTAINED HEREIN IS FURNISHED ON AN "AS-IS" BASIS. CARNEGIE MELLON UNIVERSITY MAKES NO WARRANTIES OF ANY KIND, EITHER EXPRESSED OR IMPLIED, AS TO ANY MATTER INCLUDING, BUT NOT LIMITED TO, WARRANTY OF FITNESS FOR PURPOSE OR MERCHANTABILITY, EXCLUSIVITY, OR RESULTS OBTAINED FROM USE OF THE MATERIAL. CARNEGIE MELLON UNIVERSITY DOES NOT MAKE ANY WARRANTY OF ANY KIND WITH RESPECT TO FREEDOM FROM PATENT, TRADEMARK, OR COPYRIGHT INFRINGEMENT.

This software and associated documentation has not been reviewed nor is it endorsed by Carnegie Mellon University or its Software Engineering Institute.