노트 / 펌웨어 설계와 품질
코딩 규칙: MISRA C가 막는 것들
자동차와 산업 펌웨어에서 쓰는 MISRA C가 무엇을 금지하는지, 그리고 그 이유를 정리했습니다.
MISRA C는 C의 위험한 기능을 제한해 예측 가능하고 검증 가능한 코드를 쓰게 하는 규칙 모음입니다. 자동차 업계에서는 사실상 표준입니다.
대표 규칙과 이유
| 규칙 (요지) | 이유 |
|---|---|
| 동적 메모리 할당 금지 | 단편화, 실패, 시간 예측 불가 |
| 재귀 금지 | 스택 사용량 예측 불가 |
| goto 제한 | 흐름 추적 어려움 |
| 모든 switch에 default | 예상 못 한 값 처리 |
| 암묵적 형변환 제한 | 부호, 크기 변환 버그 |
| 함수 반환값 무시 금지 | 오류를 흘려보내지 않게 |
| 매크로보다 inline 함수 | 부작용, 타입 검사 |
| 부동소수점 == 비교 금지 | 오차 |
실무에서 쓰는 방식
- 정적 분석 도구(PC-lint, Polyspace, Helix QAC, cppcheck의 MISRA 애드온)로 자동 검사합니다.
- 꼭 어겨야 하는 경우 편차(deviation)를 문서로 남기고 승인받습니다.
- 규칙의 목적을 이해하면 MISRA를 쓰지 않는 프로젝트에서도 좋은 습관이 됩니다.
함께 보는 것
CERT C(보안 중심), 회사 자체 코딩 스타일(이름 규칙, 들여쓰기). 형식은 자동 포매터(clang-format)에 맡기고 리뷰에서는 로직에 집중합니다.