이것은 내가 만난 가장 이상한 것 중 하나입니다. 내 문제는 이것이다 : CONST
이 정의지속적인 문제가있는 비트 단위 연산
void Class::function(int flag)
{
if ((flag & CONST) != 0)
printf("Passed.");
else
printf("Failed.");
}
을 : 나는 C++ \ CLI 프로젝트에서 윈도우 7에서 Visual Studio 2015를 사용하고, 모든
첫째, 나는 다음과 같은 상점과 비슷한 코드를 다른 (비 CLR) DLL 0x111
수 있습니다. 꽤 똑바로 보인다. 내가 가진 문제는 flag
이 0x40
과 같은 절차를 입력했을 때입니다. 실제로이 프로 시저가 Failed.
을 인쇄해야하는 것처럼 보입니다. 실제로는 Passed.
이 인쇄되었습니다. 내가했던 다음 일은 다음에 내 코드 변경했다 :
res = 0x110
local = 0x111
localRes = 0x0
내가 볼 수 없습니다 : 지금
void Class::function(int flag)
{
int local = CONST, localRes = flag & local, res;
if ((res = (flag & CONST)) != 0)
printf("Passed.");
else
printf("Failed.");
}
을 printf
에 실행을 깨고을, 나는 시계에 다음과 같은 값을 가지고 그 문맥에서 VS가 그것을 알지 못했지만 CONST
의 값.
내가 아는 한, local
을 사용하여이 문제를 해결할 수 있지만 오히려 이해하고 싶습니다. 컴파일/실행에있어 잘못된 점을 알려주시겠습니까? 감사합니다.
편집 :
꽤 정기적으로C1
이 0x1
입니다 #define CONST/
C1 | C2 | C3
, C2
이 0x10
이며, C3
는 0x100
입니다 : (extern "C"
포함) 포함 된 헤더 파일에서, 너무로 정의된다.
어떻게'CONST'가 정의 되었습니까? –
'CONST'을'extern'으로 정의 해 보았습니까? –
어쩌면 이것은 분명하지 않을 수 있습니다. 특히 "다른 CLR이 아닌 dll에서 정의 된"클레임은 매우 드물게 보이지만 dll에서 데이터를 내보내는 것은 분명하지 않습니다. –