ν‹°μŠ€ν† λ¦¬ λ·°

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
λ°˜μ‘ν˜•

'πŸ™‹β€β™‚οΈ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ > 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
λŒ“κΈ€
κΈ€ 보관함
μ΅œκ·Όμ— 올라온 κΈ€
μ΅œκ·Όμ— 달린 λŒ“κΈ€