メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

MISRA C:2012 Rule 1.1

The program shall contain no violations of the standard C syntax and constraints, and shall not exceed the implementation’s translation limits

説明

ルール定義

The program shall contain no violations of the standard C syntax and constraints, and shall not exceed the implementation’s translation limits 1 .

Polyspace 実装

ルール チェッカーは、以下の問題をチェックします。次の点に注意してください。

  • 仕様は、解析で使用されている C 標準のバージョンによって異なります。C 標準バージョン (-c-version) を参照してください。

  • チェッカーで使用されている制限の一部は、オプション -code-behavior-specifications を使用して変更できます。-code-behavior-specifications を参照してください。

問題C 標準の依存関係その他の情報
整数定数が long int (定数が符号付きの場合) または unsigned long int (定数が符号なしの場合) の範囲外にあります。C90 でのみチェックされます。ルール チェッカーは、変数 long int のサイズの指定 (通常は 32 ビット) を使用します。ターゲット プロセッサ タイプ (-target) も参照してください。
サイズ 0 の配列が使用されています。C90 でのみチェックされます。 
翻訳単位で定義されたマクロの数が標準で指定されている制限を超えています。

許容されるマクロ定義の数は以下のとおりです。

  • C90: 1024

  • C99 以降:4095

翻訳単位は、ソース ファイルおよびソース ファイルに直接または間接的に含まれるヘッダー ファイルからなります。これらはコンパイル時に最小のオブジェクト ファイルを作成するために必要なファイルです。ルール チェッカーは、ソース内のマクロとソースに含まれるヘッダー内のマクロの合計数が標準で指定されている制限を超えていないことを要件とします。

制御フロー ステートメント (ifwhile など) 内の入れ子の深度が、標準で指定されている制限を超えています。

許容される入れ子の最大深度は以下のとおりです。

  • C90: 15

  • C99 以降:127

 
インクルード ファイルを使用した包含のレベル数が、標準で指定されている制限を超えています。

許容される包含の最大レベル数は以下のとおりです。

  • C90: 8

  • C99 以降:15

 
構造体または共用体のメンバー数が標準で指定されている制限を超えています。

構造体または共用体の最大メンバー数は以下のとおりです。

  • C90: 127

  • C99 以降:1023

 
構造体内の入れ子のレベル数が、標準で指定されている制限を超えています。

入れ子の最大深度:

  • C90: 15

  • C99 以降:63

 
1 つの列挙内の定数の数が標準で指定されている制限を超えています。

許容される列挙定数の最大数は以下のとおりです。

  • C90: 127

  • C99 以降:1023

 
アセンブリ言語のステートメントが使用されています。すべての C 標準でチェックされます。 
非標準のプリプロセッサ命令が使用されています。すべての C 標準でチェックされます。ルール チェッカーは、C 標準に存在しないプリプロセッサ命令 (たとえば、#ident#alias#assert など) の使用にフラグを設定します。
プリプロセッサ命令の後に認識されないテキストがあります。すべての C 標準でチェックされます。

ルール チェッカーは、プリプロセッサ命令 (# で始まる行) の後の余分なテキストにフラグを設定します。次に例を示します。

#include <header> code

名前なし共用体または空の structs が使用されています。C90 の場合にチェックされます。 
enum に末尾のコンマが含まれています。C90 の場合にチェックされます。 

標準のコンパイル エラー メッセージは MISRA™ ルール違反にはなりません。

ヒント

同じ原因で発生するすべての結果を一括で正当化するには、[結果のリスト] ペインの [詳細] 列を使用します。列ヘッダーをクリックして、同じエントリをもつすべての結果がグループ化されるようにします。Shift キーを押したままで、最初の結果を選択した後、最後の結果を選択します。結果の 1 つにステータスを割り当てます。[詳細] 列が表示されていない場合は、他の列ヘッダーを右クリックして、この列を有効にします。

トラブルシューティング

ルール違反を想定していてもその違反が表示されない場合、コーディング規約違反が想定どおりに表示されない理由の診断を参照します。

すべて展開する

#include <stdio.h>
#ident "@(#) Hello World"//Noncompliant 
extern int func(void);

void foo(void){
	int n = 2;
	asm ("leal (%0,%0,4),%0"
         : "=r" (n)
         : "0" (n));
    
 
    // standard inline assembly
    asm ("movq $60, %rax\n\t" 
         "movq $2,  %rdi\n\t" 
         "syscall");
}

翻訳単位で非標準のプリプロセッサ命令 #ident が使用されています。Polyspace® は、この非標準の構文に対して違反を報告します。

チェック情報

グループ: 標準 C 環境
カテゴリ: 必要
AGC カテゴリ: 必要

バージョン履歴

R2014b で導入

すべて展開する


1 All MISRA coding rules and directives are © Copyright The MISRA Consortium Limited 2021.

The MISRA coding standards referenced in the Polyspace Bug Finder™ documentation are from the following MISRA standards:

  • MISRA C:2004

  • MISRA C:2012

  • MISRA C:2023

  • MISRA C++:2008

  • MISRA C++:2023

MISRA and MISRA C are registered trademarks of The MISRA Consortium Limited 2021.