- MISRA C 2012_01_02 규칙을 소개한다.
- MISRA C 2012 규칙을 분석 후 해석하여, 원본 내용과 의미가 다를 수 있습니다. 해당 부분 피드백 주시면 반영하겠습니다.
[규칙 요약(위배 원인 -> 수정 방법)]
언어 확장 사용
-> 다음 중 한가지 방법 선택
1. 규칙 적용을 적용하고 언어 확장 사용 금지
2. 규칙 적용을 적용하고 언어 확장 사용: 컴파일러가 제공하는 언어 확장 문서화
3. 규칙 적용하지 않고 언어 확장 사용
1) 프로젝트 설계 문서에서 정당화되어야 함
2) 언어 확장이 올바르게 사용되는지 보장하는 방법(컴파일러 확인, 컴파일러 진단 등) 문서화
[위험 요인]
1. 컴파일러 간의 이식성이 떨어짐: 언어 확장을 사용하는 프로그램을 다른 컴파일러로 빌드하는 경우 컴파일 오류가 발생함
2. 언어 확장 사용으로 인한 모든 상황을 문서에서 다루기 어려우므로, 다루지 않은 언어 확장은 위험 요인이 될 수 있음
[예외 사항]
-
[상세 설명]
임베디드 시스템에서는 언어 확장이 필요하다. 그러나 C언어 표준에서 정의한 동작을 변경시키는, 즉 C언어 표준을 위배하는 언어 확장 사용을 금지한다.
예제) C언어 표준에서는 Short Circuit Rule에 따라 &&과 ||의 우변은 좌변 결과에 따라 계산하지 않을 수 있다. 만약 컴파일러에서 좌변 결과와 무관하게 우변을 항상 계산한다면, 해당 규칙을 위배한다.
[비고]
* 컴파일러 진단(compiler diagnostics): 컴파일러가 프로그램 컴파일 시 수행하는 오류 진단. 다음 4가지 경우가 있다. 이 밖에 컴파일러에서 제공하는 출력으로 전체적인 진단 정보, 원시 언어 리스팅, 기계어 리스팅, 심벌의 정의와 그들의 참조에 대한 상호 관련 리스팅 등이 있다.
1. 예비 경고:경고 메시지를 인쇄하고 컴파일 계속 수행.
2. 수정 가능:일단 오류를 수정한 뒤 이를 설명해 주는 메시지를 인쇄한 후 컴파일 계속 수행.
3. 수정 불가능:프로그램 작성자의 의도를 알아낼 수 없어 오류 진단 메시지를 인쇄한 후 오류가 발생한 구문이나 문장을 빼고 컴파일 계속 수행.
4. 불가능:더 이상의 오류 진단 정보가 소용없을 정도로 오류가 많은 경우 컴파일 중단.
* Short Circuit Rule: 이미 결정된 값에 대한 불필요한 연산을 하지 않음으로 실행 속도를 높이는 규칙이다.
Comments powered by Disqus.