C and C++


LANG.STRUCT.INIT.UNORDERED : Unordered Initialization

要旨

A non-local variable is initialized using another variable that is initialized in a different translation unit.

Order of initialization across compilation units is not determined.

プロパティ

クラス名 Unordered Initialization
日本語クラス名 Unordered Initialization
クラス分類 信頼性 (reliability)
ニーモニック LANG.STRUCT.INIT.UNORDERED
カテゴリー
AUTOSARC++14 AUTOSARC++14:A3-3-2 Static and thread-local objects shall be constant-initialized.
CWE CWE:1419 Incorrect Initialization of Resource
CERT-CPP CERT-CPP:DCL56-CPP Avoid cycles during initialization of static objects
JSF++ JSF++:214 Assuming that non-local static objects, in separate translation units, are initialized in a special order shall not be done.
POW10 POW10:1 Restrict to simple control flow constructs.
対応言語 C および C++ で利用可能です。
有効/無効設定 このワーニングクラスのチェックはデフォルトで無効になっており、プロジェクトには非正規の C向けAST が必要になります。有効にするにはプロジェクト設定ファイル (configuration file) に以下の WARNING_FILTER ルールと RETAIN_UNNORMALIZED_C_AST 設定を追加してください。
RETAIN_UNNORMALIZED_C_AST = Yes
WARNING_FILTER += allow class="Unordered Initialization"
注:非正規化された AST を継続して使用した場合、使用ディスク容量が増加し解析時間が長くなる可能性があります。

// LANG.STRUCT.INIT.UNORDERED.a.cpp

extern int init_in_b_file;

int b = init_in_b_file; // 'Unordered Initialization' warning issued here
// LANG.STRUCT.INIT.UNORDERED.b.cpp

int init_in_b_file = 5;

int y = init_in_b_file;             // ok: int init_in_b_file is initialized earlier in the same file

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

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