メインコンテンツ

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

MISRA C++:2008 Rule 17-0-1

Reserved identifiers, macros and functions in the standard library, shall not be defined, redefined or undefined

説明

ルール定義

Reserved identifiers, macros and functions in the standard library, shall not be defined, redefined or undefined. 1

根拠

標準ライブラリ内の予約済みの識別子、マクロ、および関数の再定義または定義解除はお勧めできません。場合によっては、このようなアクションが未定義の動作につながる可能性があります。

Polyspace 実装

チェッカーは、標準ライブラリ内の識別子やマクロが定義、再定義、または定義解除された場合に違反を発生させます。

一般に、チェッカーは先頭がアンダースコアで次に大文字が続く識別子とマクロを、標準ライブラリ用に予約されたものと見なします。

トラブルシューティング

ルール違反が想定されるものの、Polyspace® から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。

すべて展開する

#define __TIME__ 3  //Noncompliant  
#undef __TIME__   //Noncompliant  

#define __cplusplus 3 //Noncompliant  
#undef __cplusplus //Noncompliant  

#define break 3 //Noncompliant  
#undef break //Noncompliant  

#define pow 3 //Noncompliant  
#undef pow //Noncompliant  


#define example 3 //Compliant 
#undef example //Compliant 

#define example 7 //Compliant

この例では、Polyspace は、C++ の予約済みの識別子およびマクロを定義または定義解除するプリプロセッサ命令にフラグを設定します。次に例を示します。

  • __TIME__ は予約済みの C++ マクロであるため、__TIME__ を定義、定義解除することは、ルールに準拠していません。

  • __cplusplus は予約済みの C++ マクロであるため、__cplusplus を定義、定義解除することは、ルールに準拠していません。

  • break は予約済みの C++ 識別子であるため、break を定義、定義解除することは、ルールに準拠していません。

  • pow は予約済みの C++ 関数であるため、pow を定義、定義解除することは、ルールに準拠していません。

  • example は予約済みの C++ マクロ、識別子、関数のいずれでもないため、example を定義、定義解除、再定義することは、ルールに準拠しています。

チェック情報

グループ: Library Introduction
カテゴリ: 必要

バージョン履歴

R2013b で導入


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.