• Imagix 4D ユーザガイド
  • 目次

[未初期化読み取り変数] レポート

「未初期化読み取り変数」レポートは、初期化あるいは設定される前に読み取られる、グローバル変数、静的変数、ローカル変数を表示します。このような状態は単に変数の初期化の失敗によるものであるか、一部のロジックの欠陥もしくは欠如を示している可能性があるのです。以下に例をあげます。

int globalA, globalB, globalC;

int func2(int paramW, int paramX) {
        int localA;
        localA = globalA;
        localA = globalB;
        localA = globalC;
        return localA;
}

int func1(void) {
        int localW = 1;
        int localX, localY, localZ;
	int decision = 1;
        globalA = localW;
	if (decision) {
	    globalB = localW;
	    globalC = localW;
	} else {
	    globalC = localW;
	}
        localY = func2(localW, localX);
	return localZ;
}

localX および localZ は初期化されないまま func1 のなかで読み取られるため、出力されるレポートにリスト表示されます。同様に変数 globalB も、その初期化が if 条件に依存するためレポートされますが、globalC は if 条件の一致に左右されることなく初期化されます。

Uninitialized Variables Read

Settings:
        Global Variables:          displayed
        Static Variables:          displayed
        Struct Container Summary:  omitted
        Union/Bitfield Members:    separate

Task Definitions
Tasks are from Auto Task Generation: Any root functions
Name                Members  Graph  Root
autotask 1 - func1        2    [+]  func1

Variable                                          File (Line)
    Function                                          File (Line)
       Assignment
       
globalB                                           uninit_vars_read.c (2)
    func2                                             uninit_vars_read.c (4)
        7 localA = globalB;

localX                                            uninit_vars_read.c (13)
    func1                                             uninit_vars_read.c (11)
       22 localY = func2(localW, localX);

localZ                                            uninit_vars_read.c (13)
    func1                                             uninit_vars_read.c (11)
       23 return localZ;

タスク定義がこのレポートの対象であることに注意してください。本レポートはデータフローの起点を決定する際に、タスク定義を考慮します。ただし、このレポートは [タスクフローチェック] レポートの対象ではないため、手動でタスクを定義する必要はありません(本 ユーザガイド の [タスクフローチェック] のセクションを参照)。