C 언어로 캐스팅하는 것은 다른 언어와 달리 독특합니다. 또한 결코 똑똑하지 않습니다.
C로 캐스트는 신중하게 정의 된 규칙을 사용하여 한 유형에서 다른 유형으로 값을 변환합니다. 정말로 알아야 할 경우 표준을 읽으십시오. 그렇지 않으면 요점은 다음과 같습니다.
- 정수 유형 간 변환은 가능하면 값을 유지합니다. 목적지에 더 많은 비트가 있으면 넓어지고 일반적으로 안전하지만 부호 확장이 필요할 수 있습니다. 더 좁 으면 비트가 손실됩니다.
- 포인터 유형 간 변환은 포인터 값을 유지하지만 결과는 종종 정의되지 않고 종종 이식 불가능하며 고급 시나리오에 유용합니다.
- 정수가 충분히 큰 경우 정수 유형과 포인터 사이의 변환은 정상이며 비트 패턴 (무엇이 발생할 수 있는지)을 유지합니다. 정수가 너무 작 으면 결과는 정의되지 않지만 유용하지 않습니다. 일반적으로 'long'은 'void *'에 대해 충분히 넓지 만 보장 할 수는 없습니다! 이런 방식으로 생성 된 포인터는 모든 종류의 흥미로운 방식으로 유효하지 않을 수 있습니다.
- float 형식과 정수 형식 간의 변환은 적절한 라이브러리 루틴 (반올림이 아닌 잘림)으로 정의 된 산술 변환입니다.
- 함수의 리턴 값을 void로 캐스트 할 수 있습니다. 나는 결코 없다. 아무것도하지 않습니다.
일부 캐스트는 내재적으로 적용되며 일부 캐스트는 경고를 발행합니다. 경고에 유의하십시오!
캐스트에 대한 사전 정의는 도움이되지 않기 때문에 무시하는 것이 가장 좋습니다. 많은 캐스트는 개종이나 강압이라는 용어로 더 잘 설명되므로 그에 대한 지식도 필요합니다.
C ++은 훨씬 더 복잡하지만, 묻지 않았습니까?