๐ MISRA-C: 2012 4๊ฐ ์ ์ด ํ๋ฆ๊ณผ ์กฐ๊ฑด๋ฌธ ๊ท์น
“์ฝ๋๊ฐ ์ด๋๋ก ๊ฐ๋์ง, ๊ผญ ์์์ผ ํ๋ค!”
๐ ๋ค์ด๊ฐ๋ฉฐ
C ์ธ์ด์์ ์ ์ด ํ๋ฆ(control flow) ์ ํ๋ก๊ทธ๋จ์ ๋ฐฉํฅํ์
๋๋ค.
๋ฐฉํฅํ๊ฐ ์๋ชป๋๋ฉด? ๐ข → ์์ด ์งํ!
MISRA-C์์๋ if, switch, for, while ๊ฐ์ ์ ์ด๋ฌธ์ ์์ ์ด์ ๊ท์น์ ๊ฑธ์ด
์์ธก ๋ถ๊ฐ๋ฅํ ์ฌ๊ณ ๋ฅผ ๋ฏธ์ฐ์ ๋ฐฉ์งํฉ๋๋ค.
๐ ์ ์ด๋ฌธ์์ ๋ฐ์ํ๋ ๋ํ ์ฌ๊ณ
1. ์กฐ๊ฑด ๋๋ฝ ์ฌ๊ณ
if (status = READY) // ๐ฑ '='๋ ๋์
, '=='๊ฐ ๋น๊ต
{
startEngine();
}
- ์๋: READY์ผ ๋๋ง ์คํ
- ์ค์ :
status์ READY ๋์ ํ ํญ์ ์ฐธ → ๋ฌด์กฐ๊ฑด ์คํ
MISRA ๋ฐฉ์ด์ฑ : ์กฐ๊ฑด๋ฌธ์์ ๋์ ๊ธ์ง, ๋น๊ต ์ฐ์ฐ ํ์ ํ์ธ
2. switch ๋ฌธ์์์ ์ถ๋ฝ ์ฌ๊ณ
switch (mode)
{
case 1:
accelerate();
case 2:
brake();
break;
}
case 1๋ค์break๊ฐ ์์ด 2๋ฒ case๋ก ์ถ๋ฝ(Fall-through)- ๋๋ก๋ ์๋์ ์ด์ง๋ง, MISRA์์๋ ๋ช ์ ์ฃผ์ ์์ผ๋ฉด ๊ธ์ง
/* fall-through intentional */ ์ ๊ฐ์ด ํ์
3. ๋ฐ๋ณต๋ฌธ ํ์ถ ์คํจ
while (1)
{
if (stopSignal)
break;
}
break๊ฐ ์ ์ผํ ํ์ถ ์๋จ์ด๋ฉด ๋ฌดํ ๋ฃจํ ๊ฐ๋ฅ์ฑ↑- MISRA๋ ์ข ๋ฃ ์กฐ๊ฑด์ด ๋ช ํํ๊ณ ์ ํํด์ผ ํ๋ค๊ณ ๊ถ๊ณ
๐ MISRA-C์ ์ ์ด ํ๋ฆ ์์ ๊ท์น
if-else ๊ท์น
- ๋ชจ๋
if๋ ๋ช ํํ ์กฐ๊ฑด๊ณผ ์ค๊ดํธ ์ฌ์ฉ - ์ค์ฒฉ if๋ ์ต์ํ → ์ฝ๊ธฐ ์ด๋ ค์ด "ํผ๋ผ๋ฏธ๋ ์ฝ๋" ๋ฐฉ์ง
switch ๊ท์น
- ๋ชจ๋ case์
break๋๋ ๋ช ์์ fall-through ์ฃผ์ ํ์ defaultcase ํ์ → ์๊ธฐ์น ๋ชปํ ๊ฐ ์ฒ๋ฆฌ
๋ฐ๋ณต๋ฌธ ๊ท์น
for/while์ข ๋ฃ ์กฐ๊ฑด์ ๋ฐ๋์ ๊ฒฐ์ ์ ์ด์ด์ผ ํจ- ๋ฌดํ ๋ฃจํ๋ ์์ธ์ ์ํฉ์์๋ง ์ฌ์ฉ, ์ข ๋ฃ ๊ฒฝ๋ก ๋ช ํํ ๋ช ์
๐ ์์ ์ ์ด๋ฌธ ๊ท์น ํ๋์ ๋ณด๊ธฐ
| ์ ์ด๋ฌธ | ์ํ ์ฌ๋ก | MISRA ์์ ๋์ฑ |
|---|---|---|
| if-else | =์ == ํผ๋ |
์กฐ๊ฑด๋ฌธ ๋์ ๊ธ์ง |
| switch | break ๋๋ฝ | break ๋๋ fall-through ์ฃผ์ |
| for/while | ์ข ๋ฃ ์กฐ๊ฑด ๋ถ๋ช ํ | ๊ฒฐ์ ์ ์กฐ๊ฑด ํ์ |
๐ก ์ค๋ฌด ํ
- ์ ์ ๋ถ์ ๋๊ตฌ๋ฅผ ์ฐ๋ฉด
switch๋๋ฝ์ด๋ ์กฐ๊ฑด ๋์ ์ค์๋ฅผ ์๋ ๊ฒ์ถ - ํ์ง๋ง ๋๊ตฌ๋ง ๋ฏฟ์ง ๋ง๊ณ ์ฝ๋ ๋ฆฌ๋ทฐ ํ์!
- ํนํ ์ ์ด๋ฌธ์ ์ฝ๋ ํ๋ฆ๋(flow chart) ๋ก ๊ทธ๋ ค๋ณด๋ฉด ๋ฒ๊ทธ๊ฐ ๋์ ์ ๋๋๋ค
๐ข ๋ค์ ํ์ฐจ ์๊ณ
ํฌ์ธํฐ ์ฌ์ฉ ์ ํ๊ณผ ์์ ํ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ
C ์ธ์ด์ ๊ฐ๋ ฅํ ๋ฌด๊ธฐ์ด์ ์๋ ์ ๊ฒ, ํฌ์ธํฐ!
MISRA-C๊ฐ ์ด๋ป๊ฒ ํฌ์ธํฐ๋ฅผ ์์ ํ๊ฒ ์ฐ๋๋ก ์ ํํ๋์ง ์์๋ด ๋๋ค.
๋ฐ์ํ
'SW Dev. > MISRA-C' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| (MISRA-C 6๊ฐ) ์ ์ฒ๋ฆฌ๊ธฐ ์ฌ์ฉ ๊ท์น๊ณผ ์ฝ๋ ๊ฐ๋ ์ฑ ํ๋ณด (0) | 2025.09.07 |
|---|---|
| (MISRA-C 5๊ฐ) ํฌ์ธํฐ ์ฌ์ฉ ์ ํ๊ณผ ์์ ํ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ (1) | 2025.08.21 |
| (MISRA-C 3๊ฐ) Rule Categories: ๊ธฐ๋ณธ ๋ฌธ๋ฒ & ํ์ ์์ ์ฑ ๊ท์น (5) | 2025.08.12 |
| (MISRA-C 2๊ฐ) ๊ตฌ์กฐ์ ์ฃผ์ ๊ฐ๋ ์ดํดํ๊ธฐ (5) | 2025.08.08 |
| (MISRA-C 1๊ฐ) ํ์ ๋ฐฐ๊ฒฝ๊ณผ ์ ์ฉ ๋ชฉ์ (5) | 2025.08.05 |
