【发布时间】:2024-01-30 09:10:02
【问题描述】:
这是我遇到的最奇怪的事情之一。我的问题是这样的:
首先,我在 Windows 7 上使用 Visual Studio 2015。在 C++\CLI 项目中,我的代码类似于以下内容:
void Class::function(int flag)
{
if ((flag & CONST) != 0)
printf("Passed.");
else
printf("Failed.");
}
其中CONST 在另一个(非CLR)DLL 中定义为0x111。看起来很直接。我遇到的问题是,当我输入flag 等于0x40 的过程时。在我看来,这个过程似乎应该打印Failed.,而实际上它打印的是Passed.。我做的下一件事是将我的代码更改为以下内容:
void Class::function(int flag)
{
int local = CONST, localRes = flag & local, res;
if ((res = (flag & CONST)) != 0)
printf("Passed.");
else
printf("Failed.");
}
现在,在 printf 上中断执行,我在 Watch 中得到以下值:
res = 0x110
local = 0x111
localRes = 0x0
我无法看到CONST 的值,尽管 VS 在那种情况下并不知道它。
就我而言,我可以通过使用local 来解决这个问题,但我宁愿理解它。有人可以告诉我编译/执行有什么问题吗?
谢谢!
编辑:在包含的头文件中(包含为extern "C"),是这样定义的:
#define CONST /
C1 | C2 | C3
C1 是 0x1,C2 是 0x10,C3 是 0x100。
【问题讨论】:
-
CONST是如何定义的? -
你试过将
CONST定义为extern吗? -
也许这不是很清楚。特别是“在另一个非 CLR dll 中定义”的说法似乎不太可能,从 dll 导出数据并不是很明显。
-
如果没有任何额外的信息,我希望@ThomasMatthews 有所收获。例如。如果
CONST是一个定义不明确的宏,当您使用flag & CONST与flag & (CONST)时,您的行为可能会发生变化。 -
我们有了它。案件结案。
标签: visual-studio c++-cli constants bitwise-operators