C의 트랩 표현: 정교함
트랩 표현이란 무엇입니까?
C99 유형의 크기를 차지하지만 트리거하는 비트 패턴을 설명하기 위해 "트랩 표현"이라는 용어를 도입합니다. 해당 유형의 값으로 사용되는 경우 정의되지 않은 동작입니다. 이러한 패턴의 존재 여부는 선택 사항입니다. 단, unsigned char은 이를 방지하는 것이 보장됩니다.
트랩 표현의 한 가지 예는 부동 소수점 유형의 신호 NaN입니다. IEC 60559에서 처리를 지정하더라도 해당 동작은 C99에서 정의되지 않습니다.
널 포인터 및 트랩 표현
포인터 유형은 트랩 표현을 가질 수 있지만 널 포인터는 그렇지 않습니다. 그런 것으로 간주됩니다. 정의되지 않은 동작은 역참조되거나 오프셋될 때만 발생합니다. 반면에 트랩 표현은 대표 유형을 사용하는 간단한 읽기 작업 시 정의되지 않은 동작을 유발합니다.
정의되지 않은 동작 대 트랩 표현
제공한 코드는 정의되지 않은 동작을 나타냅니다. 트랩 표현이 아닌 포인터 앨리어싱 규칙으로 인한 동작입니다. 동일한 표현을 사용하여 부동 소수점을 int로 올바르게 변환하려면 다음 코드 조각을 사용하십시오.
int extract_int(float f) { union { int i; float f; } u; u.f = f; return u.i; }
이 코드는 생성된 정확한 정수 값이 정의되지 않았지만 유효한 정수인 C99에서 지정되지 않은 동작을 나타냅니다. 결과는 보장됩니다. 이는 트랩 표현이 아니며 트랩이 없다는 가정을 기반으로 최적화할 수 없습니다.
위 내용은 C의 트랩 표현은 무엇이며 정의되지 않은 동작과 어떻게 다릅니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!