- MISRA C 2012_02_02 규칙을 소개한다.
- MISRA C 2012 규칙을 분석 후 해석하여, 원본 내용과 의미가 다를 수 있습니다. 해당 부분 피드백 주시면 반영하겠습니다.
[규칙 요약(위배 원인 -> 수정 방법)]
불필요한 코드 존재
-> 불필요한 코드 삭제
[위험 요인]
1. 프로그램 논리 오류가 발생할 수 있음
2. 불필요한 코드는 컴파일러에 의해 제거 될 수 있으므로, 다른 코드와 혼동할 수 있음
[예외 사항]
1. 언어 확장에 의해 수행되는 연산
프로그램 동작에 영향을 미치므로 불필요한 코드가 아님
예제) 어셈블리어를 호출하는 언어 확장: __asm("NOP");
2. void 형변환
의도적으로 사용되지 않는 값을 나타내므로 불필요한 코드가 아님
[상세 설명]
-
[비고]
* 불필요한 코드(dead code): 프로그램 소스 코드의 일부지만, 프로그램 동작에 영향을 미치지 않는 코드
[예제 코드]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include
#include
void foo();
void foo(void)
{
uint16_t a;
int8_t *pc;
// 위배: a는 초기화 이후 사용되지 않음
a = 3U;
// 위배: a는 형변환 후 값이 저장되지 않음
(int32_t) a;
// 위배: a는 >> 연산자 사용 후 값이 저장되지 않음
a >> 3;
// 위배: ++ 연산자가 * 연산자보다 우선순위가 높으므로 * 연산자는 사용되지 않음
*pc++;
}
->
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include
#include
void foo();
void foo(void)
{
uint16_t a;
int32_t b;
int8_t c = 'c';
int8_t *pc = &c;
// 수정: a는 초기화 이후 사용
a = 3U;
// 예외
(void)a;
// 수정: a는 형변환 후 값 저장
b = (int32_t)a;
// 수정: a는 >> 연산자 사용 후 값 저장
a = a >> 3;
// 수정: 괄호를 사용하여 우선순위 명시(* 연산자는 사용 후 ++ 연산자 사용)
(*pc)++;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void foo(void);
void boo(void);
void foo(void)
{
}
void boo(void)
{
// 위배: foo 함수는 프로그램 수행에 영향을 미치지 않음
foo();
// ...
}
->
1
2
3
4
5
6
7
8
void boo(void);
void boo(void)
{
// 수정: 프로그램 수행에 영향을 미치지 않는 foo 함수 제거
// ...
}
Comments powered by Disqus.