(MISRA-C 5๊ฐ•) ํฌ์ธํ„ฐ ์‚ฌ์šฉ ์ œํ•œ๊ณผ ์•ˆ์ „ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ

๐Ÿš€ 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๊ฐ€ ๋ง‰์•„์ฃผ๋Š”์ง€ ์•Œ์•„๋ด…์‹œ๋‹ค! โœจ

๋ฐ˜์‘ํ˜•