2017-06-08 24 views
0

C++プログラミングの新機能です。私は様々な変数を保持するためにcppファイルを使用しています。私はここで何か間違っていると心配しています。私はいくつかの変数だけを保持する.cppファイルを持っています。初期化時に識別子が定義されていません

#include "Variables.h" 

    using namespace::std; 

    char ListItem[260] = "<Choose Location>"; 
    string sqlDirectiveMessage = ""; 
    int locationIndex = -1; 
    int selectionIndex = 0; 
    int dataGatheredFromIndex = 0; 
    SQLCHAR retconstring[1024]; 

とVariables.h

#pragma once 
#include <Windows.h> 
#include <sqlext.h> 
#include <sql.h> 
#include <vector> 
#include <sqltypes.h> 
#include <string> 

using namespace::std; 

extern char ListItem[]; 
extern string sqlDirectiveMessage; 
extern int locationIndex; 
extern int selectionIndex; 
extern int dataGatheredFromIndex; 

extern SQLCHAR retconstring[1024]; 

関連するコードのワンピース:この場合は、今

case IDC_ADD: 
    { 
     int test = 0; 
     HWND listbox = GetDlgItem(hwnd, IDC_LIST3); 
     selectionIndex = (int)SendMessage(listbox, LB_GETCURSEL, 0, 0); 
     dataGatheredFromIndex = (int)SendMessage(listbox, LB_GETITEMDATA, selectionIndex, 0); 

    } 
    break; 

、私はいくつかの変数にVS 2017で監視を行う場合は、selectionIndexとlocationIndexは正常に動作するようですが、テストは未定義で、dataGatheredFromIndexもそうです。私は何か間違っていますか?

+1

'test'はローカル変数です。最適化されている可能性があり、割り当ては不要です。最適化が有効になっている構成(AKAリリース構成)を使用していますか? – harper

+0

あなたは正しいですが、私はリリース構成で稼働しています。 –

+0

configをdebugに変更すると問題が解決されたようです。有難うございます。 –

答えて

2

コンパイラは、操作が省略されたり、順序が異なるようにコードを最適化できます。最適化は、通常、リリースビルド構成で有効になります。

コード内の変数testは、コードを読み取ることができないため、このような最適化の犠牲になります。最適化が有効になっている場合、コードが変数にアクセスしない場合は、変数の値を無視する必要があります。

+0

この最適化をバイパスするには、変数に「volatile」とマークする必要があります。 – 0x5453

+0

ありがとうございます。設定を変更すると意図どおりに動作します。私はまだ私のリストボックスから自分のデータを取得するのに問題がありますが、それはこの質問の範囲外です。ありがとう! –

関連する問題