visual sutio를 사용하다 보니 -1U 부분에
"단항 빼기 연산자가 부호 없는 형식에 적용되었습니다. 결과는 역시 unsigned입니다."
라는 에러가 등장해서 찾아보았다.
컴파일러 경고(수준 2) C4146 | Microsoft Learn
해당 에러(경고)는 나오듯이, 단항 빼기 연산자가 unsigned 타입에 적용될 때 나타난다.
단항 빼기 연산자는 -3, -(-5.5)처럼 피연산자의 부호를 반전시키는 역할을 한다. (--는 전위/후위 감소 연산자)
하지만 unsigned는 항상 양수이므로 -를 붙여 음수로 만드는 상황을 비정상이라 볼 수도 있다.
-1U를 사용하는 이유는 정수의 최대값을 쉽게 표현하기 위해서다.
unsigned int의 최대값은 0xFFFFFFFF인데, 이는 비트로 -1과 동일하다.
cout << -1U << endl; // 4294967295
cout << 0xFFFFFFFF << endl; // 4294967295
visual studio는 대신 <climits>나 <limits>를 사용할 것을 권장하지만, 코드를 컴파일하고 싶다면 SDL을 꺼야 한다.
/sdl(추가 보안 검사 사용) | Microsoft Learn
visual studio에서는 보안을 위해 더 엄격한 SDL 검사를 기본적으로 켜둔다.
SDL은 몇몇 경고를 오류로 승격하고, 추가적인 런타임 검사를 실행한다.
이를 끄고 싶다면, 프로젝트 속성 - C/C++ - 일반 - SDL 검사에서 비활성화할 수 있다.