FAQ
long 변수가 Windows와 Linux에서 다르게 동작하는 이유는 무엇인가요?
64비트 Windows는 long이 32비트로 유지되는 LLP64 데이터 모델을 쓰고, 64비트 Linux·macOS는 long이 64비트인 LP64를 씁니다. long이 항상 포인터 크기와 같거나 항상 64비트 값을 담을 수 있다고 가정하는 코드는 Windows에서 오동작합니다.
부호 없는 32비트 정수의 실제 범위는 무엇인가요?
0부터 4,294,967,295까지입니다. 이는 비트 폭에만 의존하는 고정값이라 플랫폼과 무관하며, plain unsigned int의 크기는 기술적으로 플랫폼에 따라 다르지만 uint32_t는 어디서나 동일하게 정의되는 이유이기도 합니다.
새 코드에서는 int를 써야 하나요, int32_t를 써야 하나요?
파일 포맷, 네트워크 프로토콜, 하드웨어 레지스터처럼 정확한 크기가 중요할 때는 int32_t(또는 다른 stdint.h 고정폭 타입)를 쓰세요. 정확한 폭이 상관없는 일반적인 루프 카운터나 작은 값에는 plain int로 충분합니다.
printf가 float와 double 둘 다에 %f를 쓰는 이유는 무엇인가요?
C의 가변인자 함수는 float 인자를 자동으로 double로 승격시키기 때문에, printf가 인자를 읽을 때는 변수의 선언 타입과 무관하게 항상 double이고 %f가 이를 올바르게 처리합니다. scanf는 포인터 인자를 승격시키지 않으므로 float*에는 %f, double*에는 %lf가 필요합니다.
size_t와 ptrdiff_t의 차이는 무엇인가요?
size_t는 부호 없는 타입으로 객체 크기나 배열 인덱스를 나타내며 절대 음수가 될 수 없습니다. ptrdiff_t는 부호 있는 타입으로 두 포인터의 차이를 나타내며, 앞선 포인터에서 뒤 포인터를 빼면 음수가 될 수 있습니다.