Home MISRA_C_2012_08_06 외부 연결 식별자는 하나의 외부정의(external definition)를 가져야 한다.
Post
Cancel

MISRA_C_2012_08_06 외부 연결 식별자는 하나의 외부정의(external definition)를 가져야 한다.

  • MISRA_C_2012_08_06 규칙을 소개한다.

  • 여러 개의 정의를 가졌거나 또는 다른 파일 내에 정의가 존재하지 않으면 일반적으로 링킹(linking)시에 오류가 발생하며, 오류가 발생하지 않으면 정의하지 않은 행동이 발생한다.
  • 다른 파일 내에서의 동일한 식별자로 정의된 객체나 함수는 내용이 같더라도 허용되지 않는다.(one definition rule 위반)
  • MISRA_C_2012 규칙에서, 전역 변수 및 함수를 선언하여 사용하는 방법은 다음과 같다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<common.h>

#ifndef COMMON_HEADER
#define COMMON_HEADER

#include <stdio.h>
#include <stdint.h>

typedef char char_t;

// 전역 변수 extern 선언 및 일반 선언
extern int32_t common_data;
int32_t common_data;
#endif
1
2
3
4
5
6
<foo.h>

#include "common.h"

// 함수 선언은 헤더 파일에 존재, 함수명 중복 금지
void foo(void);
1
2
3
4
5
6
7
8
9
<foo.c>

#include "foo.h"

// 함수 선언은 c 파일에 존재
void foo(void) {
    common_data = 200;
    (void)printf("foo common_data: %d \n", common_data);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<main.c>

#include "common.h"
#include "foo.h"

int32_t main() {
  common_data = 100;

  (void)printf("main common_data: %d \n", common_data);
  foo();
  (void)printf("main common_data: %d \n", common_data);

  return 0;
}
This post is licensed under CC BY 4.0 by the author.

Project Lab 29. 추가 개발 및 유지보수 - 3

Project SW Test Forum 13. 유지보수 - 1

Comments powered by Disqus.

Trending Tags