C and C++


LANG.ID.ND.EXT : 区別できない識別子:外部識別子

要旨

外部結合を持つ複数の識別子が区別できません。 これらの識別子は同じファイル内で宣言する必要はありません。

複数の識別子の最初のN個の文字が同じ文字列(大文字、小文字は区別)となっています。

関連したワーニングクラスの Identifier Classes を参照してください。

プロパティ

クラス名 Non-distinct Identifiers: External Names
日本語クラス名 区別できない識別子:外部識別子
クラス分類 スタイル (style)
ニーモニック LANG.ID.ND.EXT
カテゴリー
MisraC2023 MisraC2023:5.1 External identifiers shall be distinct
Misra2012 Misra2012:5.1 External identifiers shall be distinct
Misra2004 Misra2004:5.1 Identifiers (internal and external) shall not rely on the significance of more than 31 characters
CWE CWE:710 Improper Adherence to Coding Standards
CERT-C CERT-C:DCL23-C Guarantee that mutually visible identifiers are unique
JSF++ JSF++:46 User-specified identifiers (internal and external) will not rely on significance of more than 64 characters.
対応言語 C および C++ で利用可能です。
有効/無効設定 このワーニングクラスのチェックはデフォルトで無効になっており、プロジェクトには非正規の C向けAST が必要になります。有効にするにはプロジェクト設定ファイル (configuration file) に以下の WARNING_FILTER ルールと RETAIN_UNNORMALIZED_C_AST 設定を追加してください。
RETAIN_UNNORMALIZED_C_AST = Yes
INCREMENTAL_BUILD = No
WARNING_FILTER += allow class="Non-distinct Identifiers: External Names"
注:非正規化された AST を継続して使用した場合、使用ディスク容量が増加し解析時間が長くなる可能性があります。

SIGNIFICANCE_LEN_EXTERN=-1 が設定されているものとします。

/* pair 1: distinct in first 6 characters */
extern int okA;                      
extern int okB;     

/* pair 2:  distinct in first 31 characters; not distinct in first 6 characters
 *  - 'Non-distinct Identifiers: External Names' warning issued for C90 only */
extern int ok99onlyA; 
extern int ok99onlyB;    

/* pair 3:  not distinct in first 31 characters
 * - 'Non-distinct Identifiers: External Names' warning issued for both  C90 and C99 */
extern int abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz1;     
extern int abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz2;

関連のある設定ファイルパラメータ

設定ファイルの以下のパラメータがこのワーニングクラスのチェックに影響します。