기본 콘텐츠로 건너뛰기

unsigned type & loop

C/C++에는 여러가지 숫자변수형태가 있고, 이는 부호가 있는 것(signed)과 없는 것(unsigned)으로 나눌 수 있다. 오늘 할 이야기는 그 중에 하나 키가 크고요~...가 아니라 부호가 없는 것에 대한 저주스런 이야기이다.

size_t i(delta);
while ( i >= 0 )
{
    // blar blar...
    --i;
}

이 소스는 CPU 100%를 쳐먹으면서 기계를 혹사시킬 것이다. 컴파일러나 라이브러리에 따라 그 구현이 다르겠지만, 보통 size_t는 unsigned long형이다. 십장생. i가 0이어도 루프는 한 번 더 돈다. 마지막에 i가 0이지만 감소연산을 때리면, i는 그것이 가질 수 있는 최대값으로 변모한다. 당연하지... unsigned니까. 결국 저 악마 같은 코드는 무한루프를 도는 것이다.

몇 년을 C/C++로 밥 벌어먹고 살아도 실수는 계속하기 마련인가?!

댓글

이 블로그의 인기 게시물

Winget 해시 무시하기

가끔씩 Winget 에서 패키지를 다운로드 했을 때, "설치 관리자 해시가 일치하지 않습니다." 오류가 뜰 때가 있다. 보안 이슈가 있지만, 그냥 무시하고 싶을 때, 아래 순서로 무시해준다. 관리자 권한 winget settings --enable InstallerHashOverride 설치 winget install --ignore-security-hash --id NirSoft.NirCmd

Windows 11 기존 컨텍스트 메뉴 사용

Windows 11 에서, 컨텍스트 메뉴가 지저분한게 싫었는지, 모던 컨텍스트 메뉴라고 따로 필요한 것만 정리해서 보여준다. 그러나 이게 좀 불편하고, 기존의 꼭 필요한 메뉴가 보이지 않아 굳이 한 번 더 기존 메뉴를 불러오는데, 모든 앱들이 모던 컨텍스트 메뉴로 옮길 때까지는 기존 컨텍스트 메뉴를 기본으로 볼 수 있는 방법이 있다. REM 관리자 권한 REM 기존 컨텍스트 메뉴 reg.exe add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32" /f /ve REM 모던 컨텍스트 메뉴로 되돌리기 reg.exe delete "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}" /f 이거 하고 탐색기를 재시작한다. 참조:  Restore old Right-click Context menu in Windows 11