(MISRA-C 6๊ฐ•) ์ „์ฒ˜๋ฆฌ๊ธฐ ์‚ฌ์šฉ ๊ทœ์น™๊ณผ ์ฝ”๋“œ ๊ฐ€๋…์„ฑ ํ™•๋ณด

๐Ÿ› ๏ธโœจ 6๊ฐ• : ์ „์ฒ˜๋ฆฌ๊ธฐ ์‚ฌ์šฉ ๊ทœ์น™๊ณผ ์ฝ”๋“œ ๊ฐ€๋…์„ฑ ํ™•๋ณด

์•ˆ๋…•ํ•˜์„ธ์š”! ์˜ค๋Š˜์€ C์–ธ์–ด ์ „์ฒ˜๋ฆฌ๊ธฐ(preprocessor) ์ด์•ผ๊ธฐ๋ฅผ ํ•ด๋ณผ ๊ฑฐ์˜ˆ์š”.
#define, #ifdef, #include ๊ฐ™์€ ์ „์ฒ˜๋ฆฌ๊ธฐ๋“ค์€ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๊ฐ•๋ ฅํ•œ ๋ฌด๊ธฐ๋ฅผ ์ œ๊ณตํ•˜์ง€๋งŒ,

์ž˜๋ชป ์“ฐ๋ฉด ๊ฐ€๋…์„ฑ ์ €ํ•˜์™€ ์œ ์ง€๋ณด์ˆ˜ ์ง€์˜ฅ ๐Ÿ”ฅ์œผ๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค.
MISRA-C๋Š” ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ „์ฒ˜๋ฆฌ๊ธฐ ์‚ฌ์šฉ ๊ทœ์น™์„ ๋ช…ํ™•ํžˆ ์ œ์‹œํ•˜๊ณ  ์žˆ์–ด์š”. ๐Ÿšฆ


1. #define์˜ ์ œํ•œ์  ์‚ฌ์šฉ ๐Ÿ“Œ

#define์€ ์ƒ์ˆ˜ ์ •์˜, ๋งคํฌ๋กœ ํ•จ์ˆ˜ ๋“ฑ์— ๋งŽ์ด ์“ฐ์ด์ฃ .
ํ•˜์ง€๋งŒ MISRA-C์—์„œ๋Š” ์˜ค๋‚จ์šฉ ๊ธˆ์ง€! ๐Ÿšซ

#define PI 3.14   // ๐Ÿšซ ๋งค์ง ๋„˜๋ฒ„๋ฅผ ์ˆจ๊ฒจ๋ฒ„๋ฆผ (ํƒ€์ž…๋„ ์—†์Œ)

๐Ÿ‘‰ ๋Œ€์•ˆ: const ํ˜น์€ enum ์‚ฌ์šฉ

const float PI = 3.14f;   // โœ… ํƒ€์ž…์ด ๋ช…ํ™•ํ•˜๊ณ  ์•ˆ์ „

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํƒ€์ž… ์•ˆ์ •์„ฑ๊ณผ ๋””๋ฒ„๊น… ํŽธ์˜์„ฑ์ด ํ™• ์˜ฌ๋ผ๊ฐ‘๋‹ˆ๋‹ค. ๐Ÿš€


2. ๋งค์ง ๋„˜๋ฒ„(Magic Number) ํšŒํ”ผ ๐ŸŽฉโœจ

์ฝ”๋“œ ์ค‘๊ฐ„์— ๋œฌ๊ธˆ์—†์ด ์ˆซ์ž๊ฐ€ ๋“ฑ์žฅํ•˜๋ฉด… ๊ทธ๊ฑด ๋ฐ”๋กœ ๋งค์ง ๋„˜๋ฒ„! ๐Ÿง™‍โ™‚๏ธ
MISRA-C์—์„œ๋Š” ๊ฐ€๋…์„ฑ์„ ์œ„ํ•ด ๋งค์ง ๋„˜๋ฒ„ ์‚ฌ์šฉ์„ ๊ฐ•๋ ฅํžˆ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.

