그라운드 임베디드 유튜브 구독

노트 / 펌웨어 설계와 품질

코딩 규칙: MISRA C가 막는 것들

자동차와 산업 펌웨어에서 쓰는 MISRA C가 무엇을 금지하는지, 그리고 그 이유를 정리했습니다.

GROUND EMBEDDED · 정리 노트설계·품질 03코딩 규칙규칙 (요지)이유동적 메모리 할당 금지단편화, 실패, 시간 예측 불가재귀 금지스택 사용량 예측 불가

MISRA C는 C의 위험한 기능을 제한해 예측 가능하고 검증 가능한 코드를 쓰게 하는 규칙 모음입니다. 자동차 업계에서는 사실상 표준입니다.

대표 규칙과 이유

규칙 (요지) 이유
동적 메모리 할당 금지 단편화, 실패, 시간 예측 불가
재귀 금지 스택 사용량 예측 불가
goto 제한 흐름 추적 어려움
모든 switch에 default 예상 못 한 값 처리
암묵적 형변환 제한 부호, 크기 변환 버그
함수 반환값 무시 금지 오류를 흘려보내지 않게
매크로보다 inline 함수 부작용, 타입 검사
부동소수점 == 비교 금지 오차

실무에서 쓰는 방식

  • 정적 분석 도구(PC-lint, Polyspace, Helix QAC, cppcheck의 MISRA 애드온)로 자동 검사합니다.
  • 꼭 어겨야 하는 경우 편차(deviation)를 문서로 남기고 승인받습니다.
  • 규칙의 목적을 이해하면 MISRA를 쓰지 않는 프로젝트에서도 좋은 습관이 됩니다.

함께 보는 것

CERT C(보안 중심), 회사 자체 코딩 스타일(이름 규칙, 들여쓰기). 형식은 자동 포매터(clang-format)에 맡기고 리뷰에서는 로직에 집중합니다.