(MISRA-C 3๊ฐ•) Rule Categories: ๊ธฐ๋ณธ ๋ฌธ๋ฒ• & ํƒ€์ž… ์•ˆ์ „์„ฑ ๊ทœ์น™

๐Ÿš— MISRA-C:2012 ์‹ค๋ฌด ๊ฐ•์˜ 3๊ฐ• : Rule Categories: ๊ธฐ๋ณธ ๋ฌธ๋ฒ• & ํƒ€์ž… ์•ˆ์ „์„ฑ ๊ทœ์น™

๐Ÿ˜Ž ๋“ค์–ด๊ฐ€๋ฉฐ

C ์–ธ์–ด๋Š” ๋น ๋ฅด๊ณ  ๊ฐ•๋ ฅํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿฐ๋ฐ ๋™์‹œ์— ์œ„ํ—˜ํ•˜๊ณ  ๋ณ€๋•์Šค๋Ÿฌ์šด ๋ฉด๋„ ์žˆ์ฃ .
์™œ๋ƒ๊ณ ์š”? ๋ฐ”๋กœ Undefined Behavior(UB) ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

MISRA-C:2012์˜ ๊ธฐ๋ณธ ๋ฌธ๋ฒ•๊ณผ ํƒ€์ž… ์•ˆ์ „์„ฑ ๊ทœ์น™์€
์ด UB๋ผ๋Š” “์ž ์žฌ์  ์‚ฌ๊ณ  ์œ ๋ฐœ์ž”๋ฅผ ์›์ฒœ ์ฐจ๋‹จํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉํŒจ์ž…๋‹ˆ๋‹ค. ๐Ÿ›ก


๐Ÿ“Œ Undefined Behavior, ๋„ˆ ์ •์ฒด๊ฐ€ ๋ญ๋ƒ?

UB(์ •์˜๋˜์ง€ ์•Š์€ ๋™์ž‘)๋Š” ๋ง ๊ทธ๋Œ€๋กœ
C ํ‘œ์ค€์—์„œ “์ด ์ƒํ™ฉ์€ ์ •์˜ ์•ˆ ํ•จ”์ด๋ผ๊ณ  ์„ ์–ธํ•ด ๋ฒ„๋ฆฐ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.
์ฆ‰, ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋งˆ์Œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•ด ๋ฒ„๋ฆฝ๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ๋Š” ์ด๋ ‡์ฃ :

  • ๋””๋ฒ„๊ทธ ๋ชจ๋“œ → ์ •์ƒ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Œ โœ…
  • ๋ฆด๋ฆฌ์ฆˆ ๋ชจ๋“œ → ๊ฐ‘์ž๊ธฐ ์˜ค์ž‘๋™ ๐Ÿ’ฅ
  • ๋‹ค๋ฅธ ์ปดํŒŒ์ผ๋Ÿฌ → ์™„์ „ํžˆ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ ๐Ÿคฏ

๐Ÿ•ต๏ธ UB์˜ ์‹ค์ „ ์˜ˆ์‹œ

  1. ์ •์ˆ˜ ์˜ค๋ฒ„ํ”Œ๋กœ
    int x = INT_MAX; x = x + 1; // ํ‘œ์ค€: "๋ชฐ๋ผ. ๋‹ˆ๊ฐ€ ์•Œ์•„์„œ ํ•ด."
  2. ๋ฐฐ์—ด ๋ฒ”์œ„ ์ดˆ๊ณผ ์ ‘๊ทผ
    int arr[3] = {1, 2, 3}; int y = arr[5]; // ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ์— ์† ๋ป—๊ธฐ
  3. ์ž˜๋ชป๋œ ํƒ€์ž… ๋ณ€ํ™˜
    float f = 3.14f; int i = *(int*)&f; // ๋ฉ”๋ชจ๋ฆฌ ์žฌํ•ด์„, ๊ฒฐ๊ณผ ์˜ˆ์ธก ๋ถˆ๊ฐ€
  4. 0์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ
    int z = 10 / 0; // ์ˆ˜ํ•™ ์„ ์ƒ๋‹˜์ด ๊ธฐ์ ˆ

๐Ÿ›ก MISRA-C์˜ UB ๋ฐฉ์–ด ๊ทœ์น™: ํ•ต์‹ฌ ์นดํ…Œ๊ณ ๋ฆฌ

1. ๊ธฐ๋ณธ ๋ฌธ๋ฒ•(Syntax) ๊ทœ์น™

  • C ํ‘œ์ค€์—์„œ ํ—ˆ์šฉํ•˜์ง€๋งŒ ๋ฒ„๊ทธ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์€ ๊ตฌ๋ฌธ ์ œํ•œ

       ์˜ˆ: goto ์‚ฌ์šฉ ์ œํ•œ, ๋ณต์žกํ•œ ๋งคํฌ๋กœ ๊ธˆ์ง€

  • ํšจ๊ณผ: ์ฝ”๋“œ ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ & ๋””๋ฒ„๊น… ๋‚œ์ด๋„ ๊ฐ์†Œ

