> 백엔드 개발 > C++ > 본문

C의 \'잘못된 형식, 진단이 필요하지 않음\'과 정의되지 않은 동작의 차이점은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-11-25 10:26:17
원래의
133명이 탐색했습니다.

What's the Difference Between C  's

정의되지 않은 동작과 잘못된 동작의 차이, 진단이 필요하지 않음

의심할 여지 없이 C 표준은 "불분명"으로 분류된 동작에 대해 광범위한 정의 배열을 도입합니다. 그러나 "프로그램이 잘못 구성되어 있어 진단이 필요하지 않습니다"라는 문구는 다른 행동 범주와의 구별에 대한 의문을 제기했습니다.

잘 구성된 행동과 잘못된 행동의 정의:

C 표준은 프로그램을 올바른 형식과 잘못된 형식으로 분류합니다. 잘 구성된 프로그램은 구문 규칙과 진단 가능한 의미 규칙을 모두 준수합니다. 반대로 잘못된 형식의 프로그램은 이러한 규칙을 위반하므로 이상적으로는 컴파일하지 않아야 합니다.

구현 정의, 지정되지 않음 및 정의되지 않은 동작:

구현에서 정의된 동작과 지정되지 않은 동작은 다음과 같습니다. 잘 구성된 동작과 다르지만 잘못된 코드를 의미하지는 않습니다. 전자의 경우 구현 시 특정 작업을 문서화해야 하지만 후자의 경우 문서화가 필요하지 않습니다. 반면, 정의되지 않은 동작은 1.3.13에 따라 프로그램에 오류가 있음을 의미합니다.

컴파일러, 정의되지 않은 동작 및 잘못된 형식의 프로그램:

컴파일러가 오류 메시지와 함께 컴파일을 종료해야 함을 암시하는 "잘못된"이라는 용어에도 불구하고 C 표준은 자동 처리를 허용합니다. 정의되지 않은 동작. 특히 컴파일러는 정의되지 않은 동작으로 인해 경고를 발행하거나 컴파일을 종료하지 않는 경우가 많습니다.

잘못 구성된 프로그램 및 진단 요구 사항:

"진단 필요 없음" 사용 "잘못된 형식"과 함께 역설이 나타납니다. 잘못된 형식의 프로그램이 컴파일되어서는 안 되는 경우 컴파일러가 이를 자동으로 무시하도록 허용하는 것은 직관에 어긋납니다. 그러나 표준에서는 이러한 가능성을 명시적으로 허용합니다.

결론:

"잘못된 형식, 진단이 필요하지 않음"과 "정의되지 않은 동작"의 구분은 여전히 ​​모호합니다. 잘못된 형식의 프로그램과 잘못된 코드, 런타임 문제로 인한 정의되지 않은 동작 사이에는 연관성이 있을 수 있지만 이것이 항상 일관되지는 않습니다. 궁극적으로 잘못된 형식의 프로그램의 경우 진단 생성에 대한 기대를 무시하므로 "진단이 필요하지 않음" 측면이 가장 중요합니다.

위 내용은 C의 \'잘못된 형식, 진단이 필요하지 않음\'과 정의되지 않은 동작의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