speed = speed * 60 / 3600;   // ๐Ÿšซ 60๊ณผ 3600์€ ์˜๋ฏธ ๋ถˆ๋ช…

๐Ÿ‘‰ ๋Œ€์•ˆ: ์˜๋ฏธ ์žˆ๋Š” ์ด๋ฆ„์„ ๊ฐ€์ง„ ์ƒ์ˆ˜๋กœ ๋Œ€์ฒด

const int SECONDS_PER_MINUTE = 60;
const int SECONDS_PER_HOUR = 3600;
speed = speed * SECONDS_PER_MINUTE / SECONDS_PER_HOUR;   // โœ… ์ฝ๊ธฐ ์‰ฌ์›€

3. ์กฐ๊ฑด๋ถ€ ์ปดํŒŒ์ผ ์ตœ์†Œํ™” โš–๏ธ

#ifdef, #ifndef, #else ๊ฐ™์€ ์กฐ๊ฑด๋ถ€ ์ปดํŒŒ์ผ์€ ํ”Œ๋žซํผ๋ณ„ ์ฐจ์ด๋ฅผ ๋ฐ˜์˜ํ•  ๋•Œ ์ž์ฃผ ์“ฐ์ด์ง€๋งŒ, ๋‚จ๋ฐœํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ์ฝ๊ธฐ ์–ด๋ ค์šด ๋ฏธ๋กœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๐ŸŒ€

#ifdef DEBUG
    printf("Debug mode\n");
#else
    run_normal_mode();
#endif

๐Ÿ‘‰ MISRA-C ๊ถŒ์žฅ ์‚ฌํ•ญ:

  • ์กฐ๊ฑด๋ถ€ ์ปดํŒŒ์ผ์€ ๊ผญ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉ
  • ๊ฐ€๋Šฅํ•˜๋ฉด ์ถ”์ƒํ™” ๊ณ„์ธต(Abstraction Layer)์œผ๋กœ ๋Œ€์ฒด
  • #ifdef ์ค‘์ฒฉ ์‚ฌ์šฉ ๊ธˆ์ง€

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ํ•œ๊ฒฐ ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค. ๐Ÿ˜Ž


์˜ค๋Š˜์˜ ์ •๋ฆฌ ๐Ÿ“š

  • #define ๋Œ€์‹  const, enum, inline ์ ๊ทน ํ™œ์šฉ
  • ๋งค์ง ๋„˜๋ฒ„ โŒ → ์˜๋ฏธ ์žˆ๋Š” ์ƒ์ˆ˜ โœ…
  • ์กฐ๊ฑด๋ถ€ ์ปดํŒŒ์ผ์€ ๊ผญ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ, ๊ฐ„๊ฒฐํ•˜๊ฒŒ!

์ „์ฒ˜๋ฆฌ๊ธฐ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ๋‹ค๋ฃจ๋ฉด ์ฝ”๋“œ ๊ฐ€๋…์„ฑ๊ณผ ์•ˆ์ „์„ฑ์ด ํ™•์‹คํžˆ ์˜ฌ๋ผ๊ฐ‘๋‹ˆ๋‹ค. ๐Ÿš€


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

๐Ÿ‘‰ ๋ณ€์ˆ˜ ์„ ์–ธ๊ณผ ์Šค์ฝ”ํ”„ ์ œํ•œ ๊ทœ์น™
"๋ณ€์ˆ˜๋Š” ํ•„์š”ํ•œ ์ˆœ๊ฐ„์—๋งŒ, ์ตœ์†Œํ•œ์˜ ๋ฒ”์œ„์—์„œ!" MISRA-C์˜ ๋ณ€์ˆ˜ ์ฒ ํ•™์„ ํ•จ๊ป˜ ์•Œ์•„๋ด…์‹œ๋‹ค.

๋ฐ˜์‘ํ˜•