Win版 コード分析対応
ローカル変数の初期化漏れが多数検出された。初期化漏れの事例は以下の通り。
float x, y, z = 0.0f;この場合zは0.0fで初期化されるが、x,yは初期化されないままとなる。 以下のように、変数ごとに初期化しなければならない。
float x = 0.0f; float y = 0.0f; float z = 0.0f;メソッド内でローカル変数に必ず値を設定しているため、動作上問題は発生しないが、 修正しておく。
初期化漏れを洗い出すために、以下の正規表現でgrepした。
,\s*[a-zA_Z0-9]+\s*=
grep結果は以下の通り。変数単位で初期化するように修正した。
DXColorUtil.cpp(36): float cr, cg, cb, alpha = 0.0f; DXColorUtil.cpp(72): long cr, cg, cb = 0; MTDashboard.cpp(249): unsigned long cw, ch = 0; MTDashboard.cpp(250): unsigned long tw, th = 0; MTDashboard.cpp(251): unsigned long charHeight, charWidth = 0; MTDashboardLive.cpp(160): unsigned long cw, ch = 0; MTDashboardLive.cpp(161): unsigned long tw, th = 0; MTDashboardLive.cpp(162): unsigned long charHeight, charWidth = 0; MTFirstPersonCam.cpp(204): int dX, dY, dW = 0; MTFirstPersonCam.cpp(570): int wh, ww = 0; MTFirstPersonCam.cpp(571): int ch, cw = 0; MTFontTexture.cpp(83): DWORD x, y = 0; MTGridBox.cpp(397): unsigned long i, j = 0; MTNoteDesign.cpp(206): float bh, bw = 0.0f; MTNoteDesign.cpp(237): float bh, bw = 0.0f; MTNoteDesign.cpp(272): float bh, bw = 0.0f; MTNoteDesign.cpp(301): float x, bh, bw = 0.0f; MTNoteDesign.cpp(336): float x, bh, bw = 0.0f; MTNoteDesign.cpp(565): float r,g,b,a = 0.0f; MTNoteRipple.cpp(403): float rh, rw = 0.0f; MTPianoKeyboard.cpp(1718): float centerY, centerZ = 0.0f; MTPianoKeyboardDesign.cpp(639): float r,g,b,a = 0.0f; MTPianoKeyboardDesign.cpp(895): float ox, oy, oz = 0.0f;
grep結果の続き。
MTScenePianoRoll3D.cpp(494): float phi, theta = 0.0f; MTScenePianoRoll3D.cpp(534): float phi, theta = 0.0f; MTScenePianoRoll3D.cpp(571): float phi, theta = 0.0f; MTScenePianoRoll3D.cpp(797): float x, y, z = 0.0f; MTScenePianoRoll3D.cpp(798): float phi, theta = 0.0f; MTScenePianoRoll3DLive.cpp(474): float phi, theta = 0.0f; MTScenePianoRoll3DLive.cpp(514): float phi, theta = 0.0f; MTScenePianoRoll3DLive.cpp(551): float phi, theta = 0.0f; MTScenePianoRoll3DLive.cpp(732): float x, y, z = 0.0f; MTScenePianoRoll3DLive.cpp(733): float phi, theta = 0.0f; MTScenePianoRollRain.cpp(460): float phi, theta = 0.0f; MTScenePianoRollRain.cpp(489): float phi, theta = 0.0f; MTScenePianoRollRain.cpp(527): float phi, theta = 0.0f; MTScenePianoRollRain.cpp(755): float x, y, z = 0.0f; MTScenePianoRollRain.cpp(756): float phi, theta = 0.0f; MTScenePianoRollRain2D.cpp(66): float phi, theta = 0.0f; MTScenePianoRollRain2DLive.cpp(66): float phi, theta = 0.0f; MTScenePianoRollRainLive.cpp(442): float phi, theta = 0.0f; MTScenePianoRollRainLive.cpp(471): float phi, theta = 0.0f; MTScenePianoRollRainLive.cpp(509): float phi, theta = 0.0f; MTScenePianoRollRainLive.cpp(692): float x, y, z = 0.0f; MTScenePianoRollRainLive.cpp(693): float phi, theta = 0.0f; MTStars.cpp(158): float x, y, z = 0.0f; MTStars.cpp(159): float cr, cg, cb = 0.0f;
いずれも動作不良を引き起こすものではないが、修正する。
修正前:else if (D3DERR_DRIVERINTERNALERROR) { 修正後:else if (hresult == D3DERR_DRIVERINTERNALERROR) {
修正前:if ((pHeight == NULL) || (pHeight == NULL)) { 修正後:if ((pWidth == NULL) || (pHeight == NULL)) {
Visual Studio 2017のコード分析で抽出された問題を修正する。