의심할 여지 없이 C 표준은 "불분명"으로 분류된 동작에 대해 광범위한 정의 배열을 도입합니다. 그러나 "프로그램이 잘못 구성되어 있어 진단이 필요하지 않습니다"라는 문구는 다른 행동 범주와의 구별에 대한 의문을 제기했습니다.
잘 구성된 행동과 잘못된 행동의 정의:
C 표준은 프로그램을 올바른 형식과 잘못된 형식으로 분류합니다. 잘 구성된 프로그램은 구문 규칙과 진단 가능한 의미 규칙을 모두 준수합니다. 반대로 잘못된 형식의 프로그램은 이러한 규칙을 위반하므로 이상적으로는 컴파일하지 않아야 합니다.
구현 정의, 지정되지 않음 및 정의되지 않은 동작:
구현에서 정의된 동작과 지정되지 않은 동작은 다음과 같습니다. 잘 구성된 동작과 다르지만 잘못된 코드를 의미하지는 않습니다. 전자의 경우 구현 시 특정 작업을 문서화해야 하지만 후자의 경우 문서화가 필요하지 않습니다. 반면, 정의되지 않은 동작은 1.3.13에 따라 프로그램에 오류가 있음을 의미합니다.
컴파일러, 정의되지 않은 동작 및 잘못된 형식의 프로그램:
컴파일러가 오류 메시지와 함께 컴파일을 종료해야 함을 암시하는 "잘못된"이라는 용어에도 불구하고 C 표준은 자동 처리를 허용합니다. 정의되지 않은 동작. 특히 컴파일러는 정의되지 않은 동작으로 인해 경고를 발행하거나 컴파일을 종료하지 않는 경우가 많습니다.
잘못 구성된 프로그램 및 진단 요구 사항:
"진단 필요 없음" 사용 "잘못된 형식"과 함께 역설이 나타납니다. 잘못된 형식의 프로그램이 컴파일되어서는 안 되는 경우 컴파일러가 이를 자동으로 무시하도록 허용하는 것은 직관에 어긋납니다. 그러나 표준에서는 이러한 가능성을 명시적으로 허용합니다.
결론:
"잘못된 형식, 진단이 필요하지 않음"과 "정의되지 않은 동작"의 구분은 여전히 모호합니다. 잘못된 형식의 프로그램과 잘못된 코드, 런타임 문제로 인한 정의되지 않은 동작 사이에는 연관성이 있을 수 있지만 이것이 항상 일관되지는 않습니다. 궁극적으로 잘못된 형식의 프로그램의 경우 진단 생성에 대한 기대를 무시하므로 "진단이 필요하지 않음" 측면이 가장 중요합니다.
위 내용은 C의 \'잘못된 형식, 진단이 필요하지 않음\'과 정의되지 않은 동작의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!