>백엔드 개발 >C++ >C에서 정의되지 않은 동작과 잘못된 동작의 차이점은 무엇입니까?

C에서 정의되지 않은 동작과 잘못된 동작의 차이점은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-21 18:23:16615검색

What's the Difference Between Undefined Behavior and Ill-Formedness in C  ?

정의되지 않은 동작과 잘못된 동작 구별

정의되지 않은 동작(UB), 잘못된 동작 및 구현에 따라 정의된 동작은 서로 다른 개념입니다. 씨. 그러나 표준 용어는 특히 "잘못된 형식이므로 진단이 필요하지 않습니다"라는 문구로 인해 혼란스러울 수 있습니다.

잘못 구성된 프로그램 및 진단 가능성

잘못된 프로그램 및 진단 형성된 프로그램은 언어의 구문이나 의미 규칙을 위반합니다. 표준에 따르면 "그렇지 않으면 형식이 좋지 않은 것으로만 정의됩니다." 논리적으로 이는 잘못된 형식의 프로그램이 컴파일되어서는 안 된다는 것을 의미합니다.

그러나 표준에서는 표준에 따라 잘못된 형식의 확장을 구현이 허용하지만 올바른 형식의 프로그램의 동작을 변경하지는 않습니다. . 이러한 경우 구현에서는 확장 프로그램의 사용을 진단해야 하지만 계속 실행이 허용됩니다.

정의되지 않은 동작 및 진단 가능성

정의되지 않은 동작은 다음과 같은 프로그램 동작을 의미합니다. 표준으로 예측할 수 있습니다. 구현에서는 실행을 일시 중지하거나 문제를 자동으로 무시하는 등 어떤 방식으로든 동작을 자유롭게 정의할 수 있습니다. 잘못된 형식과 달리 UB는 반드시 프로그램이 컴파일되지 않아야 함을 의미하지는 않습니다.

"잘못된 형식; 진단이 필요하지 않음"

"잘못된 형식"이라는 용어 ; 진단이 필요하지 않음"은 프로그램이 구문이나 의미 규칙을 위반하지만 오류를 진단하기 위해 구현이 필요하지 않은 상황을 의미하는 것으로 해석될 수 있습니다. 이는 구현이 여전히 자동으로 종료되거나 실행을 계속할 수 있다는 점을 제외하면 본질적으로 UB와 동일하게 됩니다.

이러한 표현을 사용하는 이유는 구현의 유연성을 허용할 가능성이 높습니다. 이는 실제로 유용할 수 있는 방식으로 잘못된 형식의 오류를 처리할 수 있는 구현을 가능하게 합니다.

결론

C 표준의 표현은 때때로 일관성이 없지만 , 일반적인 규칙은 표준에 명시적으로 다르게 명시되어 있지 않거나 정의되지 않은 동작이 아닌 이상 오류가 있거나 형식이 잘못된 코드에 진단이 필요하다는 것입니다. "잘못된 형식, 진단이 필요하지 않음"의 경우 이는 본질적으로 정의되지 않은 동작과 동의어이며 구현자에게 특정 오류를 처리하는 방법에 대한 어느 정도 재량권을 제공합니다.

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

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