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

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

Susan Sarandon
Susan Sarandon원래의
2024-12-02 16:14:12785검색

Undefined Behavior vs.

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

C 표준은 프로그램 동작을 다음을 포함한 다양한 범주로 분류합니다. -형식, 형식이 잘못됨, 지정되지 않음, 정의되지 않음. "정의되지 않은 동작"은 표준이 구현 응답에 대한 요구 사항이나 가정을 제공하지 않는 상황을 나타냅니다. 이와 대조적으로 "잘못된" 프로그램은 구문 또는 의미 규칙을 위반하므로 잘 구성된 것으로 간주되지 않습니다.

"잘못된 형식, 진단이 필요하지 않음"이라는 문구가 표준에 나타나며 겉으로는 올바른 형식의 정의와 모순되는 것 같습니다. 잘못된 프로그램. 표준에 따르면, 적합한 구현은 올바른 형식의 프로그램을 승인하고 실행해야 하지만, 확장 사용의 경우를 제외하고 잘못된 형식의 프로그램에 대한 요구 사항은 없습니다.

이러한 불일치는 C 표준은 별도로 명시하지 않는 한 모든 오류를 정의되지 않은 동작으로 간주하는 C 표준에서 영감을 얻었습니다. 그러나 C 표준은 기본적으로 모든 오류에 대해 진단을 요구하는 것을 목표로 했습니다.

결국 "진단 필요 없음"이 있다는 것은 문제의 동작이 정의되지 않은 것으로 간주되지 않음을 나타냅니다. 이는 표준에서 컴파일러가 오류나 경고를 발행하지 않고 컴파일 및 실행을 계속할 수 있도록 명시적으로 허용한다는 점에서만 "정의되지 않은 동작"과 다릅니다. 이러한 구별은 주로 문법 오류보다는 런타임 문제를 설명하는 데 사용됩니다.

요약하면 "잘못된 형식, 진단이 필요하지 않음"이라는 용어가 혼란스러워 보일 수 있지만 본질적으로 정의되지 않은 동작과 동일함을 의미합니다. 이는 프로그램의 형식이 올바르지 않지만 컴파일러가 진단을 제공하지 않고 계속 진행할 수 있는 상황을 나타냅니다. 주요 차이점은 "잘못된 형식, 진단이 필요하지 않음"은 일반적으로 런타임 문제를 의미하는 반면 "정의되지 않은 동작"은 문법 오류와 런타임 문제를 모두 포함한다는 것입니다.

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.