2. ํƒ€์ž… ์•ˆ์ „์„ฑ(Type Safety) ๊ทœ์น™

  • ์•”๋ฌต์  ํƒ€์ž… ๋ณ€ํ™˜ ๋Œ€์‹  ๋ช…์‹œ์  ์บ์ŠคํŒ… ์š”๊ตฌ
  • ์„œ๋กœ ๋‹ค๋ฅธ ํƒ€์ž… ๊ฐ„ ์—ฐ์‚ฐ ์ œํ•œ
  • ํšจ๊ณผ: ๋ฐ์ดํ„ฐ ํ•ด์„ ์˜ค๋ฅ˜ ๋ฐฉ์ง€ & ์ปดํŒŒ์ผ๋Ÿฌ ๊ฒฝ๊ณ  ๊ฐ์†Œ

3. ์ •์ˆ˜/์‚ฐ์ˆ  ์—ฐ์‚ฐ ๊ทœ์น™

  • ๋ถ€ํ˜ธ ์žˆ๋Š”/์—†๋Š” ์ •์ˆ˜ ํ˜ผํ•ฉ ์—ฐ์‚ฐ ์ฃผ์˜
  • ์˜ค๋ฒ„ํ”Œ๋กœ·์–ธ๋”ํ”Œ๋กœ ์˜ˆ๋ฐฉ
  • ํšจ๊ณผ: ์˜ˆ์ธก ๊ฐ€๋Šฅ์„ฑ ํ™•๋ณด, ํ”Œ๋žซํผ ์˜์กด์„ฑ ์ถ•์†Œ

4. ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ๊ทœ์น™

  • ๋ฐฐ์—ด ๋ฒ”์œ„ ์ดˆ๊ณผ ๊ธˆ์ง€
  • NULL ํฌ์ธํ„ฐ ์—ญ์ฐธ์กฐ ๋ฐฉ์ง€
  • ํšจ๊ณผ: ํฌ๋ž˜์‹œ·๋ฐ์ดํ„ฐ ์†์ƒ ์˜ˆ๋ฐฉ

๐Ÿ“Š ํ•œ๋ˆˆ์— ๋ณด๋Š” ๊ทœ์น™ ์š”์•ฝ

๊ทœ์น™ ์นดํ…Œ๊ณ ๋ฆฌ ์ฃผ์š” ์˜ˆ์‹œ ๋ชฉ์ 
๊ธฐ๋ณธ ๋ฌธ๋ฒ• goto ์ œํ•œ, ์œ„ํ—˜ํ•œ ๋งคํฌ๋กœ ๊ธˆ์ง€ ์ œ์–ด ํ๋ฆ„ ๋ช…ํ™•ํ™”
ํƒ€์ž… ์•ˆ์ „์„ฑ ๋ช…์‹œ์  ์บ์ŠคํŒ…, ํ˜ผํ•ฉ ์—ฐ์‚ฐ ์ œํ•œ ํƒ€์ž… ๋ณ€ํ™˜ ์•ˆ์ •์„ฑ
์ •์ˆ˜ ์—ฐ์‚ฐ ๋ถ€ํ˜ธ ํ˜ผํ•ฉ ์ฃผ์˜, ์˜ค๋ฒ„ํ”Œ๋กœ ๋ฐฉ์ง€ ์˜ˆ์ธก ๊ฐ€๋Šฅ์„ฑ
๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ๋ฒ”์œ„ ์ดˆ๊ณผ ์ ‘๊ทผ ๊ธˆ์ง€ ๋ฉ”๋ชจ๋ฆฌ ์•ˆ์ „์„ฑ

๐Ÿ’ก ์‹ค๋ฌด ์กฐ์–ธ

UB๋Š” “ํ…Œ์ŠคํŠธ์—์„œ ์•ˆ ํ„ฐ์ง€๋ฉด ๊ดœ์ฐฎ๋‹ค”๊ฐ€ ์ ˆ๋Œ€ ์•„๋‹™๋‹ˆ๋‹ค.
ํ•„๋“œ์—์„œ ์žฌํ˜„๋˜๋ฉด, ์ด๋ฏธ ๋Šฆ์—ˆ์ฃ .
MISRA-C ๊ทœ์น™์„ ์ง€ํ‚ค๋ฉด ์ •์  ๋ถ„์„ ๋„๊ตฌ๊ฐ€ ์‚ฌ์ „์— ์žก์•„์ค๋‹ˆ๋‹ค.
์ฆ‰, ์˜ˆ๋ฐฉ์ด ๊ณง ๋น„์šฉ ์ ˆ๊ฐ์ž…๋‹ˆ๋‹ค. ๐Ÿ’ฐ


๐Ÿ“ข ๋‹ค์Œ ํšŒ์ฐจ ์˜ˆ๊ณ 

4๊ฐ•: MISRA-C์—์„œ์˜ ์ œ์–ด ํ๋ฆ„๊ณผ ์กฐ๊ฑด๋ฌธ ๊ทœ์น™
if, switch, for… ๋‹จ์ˆœํ•œ ์ œ์–ด๋ฌธ์ด ์•ˆ์ „ ๊ทœ์น™์˜ ํ•ซ์ŠคํŒŸ?
๋‹ค์Œ ์‹œ๊ฐ„์—๋Š” ์•ˆ์ „ํ•œ ํ๋ฆ„ ์ œ์–ด์˜ ๋น„๋ฐ€๊ณผ
์กฐ๊ฑด๋ฌธ์—์„œ ๋น ์ง€๊ธฐ ์‰ฌ์šด ํ•จ์ •์„ ํ’€์–ด๋“œ๋ฆฝ๋‹ˆ๋‹ค!

๋ฐ˜์‘ํ˜•