Home MISRA C 2012_01_03 - 정의되지 않은 행동 및 지정되지 않은 행동 발생 금지
Post
Cancel

MISRA C 2012_01_03 - 정의되지 않은 행동 및 지정되지 않은 행동 발생 금지

  • MISRA C 2012_01_03 규칙을 소개한다.
  • MISRA C 2012 규칙을 분석 후 해석하여, 원본 내용과 의미가 다를 수 있습니다. 해당 부분 피드백 주시면 반영하겠습니다.

[규칙 요약(위배 원인 -> 수정 방법)]

정의되지 않은 행동 및 지정되지 않은 행동 발생
-> 정의되지 않은 행동 및 지정되지 않은 행동 발생 금지


[위험 요인]

프로그램이 개발자 의도와 다르게 수행될 수 있음
 

[예외 사항]

-
 

[상세 설명]

프로그램에서 정의되지 않은 행동 및 지정되지 않은 행동이 발생하면, 프로그램이 개발자 의도와 다르게 수행되어 심각한 결함으로 이어질 수 있다.
 

[비고]

* 정의되지 않은 행동(Undefined behavior): behavior, upon use of a non-portable or erroneous program construct or of erroneous data, for which this International Standard imposes no requirements
표준에서 정의되지 않은 모든 행동이다.
어떤 결과가 나올지 정의되어 있지 않으며, 예상치 못한 행동이 발생할 수 있다. 운이 좋으면 프로그래머가 의도한 방향으로 컴파일 될 수도 있지만, 실행 중 에러를 발생시킬 수 있다.
Undefined behavior의 결과는 누구도 예측할 수 없기 때문에 반드시 피해야 한다.
예제) 초기화가 안 된 변수의 사용
부호 있는 정수형의 overflow
부호 있는 정수 자료형의 왼쪽/오른쪽 시프트 연산
범위를 벗어난 배열 접근
유효하지 않은 포인터의 역참조

* 지정되지 않은 행동(Unspecified behavior): use of an unspecified value, or other behavior where this International Standard provides two or more possibilities and imposes no further requirements on which is chosen in any instance
동작에 대한 구현은 제공하지만 문서화 되어있지 않다.
해당 기능이 컴파일러의 구현체에 따라 정의된 행동으로, 컴파일러 마다 다른 동작을 할 수는 있지만 일반적으로 예상 가능한 유효 범위 내부에서 동작한다.
예제) malloc 함수 인자로 0을 주고 실행할 때, 메모리 할당 크기가 명시되지 않음.
function_call(foo(), bar()); foo() 함수와 bar() 함수의 호출 순서가 명시되지 않음.

* 정의되지 않은 행동 및 지정되지 않은 행동 리스트와 이를 예방하는 방법을 Appendix H에서 제공한다.
 

This post is licensed under CC BY 4.0 by the author.

MISRA C 2012_01_02 - 언어 확장 사용 금지

MISRA C 2012_02_01 - 도달할 수 없는 코드 삭제

Comments powered by Disqus.

Trending Tags