初始化时未定义标识符 我对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];

初始化时未定义标识符 我对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];,c++,visual-studio-2017,C++,Visual Studio 2017,现在在这种情况下,如果我在VS 2017中观察一些变量,selectionIndex和locationIndex似乎工作正常,test未定义,dataGatheredFromIndex也未定义。。我做错什么了吗?编译器可以优化代码,以便省略操作或按不同顺序排序。优化通常在发布构建配置中启用 代码中的变量test是这种优化的牺牲品,因为没有代码可以读回它。如果启用了优化,则如果代码无法访问变量值,则应忽略变量值。编译器可以优化代码,以便省略操作或以不同的顺序进行操作。优化通常在发布构建配置中启用

现在在这种情况下,如果我在VS 2017中观察一些变量,selectionIndex和locationIndex似乎工作正常,test未定义,dataGatheredFromIndex也未定义。。我做错什么了吗?

编译器可以优化代码,以便省略操作或按不同顺序排序。优化通常在发布构建配置中启用


代码中的变量
test
是这种优化的牺牲品,因为没有代码可以读回它。如果启用了优化,则如果代码无法访问变量值,则应忽略变量值。

编译器可以优化代码,以便省略操作或以不同的顺序进行操作。优化通常在发布构建配置中启用


代码中的变量
test
是这种优化的牺牲品,因为没有代码可以读回它。如果打开优化功能,代码无法访问变量值,则应忽略变量值。

test
是一个局部变量。它可能已被优化,不需要分配。您是否使用启用优化的配置(也称为发布配置)?您是对的,我正在版本配置中运行。将配置更改为调试似乎可以解决问题。谢谢。
test
是一个局部变量。它可能已被优化,不需要分配。您是否使用启用优化的配置(也称为发布配置)?您是对的,我正在版本配置中运行。将配置更改为调试似乎可以解决问题。谢谢。请注意,通过将变量标记为
volatile
,您应该能够绕过此优化。非常感谢。当我更改配置时,它按预期工作。我仍然无法从列表框中获取数据,但这超出了问题的范围。谢谢请注意,通过将变量标记为
volatile
,您应该能够绕过此优化。非常感谢。当我更改配置时,它按预期工作。我仍然无法从列表框中获取数据,但这超出了问题的范围。谢谢
#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;