본문 바로가기

정보/기술

__int64 printf

c 스타일의 printf에서 'long long' 은 어떤 포맷을 사용할까?

long : l
long long : ll
unsigned long long : llu

Visual Studio 2013을 사용해서 작업중인데, 변수위에 마우스를 가져다 놓으니 인텔리전스 기능에 의해 "long long"이라는 표시가 나옵니다.

그래서
CString strDebug;
strDebug.Format(_T("Value = %ll"), myData);
OutputDebugString(strDebug);

이런 형태로 했습니다. 그런데 값이 정상적으로 찍히지 않고, 빈칸으로 나옵니다.

왜 이러지?
값이 없나?
디버그를 해보니 값이 있습니다. 그러면 왜 안찍히는 걸까?

Header파일로 이동해서 보니
__int64 myData;

Visual Stuidio 2013에서 마우스 툴팁에서는 "long long" 으로 표시가 되었는데, 헤더파일에는 "__int64" 입니다.

그래서 정상적으로 표시를 하려면 "unsigned long long" 처럼 "%llu"를 사용해야 합니다.

strDebug.Format(_T("Value = %llu"), myData);

이렇게하니 드디어 정상적으로 표시가 됩니다.

참고로,
unsigned __int64 는
0 ~ 18446744073709551615

signed __int64 은
-9223372036854775808 ~ 9223372036854775807

다른 방법으로 %I64d 혹은 %I64u 를 이용할수도 있습니다.

signed __int64 myData;
strDebug.Format(_T("Value = %I64d"), myData);

unsigned __int64 myData;
strDebug.Format(_T("Value = %I64u"), myData);