티스토리 뷰

반응형

1. 일반 규정

1.8 자주 사용하는 키워드

규정

  1. 선언한 모듈 외부에서 볼 필요가 없는 모든 함수와 변수는 키워드 static을 사용하여 선언해야 합니다.
  2. 적절한 경우에 키워드 const를 항상 사용해야 합니다. 사용 예는 다음과 같습니다.
    1. 초기화 이후 변하지 않는 변수를 선언할 때
    2. 수정돼서는 안될 참조 호출(call-by-reference) 함수의 매개변수를 정의할 때(예를 들어, char const *param)
    3. 수정돼서는 안될 struct나 union의 항목을 정의할 때(예를 들어, 메모리 사상 입출력 주변장치의 레지스터를 위한 구조체 오버레이에서)
    4. 상수를 생성하는 #define에 대한 대안으로 사용
  3. 적절한 경우 키워드 volatile를 항상 사용해야 합니다. 사용 예는 다음과 같습니다.
    1. 인터럽트 서비스 루틴(ISR)에서 접근 가능한 전역 변수를 선언할 때
    2. 두 개 이상의 스레드에서 접근 가능한 전역 변수를 선언할 때
    3. 메모리 사상 입출력 주변장치 레지스터의 포인터를 선언할 때(예를 들어, timer_t volatile * const p_timer)
    4. 지연 루프에서 사용하는 카운터 변수를 선언할 때

예시

typedef struct
{
  uint16_t count;
  uint16_t max_count;
  uint16_t const _unused;       // read-only register
  uint16_t control;
} timer_reg_t;

timer_reg_t volatile * const p_timer = (timer_reg_t *) HW_TIMER_ADDR;

이유

C의 static 키워드는 여러 의미가 있습니다. 모듈 레벨에서, static으로 선언된 전역 변수 및 함수는 외부로부터 보호됩니다. static 키워드를 많이 사용하면 모듈간의 간섭을 줄일 수 있습니다.

const나 volatile 키워드는 더욱 중요합니다. const를 최대한 많이 사용하면 읽기 전용인 데이터에 의도하지 않은 쓰기로부터 컴파일러 수준에서 시행하는 보호를 받을 수 있습니다. volatile 키워드를 적절히 사용하면 변수 또는 레지스터에 대한 읽기 또는 쓰기를 삭제하는 컴파일러 최적화를 방지하여 찾기 어려운 버그를 모두 제거할 수 있습니다.

시행

이 규정은 코드 검토시 시행해야 합니다.

'Digital Developer' 카테고리의 다른 글

[ECCS] 주석의 위치와 내용  (0) 2020.10.03
[ECCS] 주석에서 허용하는 형식  (1) 2020.10.02
[ECCS] 피해야할 키워드  (0) 2020.10.01
[ECCS] 캐스트  (0) 2020.10.01
[ECCS] 괄호  (0) 2020.10.01
댓글
최근에 올라온 글
Total
Today
Yesterday