๐ 5ํ๊ฐ: ํฌ์ธํฐ ์ฌ์ฉ ์ ํ๊ณผ ์์ ํ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ๐ก๏ธ
์๋
ํ์ธ์! MISRA-C ์์ ์ฝ๋ฉ ์ฌ์ ์ ํจ๊ปํ๊ณ ์๋ ์ฌ๋ฌ๋ถ, ๋ฐ๊ฐ์ต๋๋ค!
์ค๋์ ๋ง์ ๊ฐ๋ฐ์๋ค์ ์ฌ๋(?)๊ณผ ๋์์ ๋๋ ค์์ ๋์์ด๊ธฐ๋ ํ ํฌ์ธํฐ(pointer) ์ด์ผ๊ธฐ๋ฅผ ํด๋ณด๊ฒ ์ต๋๋ค. ๐งตโจ
C ์ธ์ด๋ฅผ ์ฒ์ ๋ฐฐ์ธ ๋ "ํฌ์ธํฐ๋ C์ ๊ฝ์ด๋ค!"๋ผ๋ ๋ง์ ๋ฃ๊ณค ํฉ๋๋ค.
ํ์ง๋ง MISRA-C ๊ด์ ์์ ํฌ์ธํฐ๋ ์ํํ ๊ฝ์ด ๋ ์ ์์ฃ . ๐น๐๐ฅ
๐ ์ ํฌ์ธํฐ๊ฐ ์ํํ ๊น?
ํฌ์ธํฐ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ง์ ๋ค๋ฃฐ ์ ์๊ฒ ํด์ฃผ๋ ๊ฐ๋ ฅํ ๋๊ตฌ์
๋๋ค.
๊ทธ๋ฐ๋ฐ ์ด ๊ฐ๋ ฅํจ์ด ์๋ชป ์ฐ์ด๋ฉด ๋ฉ๋ชจ๋ฆฌ ์นจ๋ฒ, ์ค๋์, ๋ณด์ ์ทจ์ฝ์ ์ผ๋ก ์ง๊ฒฐ๋ฉ๋๋ค. ๐ฑ
์๋ฅผ ๋ค์ด:
int arr[5] = {0};
int *p = arr;
p[10] = 100; // ๐จ ๋ฐฐ์ด ๋ฒ์ ์ด๊ณผ, ๋ฉ๋ชจ๋ฆฌ ์นจ๋ฒ!
์ด๋ฐ ์ํฉ์ ์ ์ด ๋ถ๋ฅ ์ํ๋ก ๋น ์ง ์ ์์ด MISRA-C์์๋ ๊ฐ๋ ฅํ๊ฒ ์ ์ฝํฉ๋๋ค.
๐ MISRA-C์์์ ํฌ์ธํฐ ์ฌ์ฉ ์ ํ ๊ท์น
1. ํฌ์ธํฐ ์ฐ์ฐ ๊ธ์ง โโโ
- p + 1, p - 1 ๊ฐ์ ํฌ์ธํฐ ์ฐ์ ์ฐ์ฐ์ ๊ธ์ง๋ฉ๋๋ค.
- ์ด์ : ๋ฐฐ์ด์ ๋ฒ์๋ฅผ ๋ฒ์ด๋ ์์์น ๋ชปํ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ์ด ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๐ MISRA-C๋ “ํฌ์ธํฐ๋ ์ฃผ์๋ฅผ ๋ด๋ ์ฉ๋๋ก๋ง ์ฌ์ฉํ๋ผ!”๋ ์์น์ ๊ฐ์กฐํฉ๋๋ค.
2. ๋ฐฐ์ด๊ณผ ํฌ์ธํฐ๋ ๋ช ํํ ๊ตฌ๋ถ! ๐งฉ
C์์๋ ๋ฐฐ์ด๊ณผ ํฌ์ธํฐ๊ฐ ํท๊ฐ๋ฆฌ๊ฒ ๋์ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
ํ์ง๋ง MISRA-C์์๋ ์ด๋ฐ ์ ๋งค๋ชจํธํจ์ ์ ๊ฑฐํฉ๋๋ค.
- ๋ฐฐ์ด์ ๋ฐฐ์ด๋ก!
- ํฌ์ธํฐ๋ ํฌ์ธํฐ๋ก!
void process_array(int arr[10]); // โ
๋ช
ํํ๊ฒ ๋ฐฐ์ด ํฌ๊ธฐ ์ง์
void process_pointer(int *p); // โ
ํฌ์ธํฐ๋ ํฌ์ธํฐ๋ก!
์ฆ, “๋ฐฐ์ด์ ์ ๋ฌํ ๋๋ ๋ฐฐ์ด์์ ๋ช ํํ ํ์” ํ๋ ๊ฒ์ด ์์น์ ๋๋ค.
3. NULL ํฌ์ธํฐ๋ ๋ฐ๋์ ํ์ธ! โ ๏ธ
ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ ๋๋ NULL ์ฒดํฌ๊ฐ ํ์์
๋๋ค.
์ ๊ทธ๋ฌ๋ฉด ํ๋ก๊ทธ๋จ์ ๋ฐ๋ก ํฌ๋์๋ก ์ด์ด์ง ์ ์์ฃ .
if (p != NULL) { *p = 10; // ์์ ํ๊ฒ ์ ๊ทผ โ
}
๐งญ ์์ ํ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ๊ฐ์ด๋
- ๋ฐฐ์ด์ ๋ฐ๋์ ๋ฒ์ ๋ด์์๋ง ์ ๊ทผํ ๊ฒ.
- ํฌ์ธํฐ๋ ์ต์ํ์ผ๋ก ์ฌ์ฉํ๊ณ , ๋ช ํํ ์ญํ ์ ๊ตฌ๋ถํ ๊ฒ.
- ํ์ํ๋ค๋ฉด ์์ ํ ์ถ์ํ(์: ๊ตฌ์กฐ์ฒด, ์ธ๋ฑ์ค ๊ธฐ๋ฐ ์ ๊ทผ)๋ฅผ ํ์ฉํ ๊ฒ.
์ฆ, ํฌ์ธํฐ๋ "์์ผ๋ฉด ์ข์ง๋ง ์์ด๋ ๋๋" ์ํฉ์์๋ง ์ ์คํ๊ฒ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ๐ฆ
๐ฏ ์ค๋์ ํต์ฌ ์ ๋ฆฌ
- ํฌ์ธํฐ ์ฐ์ฐ์ ์ ๋ ๊ธ์ง!
- ๋ฐฐ์ด๊ณผ ํฌ์ธํฐ๋ ๋ช ํํ ๊ตฌ๋ถ!
- NULL ํฌ์ธํฐ ์ ๊ทผ์ ๋ฐ๋์ ์ฒดํฌ!
โญ๏ธ ๋ค์ ํ์ฐจ ์๊ณ
๋ค์ ์๊ฐ์๋ ์ ์ฒ๋ฆฌ๊ธฐ ์ฌ์ฉ ๊ท์น๊ณผ ์ฝ๋ ๊ฐ๋
์ฑ ํ๋ณด์ ๋ํด ๋ค๋ค๋ณด๊ฒ ์ต๋๋ค.
์ ์ฒ๋ฆฌ๊ธฐ ๋งคํฌ๋ก๊ฐ ์๋ชป ์ฐ์ด๋ฉด ์ฝ๋๊ฐ ๋ง๋ฒ์ฒ๋ผ(?) ๊ผฌ์ผ ์ ์๋๋ฐ์, ์ด๋ฅผ ์ด๋ป๊ฒ MISRA-C๊ฐ ๋ง์์ฃผ๋์ง ์์๋ด
์๋ค! โจ
'SW Dev. > MISRA-C' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| (MISRA-C 7๊ฐ) ๋ณ์ ์ ์ธ๊ณผ ์ค์ฝํ ์ ํ ๊ท์น (0) | 2025.09.11 |
|---|---|
| (MISRA-C 6๊ฐ) ์ ์ฒ๋ฆฌ๊ธฐ ์ฌ์ฉ ๊ท์น๊ณผ ์ฝ๋ ๊ฐ๋ ์ฑ ํ๋ณด (0) | 2025.09.07 |
| (MISRA-C 4๊ฐ) ์ ์ด ํ๋ฆ๊ณผ ์กฐ๊ฑด๋ฌธ ๊ท์น (4) | 2025.08.16 |
| (MISRA-C 3๊ฐ) Rule Categories: ๊ธฐ๋ณธ ๋ฌธ๋ฒ & ํ์ ์์ ์ฑ ๊ท์น (5) | 2025.08.12 |
| (MISRA-C 2๊ฐ) ๊ตฌ์กฐ์ ์ฃผ์ ๊ฐ๋ ์ดํดํ๊ธฐ (5) | 2025.08.08 |
