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;
}
Comments powered by Disqus.