'C์ธ์ด๋ก ์ด๋ฐ๊ฒ ๊ฐ๋ฅํ๊ฐ?' ๋ผ๋ ์๊ฐ์ด ๋๋ ๋๋ถ๋ถ์ ์ฌ๋๋ค์ด ๋ํ ๊ต์ก๊ณผ์ ์์ ๋ฐฐ์ฐ์ง ์์ ๋ถ๋ถ๋ค์ ํ๊ต์์ ์๋ ค์ฃผ์ง ์๋ C์ธ์ด
์๋ฆฌ์ฆ์์ ๋ค๋ฃจ๋ ค๊ณ ํ๋ค.
๋๋ถ๋ถ์ ํ๊ต์ปค๋ฆฌํ๋ผ์ C์ธ์ด ๊ณผ๋ชฉ์์ ๋ฐ๋ณต๋ฌธ ๋ฐฐ์ด ํฌ์ธํฐ ๋ฑ์ ๋ฐฐ์ฐ๊ณ ๋ง์ง๋ง์ ๊ตฌ์กฐ์ฒด, ํจ์ํฌ์ธํฐ, ๋์ ํ ๋น ๋ฑ์ ๋ฐฐ์ฐ๊ฒ๋๋ค. ์ํ์ฑ ๋ณผ๋๋ ๋งจ์์์๋ ์งํฉ์ ๋ค๋ค ์ด์ฌํ๋ณด๊ณ ๋ง์ง๋ง์ฑํฐ๊ฐ ๋ญ์ง๋ ๊น๋จน๋ฏ์ด ๋ฐ๋ณต๋ฌธ ๋ฐฐ์ด์ ๋ค๋ค ์ ์๋๋ฐ ๋ง์ง๋ง์ ๋ฐฐ์ด ๊ตฌ์กฐ์ฒด๋ ํจ์ํฌ์ธํฐ ๋์ ํ ๋น์ ๊ธฐ์ต์ด ์๋๋ ํ์์ด ๋ฐ์ํ๋ค.
๊ทธ๋์ ์ฐ์ ๋๋ถ๋ถ์ ์ฌ๋๋ค์ ๊ธฐ์ต์์ ๋ง์ด ์ํ์ง ๊ตฌ์กฐ์ฒด, ํจ์ํฌ์ธํฐ, ๋์ ํ ๋น๋ฑ์ ๊ฐ๋ ์ ๋ค์ ๋์ง์ด๋ณด๊ณ ๋ ๋์๊ฐ์ C์ธ์ด์์ ๊ฐ์ฒด์งํฅ ์ ์ฉํ๋๋ฒ์ ์๊ฐํ๋ฉด์ ์ฌ๋ฌ๊ฐ์ง C์ธ์ด ํ ํฌ๋๋ค์ ๋ํด ์์๋ณผ๊ฒ์ด๋ค.
๋ฐ๋ผ์ ์์ผ๋ก ๊ตฌ์ฑ๋ ๋ชฉ์ฐจ๋ ๋ค์๊ณผ ๊ฐ๋ค
๐จ๐ปโ๐ซ C์ธ์ด ๋ฆฌ๋ง์ธ๋
๐งธ ๊ฐ์ฒด์งํฅ C์ธ์ด (A์ฌ์ Objective-C๊ฐ ์๋๋๋ค)
๐งช TDD C
๊ทธ์ค์์๋ C์ธ์ด ๋ฆฌ๋ง์ธ๋ํธ์ ๋ค๋ฃฐ ๋ด์ฉ์ด ๋ง์ง ์์ผ๋ ๋ณธ ํฌ์คํธ์์ ๋ค๋ฃจ๊ฒ ๋ค.
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ด๋ค ์๋ฃํ์ ์ํ ์ง ์ ๋ถ ์์์ ์ ๊ณตํ ์ ์๊ธฐ ๋๋ฌธ์ ์ต์ํ์ ์์์๋ฃํ
๋ง ์ ๊ณตํด์ฃผ๊ณ ๋ณ๋๋ก ์ํ๋ ์๋ฃํ์ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ง์ ๋ง๋ค์์๊ฒ ์ง์์ ํด์ค๋ค. C์ธ์ด์์๋ ์ด๋ฅผ ๊ตฌ์กฐ์ฒด๋ฅผ ํตํด์ ๊ฐ๋ฅํ๊ฒํ๋ค. ์๋ ์๋ฌด๋ฆฌ๊ทธ๋๋ ์คํ๋ ์ ๊ณต ์ํ๋๊ฑด ๋๋ฌดํ๊ฑฐ ์๋๋๊ณ
์๋ฅผ๋ค์ด์ ํ์์ ์ ๋ณด๋ฅผ ๋ด๋ ์๋ฃํ์ ๋ง๋ ๋ค๊ณ ํ์.
struct student {
char *name; // ํ์ ์ด๋ฆ
char *major; // ์ ๊ณต
float gpa; // A.K.A ํ์
};
name๊ณผ major๊ฐ 1์๋, gpa๊ฐ 4๋ฐ์ดํธ(float ํฌ๊ธฐ)์ ๊ณต๊ฐ์ ์ฐจ์งํ๋ ๊ตฌ์กฐ์ฒด๊ฐ ์์ฑ๋์๋ค.
1์๋๋ ๋ช๋นํธ ์ด์์ฒด์ ๋์ ๋ฐ๋ผ์ ๋ฌ๋ผ์ง๋ค. 64๋นํธ ์ด์์ฒด์ ์์๋ 1์๋๊ฐ 64๋นํธ๊ณ 32๋นํธ ์ด์์ฒด์ ์์๋ 32๋นํธ์ด๋ค. ํ์ ์ ์๊ด์์ด ๋ชจ๋ ํฌ์ธํฐ๋ 1์๋์ ๊ณ ์ ๋ ํฌ๊ธฐ๋ฅผ ๊ฐ๋๋ค. ๋ค์๋งํด
void*
์int*
,char*
๋ ๋ชจ๋ ๊ฐ์ 1์๋์ ๊ณต๊ฐ์ ๊ฐ๋๋ค.
๋ณธ ํฌ์คํธ์์๋ ํธ์์ 1์๋๋ฅผ 64๋นํธ(8๋ฐ์ดํธ)๋ก ๊ฐ์ ํ๋ค.
๐๐ปโโ๏ธ FYI: ๊ตฌ์กฐ์ฒด์์ ๋ณ์๋ค์ ์ฐ์๋ ๊ณต๊ฐ์ ๊ฐ๊ฒ๋๋๋ฐ ๊ฐ๋ ์ปดํจํฐ ๊ตฌ์กฐ์์ ๋ฌธ์ ๋ก padding์ด ๋ณ์๋ค ์ฌ์ด ํน์ ์๋ค์ ๋ค์ด๊ฐ๊ธฐ๋ ํ๋ค.
struct student๊ฐ์ ๊ฒฝ์ฐ์๋ 8๋ฐ์ดํธ + 8๋ฐ์ดํธ + 4๋ฐ์ดํธ๋ก 20๋ฐ์ดํธ์ ํฌ๊ธฐ์ผ๊ฒ๊ฐ์ง๋ง ๋๋ถ๋ถ์ ์ปดํ์ผ๋ฌ๋ 64๋นํธ ์ด์์ฒด์ ์์ ๋น ๋ฅด๊ฒ ๋์๊ฐ๋๋ก padding์ 4๋ฐ์ดํธ ๋ถ์ฌ์ 24๋ฐ์ดํธ๋ก ๊ตฌ์กฐ์ฒด๋ฅผ ๋ง๋ ๋ค. (๊ด๋ จ ๊ณผ๋ชฉ: ์ปดํจํฐ ๊ตฌ์กฐ, ์์คํ ํ๋ก๊ทธ๋๋ฐ)
struct student { ... };
๋ก ์ ์ํ ๊ตฌ์กฐ์ฒด๋ struct student ๋ณ์๋ช
;
์ผ๋ก ์ ์ธํด์ ์ฌ์ฉํ ์ ์๋ค.
struct student t = { // student's t-distribution
"William Sealy Gosset",
"statistics",
4.5,
};
์ด๋ ๊ฒ ์ ์ธํ๋ฉด { }
์์์๋ ๋ด์ฉ๋ค์ด ์์๋๋ก name, major, gpa ์ ํ๋์ฉ ๋ค์ด๊ฐ๊ฒ ๋๋ค. ๋ ๋ช
์์ ์ผ๋ก ์ด๊ธฐํํ๋ ๋ฐฉ๋ฒ์ .
์ผ๋ก ๊ฐ ํ๋๋ฅผ ์ง์ ํด์ฃผ๋ ๊ฒ์ด๋ค.
struct student t = {
.major = "statistics",
.name = "William Sealy Gosset",
.gpa = 4.5,
};
.
์ผ๋ก ํ๋๋ฅผ ์ง์ ํด์ฃผ๋ฉด ์์๋ฅผ ๋ฐ๊ฟ์ ์ง์ด๋ฃ์ ์ ์๊ณ , ๋ ๋ช ์์ ์ผ๋ก ๋ํ๋๋ค.
๋ชจ๋ํด๋ณด์ด๋๋ฐ ์๊ฐ๋ณด๋ค ์ค๋๋ C์ธ์ด ๋ฌธ๋ฒ์ด๋ค. c9x (199x๋ ) ๋ถํฐ ์ง์๋๋ ๋ฌธ๋ฒ.
๐ฎ๐ปโโ๏ธ TMI:
.
ํ๊ธฐ๋ฒ์ ์ ์ ๋ช ์นญ์designated initializer
์ด๋ค
.
ํ๊ธฐ๋ฒ์ ์กด์ฌ์์ฒด๋ฅผ ๋ฐฐ์ฐ์ง ์์๊ฑฐ๋ ๊ตฌ์กฐ์ฒด ๋ณ์์ ์ด๊ธฐํ์์๋ง ์ฌ์ฉ๊ฐ๋ฅํ๊ฒ ๊น์ง๋ง ๋ฐฐ์ด์ฌ๋์ด ๋ง์ํ
๋ฐ ์ ๋ง ๋๋๊ฒ๋ ์ต๋ช
๊ตฌ์กฐ์ฒด
๋ ๊ฐ๋ฅํ๋ค. ์ฌ์ง์ด c11 (2011๋
)๋ฟ ์๋๋ผ c99 (1999๋
)์์๋ ๋๋ค.
void print_student(struct student t) {
puts(t.name);
puts(t.major);
printf("%d\n", t.gpa);
}
print_student((struct student){
.major = "cse",
.name = "gomjellie",
.gpa = 3.6,
});
๐ฎ๐ปโโ๏ธ TMI:
์ต๋ช ๊ตฌ์กฐ์ฒด
๋compound literal
์ด๋ผ๊ณ ํ๋ค. c99(1999๋ )๋ถํฐ ์ง์๋๋ค.
ํจ์ํฌ์ธํฐ๋ void *
์ ๋๋ถ์ด C์ธ์ด์ ์ ์ฐ์ฑ์ ๋ง๋ค์ด์ฃผ๋ C์ธ์ด์ ๊ฝ๊ฐ์ ์กด์ฌ์ด๋ค.
์ ์ธ๋ฐฉ์์ด ์ข ํน์ดํ๋ฐ ๋ฐํํ
(*ํจ์ํฌ์ธํฐ ๋ณ์๋ช
)
(์ธ์)
์์๋ก ์ด๋ค.
๋ฐํํ์ด ์๊ณ ์ธ์๋ก int* ๋ฅผ ๋๊ฐ ๊ฐ๋ ํจ์ ํฌ์ธํฐ *fp
์ ์ ์ธ ์์
void (*fp) (int*, int*); // *fp: function pointer
1ํ๋ ๋ ์์ ์ ๋์ด์ผ๋ณด๋ฉด ํจ์ํฌ์ธํฐ๊ฐ ์ด๋ป๊ฒ ์๊ฒผ๋์ง ์ด๋ป๊ฒ ๋์ ํ๊ณ ๋๊ฒจ์ฃผ๋์ง๋ ์๋ ค์ฃผ๋๋ฐ ์ ํ์ํ๊ฑด์ง๋ ์๋ ค์ฃผ์ง ์๋๋ค. ํจ์ํฌ์ธํฐ๋ ์ ํ์ํ ๊น?
ํจ์ํฌ์ธํฐ์ ๋ํ ํ์์ฑ์ ๊ณ ์ ๋ช ์ ์ด๋ฆฐ์์์์ ์ฐพ์๋ณผ ์ ์๋ค.
C์ธ์ด ํ์ฑ ๊ทผ์ฒ๋ฅผ ์ฌํํ๋ ๋๋ ์ด๋ ๋ ์ฌ๋ง์์ ๋ฌธ๋ ๋นํ๊ธฐ ๊ณ ์ฅ์ ๋ง์ฃผํ๊ฒ ๋์๋ค.
๋นํ๊ธฐ ์์ง์ ์ด๋๊ฐ๊ฐ ํ์๋ ๊ฒ์ด๋ค. ์ ๋น์ฌ๋ ์น๊ฐ๋ ์์ด ํผ์์์ผ๋ฏ๋ก ๋๋ ๊ทธ ์ด๋ ค์ด ์๋ฆฌ๋ฅผ ์์ ํด๋ณด๊ฒ ๋ค๊ณ ๋ง์๋จน์๋ค.
๋ด๊ฒ ์์ด์ ๊ทธ๊ฒ์ ์ฃฝ๋๋ ์ฌ๋๋์ ๋ฌธ์ ์๋ค. ๋ง์ค ๋ฌผ์ด ์ผ์ฃผ์ผ๋ถ๋ฐ์ ๋จ์ ์์ง ์์๋ ๊ฒ์ด๋ค.
์ฒซ๋ ๋ฐค, ๋๋ ์ฌ๋์ด ์ฌ๋ ๊ณณ์์ ์๋ง ๋ฆฌ ๋จ์ด์ง ์ฌ๋ง์์ ์ ์ด ๋ค์๋ค. ๋๋์ ๋ฐ๋ค ํ๊ฐ์ด๋ฐ์์ ๋๋ชฉ์ ํ๊ณ ํ๋ฅํ๋ ๋ํ์๋ณด๋ค๋ ํจ์ฌ ๋ ๊ณ ๋ฆฝ๋ ์ ์ธ์๋ค.
๊ทธ๋ฌ๋ ํด๊ฐ ๋ฐ ๋ฌด๋ ต, ์ด๋ค ๊ธฐ์ดํ ๋ชฉ์๋ฆฌ์ ์ ์ด ๊นฌ ๋ด๊ฐ ์ผ๋ง๋ ๋๋์์ง ์ฌ๋ฌ๋ถ์ ์์ํ ์ ์์ ๊ฒ์ด๋ค. ๊ทธ ๋ชฉ์๋ฆฌ๋ ๋งํ๋ค.
๐๐ฝ : ์ ๊ธฐ.... ์ํธ ํจ์ ํ๋๋ง ์ง์ค
๐ง : ์?
๐๐ฝ : ๋, ์ํธ ํจ์ ํ๋๋ง ์ง์ค
"์๋ ๋ด๊ฐ ์ปด๊ณต์ธ๊ฑธ ์ด๋ป๊ฒ ์์์ง? ๋ด๊ฐ ๊ทธ๋ ๊ฒ ์ปด๊ณต์ฒ๋ผ ์๊ฒผ๋? ์ญ์ ์ฒดํฌ๋จ๋ฐฉ์ด ๋ฌธ์ ์ธ๊ฑด๊ฐ?" ๋ฐ์์ ์๊ฐ์ด ๋๋ฆฌ๋ฅผ ์ค์น ์๋ ์์ด ๋นํฉํ ๋ด ์
์์๋ ์๊ฒ ๋ค๋ ๋ง์ด ๋จผ์ ๋์จ๋ค. ๋๋ฌด๋ ๊ฐ์๊ธฐ ๋๋ผ์ด ์ผ์ ๋นํ๊ฒ ๋๋ฉด ๊ฐํ ๊ฑฐ์ญํ ์๊ฐ์ ๋ชป ํ๋ ๋ฒ์ด๋ค.
์กฐ์์ ๊ฐ๋ฐฉ์์ ๋งฅ๋ถ์ ๊บผ๋ด ๋๋ ๊ฐ๋จํ ๋ฒ๋ธ์ํธ ํจ์๋ฅผ ์ฝ๋ฉํด์ ๋ณด์ฌ์ค๋ค.
#define SWAP(x, y) do { typeof(x) SWAP = x; x = y; y = SWAP; } while (0)
void sort(int arr[], size_t len) {
for (size_t i = 0; i < len; i++) {
for (size_t j = i + 1; j < len; j++) {
if (arr[i] > arr[j])
SWAP(arr[i], arr[j]);
}
}
}
๐คฆ๐ฝ: ์๋, ์๋! ์ด sortํจ์๋ ์ ์ํ ํ์ ๋ฐ์ ๋ชป์ฐ์์. intํ์ ๋๋ฌด ๊ฑฐ์ถ์ฅ์ค๋ฌ์. ๋๋ doubleํ ํ์ ๋ฐฐ์ด์ ์ ๋ ฌํ ๊บผ์ผ. ๋, sort ํจ์ ํ๋๋ง ์ง์ค.
ใ ใ ในใ ? ์ง์๋งํ๋๊ฐ
๊ท์ฐฎ์ง๋ง ํจ์๋ฅผ ๋ณต๋ถํด์ ์ฝ๊ฐ ์์ ํ๋ฉด ๋๊ธฐ๋๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ด sort_double()
ํจ์๋ฅผ ์ถ๊ฐํด์ ๋ณด์ฌ์ค๋ค.
void sort_double(double arr[], size_t len) {
for (size_t i = 0; i < len; i++) {
for (size_t j = i + 1; j < len; j++) {
if (arr[i] > arr[j])
SWAP(arr[i], arr[j]);
}
}
}
๐ ๐ฝ: ์ ๋ผ! float ํ์ ์ง์์ด ์๋๋๊ฑธ? ๋ค๋ฅธ sortํจ์๋ฅผ ๋ง๋ค์ด์ค.
๊ทธ๋์ ๋๋ ๋๋ค์ sort_float()
ํจ์๋ฅผ ์ถ๊ฐํด์ ๋ณด์ฌ์คฌ๋ค. ๊ทธ๋ฌ๋ ์์ ๊ฒ๋ค๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ํด์ง๋ฅผ ๋ง์๋ค.
์์ง์ ๋ถํดํ๋ ์ผ์ด ๊ธํ๊ธฐ์ ๋๋ ์๋ฌด๋ ๊ฒ๋ ๋ค์๊ณผ ๊ฐ์ ํจ์๋ฅผ ๋ผ์ ๊ฑฐ๋ ค๋๊ณ ๋ ๊ทธ์๊ฒ ํ๋ง๋๋ฅผ ํญ ๋์ ธ๋ณด์๋ค.
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
void sort(void *arr, size_t len, size_t ts, bool (*cmp) (void *a, void *b)) { // ts: type_size
void *tmp = malloc(ts);
for (size_t i = 0; i < len; i++) {
for (size_t j = i + 1; j < len; j++) {
if (!cmp((char *)arr + i * ts, (char *)arr + j * ts)) continue;
memcpy(tmp, (char *)arr + j * ts, ts);
memcpy((char *)arr + j * ts, (char *)arr + i * ts, ts);
memcpy((char *)arr + i * ts, tmp, ts);
}
}
free(tmp);
}
๐ง ์ด๊ฑด genericํ sort์ผ ๋ค๊ฐ ์ํ๋ ํ์ ์ง์์ ํจ์ํฌ์ธํฐ *cmp์์ ์์ด.
๐๐ฝ ๋ด๊ฐ ์ํ๋๊ฒ ๋ฐ๋ก ์ด๊ฑฐ์ผ!
์ด๋ ๊ฒ ๋๋ ์ด ์ด๋ฆฐ์์๋ฅผ ์๊ฒ ๋์๋ค.
๋ง์ฝ ํจ์ํฌ์ธํฐ
๊ฐ๋
์ ์์งํ์ง ๋ชปํ๋ค๋ฉด ์ด๋ฆฐ์์๋ฅผ ๋ง์กฑ์ํค์ง ๋ชปํ์ ๊ฒ์ด๊ณ ๋ ๋ ํ ์์ ์ฌ๋ฒ ์ธ๋งฅ์ ์ป์ง ๋ชปํ์ ๊ฒ์ด๋ค.
malloc
์ ๋ง๋ก์ด ์๋๋ผm-alloc
์ผ๋ก ์ฝ์ต๋๋ค.
malloc()
ํจ์๋ ์ ํ์ํ ๊น?๋ฐฐ์ด์ ์ ์ธ์ ๊ณ ์ ๋ ์ฌ์ด์ฆ๋ก๋ง ๊ฐ๋ฅํด์
int len;
scanf("%d", &len);
int dynamic_array[len];
์์ ์ฝ๋๊ฐ ๋์ํ์ง ์๊ธฐ ๋๋ฌธ์ dynamic_array
๋ฅผ ์๋์ ์ฝ๋์ฒ๋ผ malloc()
ํจ์๋ฅผ ํตํด์ ๊ณต๊ฐ์ ๋ง๋ ๋ค๊ณ ๋ฐฐ์ด ์ฌ๋์ด ๋ง์ ๊ฒ์ด๋ค.
int *dynamic_array = malloc(sizeof(int) * len);
๋ฐ์ ๋ง๊ณ ๋ฐ์ ํ๋ฆฐ ์ด์ ๋ค.
c์ธ์ด๋ VLA(variable length array)
๋ผ๊ณ ๋ถ๋ฆฌ๋ ๊ฐ๋ณ๊ธธ์ด ๋ฐฐ์ด์ ์ง์ํ๋ค. ๋ฐ๋ผ์ dynamic_array[len]
์ ์ ๋์ํ๋ ์ปดํ์ผ๋ฌ๊ฐ ๋ง๋ค. (๋น์ฃผ์ผ์คํ๋์ค ๊บผ๋ผ)
๐ฎ๐ปโโ๏ธ TMI: VLA๋ C99์์ ํ์๊ตฌํ, C11์์ ์ปดํ์ผ๋ฌ์ ๋ฐ๋ผ์ ๊ตฌํ๋์ง ์์์ ์๋ ์๋ค.
๊ทธ๋ ๋ค๋ฉด malloc()
์ด ํ์ํ ์ ํํ ์ด์ ๋ ๋ฌด์์ผ๊น?
malloc()
์ด ํ์ํ ์ด์ ๋lifetime
์ ์ปจํธ๋กค ํ ์ ์๋ ๊ณต๊ฐ์ ๊ฐ๊ธฐ ์ํด์์ด๋ค.
ํ๊ต ์์
์ ์ด์ฌํ ๋ค์ ์ฌ๋์ด๋ผ๋ฉด malloc
์ผ๋ก ํ ๋น๋ ๊ณต๊ฐ๊ณผ ํจ์๋ด๋ถ์ ์ง์ญ๋ณ์๊ฐ ํ ๋น๋ ๊ณต๊ฐ์ด heap
๊ณผ stack
์ผ๋ก ๋ค๋ฅด๋ค๋ ๊ฒ์ ์๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ ์ด๋ ๋ํ์ ์ด C์ธ์ด ์คํ์ ๋ํ ์ค๊ฐ๋
์ด๋ค.
์ ๋ง ๋๋๊ฒ๋ C์ธ์ด ์์ฒด์๋ ์คํ๊ณผ ํ ๊ฐ๋
์ด ํฌํจ๋์ด ์์ง ์๋ค. C11์ Final Draft์ธ n1570์๋ stack
๊ณผ heap
๋ผ๋ ๋จ์ด ์์ฒด๊ฐ ์์ ๋์ค์ง ์๋๋ค. ๋น์ฐํ, ์ง์ญ๋ณ์๋ stack์, malloc์ ๊ฒฐ๊ณผ๊ฐ์ heap์ ์์นํ๋ค
๋ผ๋ ๋๋ฆฌ ์๋ ค์ง ๊ท์น ๋ํ ์กด์ฌํ์ง ์๋๋ค.
C์ธ์ด๋ ์ฌ์ง์ด ํจ์ ํธ์ถ์ ๋ฐ๋์ stack์ ํตํด ๊ตฌํํ๊ธฐ๋ฅผ ์๊ตฌํ์ง ์๋๋ค. ์คํ๊ณผ ํ์ ์ฌ์ฉํ๋์ง ์ฌ๋ถ๋ C์ธ์ด์์ ์๊ตฌํ๋ ๊ฒ์ด ์๋๋ฉฐ CPU์ OS์ ํน์ฑ์ ๋ฐ๋ผ ๊ฒฐ์ ๋๋ค. ์์ธํ ๋ด์ฉ์ ๊บผ๋ฌด์ํค ์ฐธ์กฐ
๋ค์ํฌ์คํธ C์ ๊ฐ์ฒด๋ก ์ด์ด์ง๋๋ค.
๋ฐ์
ํ๋) ๊น์ค์ฒ ์ ๋๊ธ ์ฌ๋ฐ๊ฒ ์ ์ฝ์์ต๋๋ค. ( 0 v 0) b ๋๋ฅ!
์ ๋ ์์ฆ C๋ฅผ ๊ณต๋ถํ๊ณ ์๋ ๊ด๊ณ๋ก ๊ฐ์ ์ฃผ์ ์ ๊ธ์ ๋ณด๋ ์ฆ๊ฒ์ต๋๋ค.
๊ธ์ ๋ณด๊ณ ๋งํ๊ฐ์ ์ทจ๋ฏธ์ํ ์ฌ์ ๋ค์ง๊ธฐ๋ฅผ ํด๋ณด๋ ์ฌ๋ฐ๋ ๋ถ๋ถ์ด ์์ด ๊ณต์ ๋๋ฆฝ๋๋ค.
C99 ํ์ค์๋ ํฌ์ธํฐ์ ํฌ๊ธฐ๋ ์๋ฃํ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ํ ๋น๋๋ ๊ฒ์ ๋ฐํ์ผ๋ก ์์ฑ๋์ด ์์ต๋๋ค.
์ด๋ ๊ฐ์ ์ํคํ
์ณ์์๋ ์ต๋ํ ํฌ์ธํฐ์ ํฌ๊ธฐ๋ฅผ ๋์ผ์ํ๋๊ฒ ๊ณ์ฐ์ ํธํ๊ธด ํ์ง๋ง, C99 ํ์ค์ด ์์ฑ๋๋ ๊ทธ ์๊ธฐ์๋ ๊ทนํ์ ์ต์ ํ๋ฅผ ์ด๋ฃจ๊ธฐ ์ํ ์์ธ๋ค์ด ์กด์ฌํจ์ ๋ฐ๋ผ ๊ฐ์ ์ํคํ
์ณ์์๋ ์๋ฃํ์ ๋ฐ๋ผ ํฌ์ธํฐ์ ํฌ๊ธฐ๋ฅผ ๋ค๋ฅด๊ฒ ์ง์ ํ๋๋ก ์คํ์ด ์์ฑ๋์๋ค๊ณ ํฉ๋๋ค.
์ฌ์ค์ ํ๋์ ์์๋ ์ด๋ฐ ์์ธ๋ฅผ ์ ์ฉํ ๋งํผ ์ต์ ํ๋ฅผ ์ ์ฉํ๋ ๊ฒฝ์ฐ๋ ์ ์์ง๋ง ์ฌ์ ํ C ์คํ์์ผ๋ก๋ ์๋ฃํ์ ๋ฐ๋ผ ํฌ์ธํฐ๋ ํฌ๊ธฐ๊ฐ ๋ค๋ฅด๋ค๊ณ ์๊ฐํ๊ณ ์์ฑํ๊ธฐ๋ฅผ ๊ถ์ฅํ๋ค๊ณ ํ๋ค์. ์ ๊ธฐ๋ฐฉ๊ธฐ!
์ฐธ๊ณ ์๋ฃ) C99 ํ์ค, ์น์ 6.3.2.3 ๋ณดํต 59ํ์ด์ง์ ์์น.
์์ฆ ํ๊ต ๊ณผ์ ๋์ ๊ฑฐ์ ๋งจ๋ C ์ฝ๋๋ง ๋ค์ฌ๋ค๋ณด๋ ์ฐจ๋ผ ๋๋ฌด๋ ์ฌ๋ฐ๊ฒ ์ฝ์๋ค์ใ ใ
์ฌ๋ฐ๊ณ ์ ์ตํ๋ค๋ ๋ง์ด ์ด๋ ๊ฒ ๋ง์ ์๊ฐ ์์๊น์? ์ ๋ง ์ข๋ค์.
์ ์ตํ ์ ๋ณด ๊ฐ์ฌํฉ๋๋ค ^_^