ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

728x90
๋ฐ˜์‘ํ˜•
๋ ‰ํ† ํ”ผ์•„ ์ •ํ˜œ๊ฒฝ ๊ฐ•์‚ฌ๋‹˜์˜ 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์ด ์žˆ๋Š” ์ฃผ์†Œ๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ๊ฐ’์„ ์ฆ๊ฐ€ ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. 

728x90
๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€
๊ธ€ ๋ณด๊ด€ํ•จ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€