ํฐ์คํ ๋ฆฌ ๋ทฐ
๋ ํ ํผ์ ์ ํ๊ฒฝ ๊ฐ์ฌ๋์ Secure & Generic C ๊ฐ์๋ฅผ ๋ฃ๊ณ , ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค.
ํด๋น ๋ด์ฉ์ ์ ์๊ถ์ ์ ํ๊ฒฝ ๊ฐ์ฌ๋์๊ฒ ์์ต๋๋ค.
Constant
C์ธ์ด์์ ์์๋ macro
, const
, enum
์ผ๋ก ๋ํ๋ผ ์ ์๋ค. ์ด ์ญ์ ์ ์ ํ ์ฌ์ฉํ์ง ์์ผ๋ฉด ํธ์์ฑ์ ์ป์ง๋ง ์ค๋ฒํค๋๋ฅผ ๋ฐ์์ํค๊ฑฐ๋, ์์น ์๋ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค์ด ๋ผ ์ ์๋ค.
๋ง์ฝ, const int size = 3
์ ์ฌ๊ท ํจ์ ๋ด์ ์ ์ธํ๋ฉด ์ด๋จ๊น? ํจ์๊ฐ ํธ์ถ ๋ ๋๋ง๋ค const๊ฐ ์ ์ธ๋๊ณ ํด์ ๋๋ฏ๋ก ์ค๋ธํค๋๊ฐ ๋๊ฒ ๋๋ค. ๋ํ switch
์์๋ const
๋ฅผ ์ฌ์ฉํ ์ ์๋ค๊ณ ๋ฐฐ์ด์์์ ๊ฐ์(index)๋ก๋ ์ฌ์ฉํ ์ ์๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ enum
์ ํตํด ์์๋ฅผ ์ ์ธํ์ฌ์ผ ํ๋ค.
๋ช ์์ ๊ด๊ณ ์ ์ธ
enum {GO_TO_WORK=9, OUT_TO_WORK=18}
์์ ๊ฐ์ด ์ถํด๊ทผ ์๊ฐ์ ์ ์ธํ๋ฉด ์ถ๊ทผ์ 9์, ํด๊ทผ์ 18์๋ผ๋ ๊ฒ์ ์ ์ ์๋ค. ํ์ง๋ง ๋ ์ฌ์ด์ ์๊ด๊ด๊ณ๊ฐ ์๋ค๋ฉด ๋ณด๋ค ์ง๊ด์ ์ผ๋ก ์ ์ธํ ์ ๋ ์๋ค.
enum {GO_TO_WORK=9, OUT_TO_WORK=GO_TO_WORK + 9}
static์ ํจ์ ๋ฐ ์ ๊ทผ
๋ณดํต ํจ์ ๋ด๋ถ์ static ๋ณ์๋ฅผ ์ ์ธํ๋ฉด ํจ์ ๋ฐ์์ ์ ๊ทผ์ ๋์ง ์๋๋ค๊ณ ์ ์ธํ๊ฒ ๋๋ค. ํ์ง๋ง ์๋์ ์์๋ฅผ ๋ณด๊ฒ ๋๋ค๋ฉด, ๊ฐ๋ฅํ ์ ์๋ค๋ ๋ฐ๋ก๋ฅผ ๋ณด์ฌ์ฃผ๊ฒ ๋๋ค.
#include <stdio.h>
#include <string.h>
int ary[5] = { 10, 20, 30, 40, 50 };
void sub()
{
static int snum = 3;
snum++;
}
int main()
{
// array๋ 4๊น์ง ์์ง๋ง, ์ฃผ์๋ฅผ ํตํด snum์ ์ ๊ทผํ์ฌ ์ ๊ทผ์ ๋ง์ ์ ์๋ค.
ary[5]++;
// ์ ์ ํด์์๋ (*(arr + 5))๋ ์ก์ง ๋ชปํจ, array๊ฐ 5์ธ๋ฐ 5๊ฐ ๋ค์ด๊ฐ๋ฉด ์ก์.
sub();
ary[5]++;
sub();
getchar();
return 0;
}
/*
์์ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋น๋๊ฒ ๋๋ค.
| 10 | 20 | 30 | 40 | 50 | 3 |
*/
๋ณดํต global variable
๊ณผ static variable
์ ๊ฐ์ ์์ญ์ ํ ๋น ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ์ด๋ฅผ ์ด์ฉํ๊ฒ ๋๋ค๋ฉด, ํจ์ ๋ฐ์์๋ ์ ๊ทผ์ด ๊ฐ๋ฅํ๊ฒ ๋๋ค. ์์ ์ฝ๋์์ array๋ 4๊น์ง ์์ง๋ง 5๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด snum
์ด ์๋ ์ฃผ์๋ฅผ ์ฐธ์กฐํ์ฌ ๊ฐ์ ์ฆ๊ฐ ์ํฌ ์ ์๋ค.
'๐โโ๏ธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด > C' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
C: Generic Coding (0) | 2020.11.18 |
---|---|
C: ๋ค์ํ ํฌ์ธํฐ (0) | 2020.11.17 |
C: ์ ์์ ๋ฒ์ (0) | 2020.11.16 |
C: ํํ์ (0) | 2020.11.14 |
C: ๋งคํฌ๋ก์ ํ์ฉ (0) | 2020.11.14 |