← 포트폴리오로 돌아가기Active

Developer Tool

Embedded C Lint — 임베디드 C 규칙 검사기

STM32·ARM Cortex-M·Silicon Labs 임베디드 C 코드의 스타일과 안전 규칙을 검사하는 의존성 없는 정적 분석기. 동적 할당 금지, 네이밍 컨벤션, 헤더 가드 등 13개 규칙을 자동화했습니다.

13개 규칙 검사표준 라이브러리만 사용CI 게이트 연동

Embedded C Lint — 임베디드 C 규칙 검사기 상세 설계서

상태: PUBLIC · ACTIVE · MIT 라이선스 기술 스택: Python 3.9+ (표준 라이브러리만), unittest, GitHub Actions 카테고리: Developer Tool


1. 문제와 대상 사용자

임베디드 C 코드 리뷰는 "함수 이름이 컨벤션에 맞는가", "탭인가 스페이스인가" 같이 기계적으로 판정 가능한 항목을 사람이 눈으로 훑는 데 시간을 많이 씁니다. 이 도구는 그 부분을 스크립트로 넘겨, ISR 블로킹이나 상태 머신 설계처럼 실제 판단이 필요한 곳에 리뷰 시간을 쓰게 합니다. 대상은 MCU 펌웨어를 다루는 개발자와 리뷰어입니다.

2. 검사 규칙

규칙 ID심각도내용
NAMING-FILEERROR파일명 snake_case
NAMING-FUNCERROR함수명 PascalCase (IRQ 핸들러·main 제외)
NAMING-GLOBALERROR전역 변수 g_ 접두사
NAMING-STATICERROR정적 변수 s_ 접두사
NAMING-MACROERROR매크로 UPPER_SNAKE_CASE
NO-MALLOCERRORmalloc/calloc/realloc/free 금지
FMT-TABERROR탭 금지, 4-스페이스 들여쓰기
FMT-LINELENERROR라인 100자 이하
FMT-BRACEERRORK&R 스타일 (여는 중괄호 같은 줄)
FMT-HEADERGUARDERROR헤더 가드 (.h)
FMT-EXTERNCERRORextern "C" 블록 (.h)
DOC-DOXYGENWARN함수 Doxygen 주석
STRUCT-PACKEDWARN구조체 __attribute__((packed))

3. 기술 선택 이유

  • 표준 라이브러리만 사용: pip install 없이 어느 빌드 환경에서나 바로 돌아가야 CI 게이트로 쓸 수 있습니다.
  • 종료 코드 규약: ERROR가 하나라도 있으면 1, 없으면 0을 반환해 pre-commit 훅이나 CI에 그대로 연결됩니다.
  • JSON 출력: --json 옵션으로 리포트를 다른 도구에 넘길 수 있습니다.

4. 현재 범위

  • 규칙 13종 검사, 디렉터리 재귀 검사, 규칙 선택 실행(--rules), JSON 출력이 동작합니다.
  • 규칙별로 위반/통과 케이스를 하나씩 두는 테스트를 유지합니다.
  • 웹 아카이브에서는 임의 코드를 실행하지 않습니다. 고정된 예시 입력과 그 검사 결과만 문서로 보여 줍니다.

5. 알려진 한계

  • 정규식 기반 정적 분석이라 완전한 C 파서가 아닙니다. 예를 들어 한 줄에 변수를 여러 개 선언하면(int a, b;) 네이밍 검사를 건너뜁니다.
  • ISR 논블로킹, 상태 머신, 저전력 처리처럼 판단이 필요한 항목은 스크립트가 다루지 않고 리뷰 체크리스트로 남겨 둡니다.

6. 다음 검증

  • 오탐 사례 수집과 규칙별 예외 처리 보강
  • 공개 예제 페이지의 입력·출력이 실제 스크립트 결과와 일치하는지 배포 전 확인