Это одна из самых странных вещей, с которыми я столкнулся. Моя проблема заключается в следующем:Побитовая операция с постоянной проблемой
Прежде всего, я использую Visual Studio 2015 на Windows 7. В проекте 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
, я получил следующие значения в Дозоре:
res = 0x110
local = 0x111
localRes = 0x0
Я не мог смотреть значение CONST
, хотя VS не знал этого в этом контексте.
Насколько я могу судить, я мог бы обойти это, используя local
, но я бы лучше понял его. Может кто-нибудь, пожалуйста, скажите мне, что случилось с компиляцией/исполнением? Спасибо!
EDIT: В прилагаемом файле заголовка (входит в extern "C"
), она определяется как так:
#define CONST/
C1 | C2 | C3
Где довольно регулярно, C1
является 0x1
, C2
является 0x10
и C3
является 0x100
.
Как определяется 'CONST'? –
Вы пытались определить 'CONST' как' extern'? –
Возможно, это не так понятно. В частности, претензия, «определенная в другой DLL не CLR» представляется весьма маловероятной, экспорт данных из dll не очень очевиден. –