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