メインコンテンツ

AUTOSAR C++14 Rule A17-0-1

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

説明

ルール定義

C++ 標準ライブラリの予約済みの識別子、マクロ、および関数を定義、再定義、または定義解除してはなりません。

根拠

C++ 標準ライブラリに含まれる予約済みの識別子、マクロ、および関数を定義、再定義、定義解除することは推奨されていません。次のような予約語を定義、再定義、定義解除すると、未定義の動作が発生する可能性があります。

  • __LINE__

  • __FILE__

  • __DATE__

  • __TIME__

  • __STDC__

  • errno

  • assert

Polyspace 実装

Polyspace® は、C++ 標準ライブラリに含まれる予約済みの識別子、マクロ、および関数を定義、再定義、あるいは定義解除するプリプロセッサ命令にフラグを設定します。

トラブルシューティング

ルール違反が想定されるものの、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 を定義、定義解除、再定義することは、ルールに準拠しています。

チェック情報

グループ: ライブラリの導入
カテゴリ: Required、Automated

バージョン履歴

R2019a で導入