Home MISRA C 2012_02_02 - 불필요한 코드 삭제
Post
Cancel

MISRA C 2012_02_02 - 불필요한 코드 삭제

  • 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 함수 제거

    // ...
}
This post is licensed under CC BY 4.0 by the author.

MISRA C 2012_02_01 - 도달할 수 없는 코드 삭제

MISRA C 2012_02_03 - 사용하지 않는 자료형 선언 제거

Comments powered by Disqus.

Trending Tags