diff --git "a/_posts/algorithm/\353\223\261\354\202\260\354\275\224\354\212\244-\354\240\225\355\225\230\352\270\260/2023-12-10-\354\235\264\352\260\200\354\235\200-\353\223\261\354\202\260\354\275\224\354\212\244-\354\240\225\355\225\230\352\270\260.md" "b/_posts/algorithm/\353\223\261\354\202\260\354\275\224\354\212\244-\354\240\225\355\225\230\352\270\260/2023-12-10-\354\235\264\352\260\200\354\235\200-\353\223\261\354\202\260\354\275\224\354\212\244-\354\240\225\355\225\230\352\270\260.md"
new file mode 100644
index 0000000..5d7c641
--- /dev/null
+++ "b/_posts/algorithm/\353\223\261\354\202\260\354\275\224\354\212\244-\354\240\225\355\225\230\352\270\260/2023-12-10-\354\235\264\352\260\200\354\235\200-\353\223\261\354\202\260\354\275\224\354\212\244-\354\240\225\355\225\230\352\270\260.md"
@@ -0,0 +1,26 @@
+---
+title: ๐ข ๋ฑ์ฐ์ฝ์ค ์ ํ๊ธฐ
+author: gani0325
+date: 2023-12-10 20:00:00 +09:00
+categories: [์๊ณ ๋ฆฌ์ฆ, ๋ฑ์ฐ์ฝ์ค ์ ํ๊ธฐ]
+tags: [์๊ณ ๋ฆฌ์ฆ, ํ๋ก๊ทธ๋๋จธ์ค, level3, ๊ทธ๋ํ, 8์ฃผ์ฐจ, ์ด๊ฐ์]
+render_with_liquid: false
+---
+
+## 1. ๋ฌธ์ ๋งํฌ
+
+[๋ฑ์ฐ์ฝ์ค ์ ํ๊ธฐ](https://school.programmers.co.kr/learn/courses/30/lessons/118669)
+
+
+
+## 2. ์ฝ๋
+
+```python
+
+```
+
+- ์ ํ์ฑ
+
+
+
+## 3. ํด์ค
diff --git "a/_posts/processinalC/chap12.-\354\265\234\354\213\240-C/2023-12-31-\354\235\264\352\260\200\354\235\200-chap12.-\354\265\234\354\213\240-C.md" "b/_posts/processinalC/chap12.-\354\265\234\354\213\240-C/2023-12-31-\354\235\264\352\260\200\354\235\200-chap12.-\354\265\234\354\213\240-C.md"
new file mode 100644
index 0000000..0503493
--- /dev/null
+++ "b/_posts/processinalC/chap12.-\354\265\234\354\213\240-C/2023-12-31-\354\235\264\352\260\200\354\235\200-chap12.-\354\265\234\354\213\240-C.md"
@@ -0,0 +1,350 @@
+---
+title: "๐ข chap12. ์ต์ C"
+author: gani0325
+date: 2023-12-31 20:00:00 +09:00
+categories: [์ ๋ฌธ๊ฐ๋ฅผ ์ํ C, "chap12. ์ต์ C"]
+tags: [์ ๋ฌธ๊ฐ๋ฅผ ์ํ C, C์ธ์ด, 11์ฃผ์ฐจ, ์ด๊ฐ์]
+render_with_liquid: false
+math: true
+---
+
+
โญ 12.1 C11
+
+- C ์ธ์ด๋ ISO ํ์ค์ผ๋ก ํ์คํ ๋์์
+ - C ๋ฅผ ๊ฐ์ ํ๊ณ ์๋ก์ด ๊ธฐ๋ฅ์ ๋์
ํจ
+- C99 < C11 (์ด์ ์ C99 ํ์ค ๊ฐ์ ) < C18 (C11 ๋์ฒด)
+ - C18์ ์๋ก์ด ๊ธฐ๋ฅ ์ ๊ณต X, C11 ์์ ๋ฐ๊ฒฌ๋ ๋ฌธ์ ๋ฅผ ์์ ํ์ ๋ฟ!
+
+
+
+- ์๋ก์ด ๊ธฐ๋ฅ์ ๋์
ํ๋ ค๋ฉด ์ด์ ์ฝ๋๋ ๊ธฐ๋ฅ์ ๊ทธ๋๋ก ์ ์งํ๋ฉด์ ์ํ
+ - **๊ธฐ์กด ํ๋ก๊ทธ๋จ์ ์๋ก์ด ๋ฌธ์ ๋ฅผ ์ผ์ผํค๋ฉด ์๋๊ณ , ๋ฒ๊ทธ๊ฐ ์์ด์ผ ํจ**
+ - C11 ๋ง๋ค๊ธฐ ์ C ์ปค๋ฎค๋ํฐ ์ฌ๋๋ค์ [์ผ๋ คํ ๊ฑฑ์ ๊ณผ ์๊ฐ ์๋ฃ](https://www.open-std.org/JTC1/SC22/wg14/www/docs/n1250.pdf)
+ - But, C11 ์ถ์๋์์ ๋ ์ด์์ ์ธ ํํ๊ฐ ์๋์์ผ๋ฉฐ ์ค์ ๋ก ์ฌ๊ฐํ ๊ฒฐํจ ์์์
+ - C18 ์ C11 ์์ ๋ฐ๊ฒฌ๋ ๊ฒฐํจ์ ๊ณ ์น๊ณ ์ ํจ (๋น๊ณต์์ ์ผ๋ก C17)
+ - ์ํผ, ํ์ค ์ ๋ฆฌํ๋ ๊ณผ์ ์ด ๊ต์ฅํ ์ด๋ ต๊ณ ๊น๋ค๋ก์ ๐ซ
+
+ โญ 12.2 C ํ์ค ์ง์ ๋ฒ์ ์ฐพ๊ธฐ
+
+- C11 ํธํ ๊ฐ๋ฅํ ์ปดํ์ผ๋ฌ : gcc, clang ๊ฐ์ ์คํ ์์ค ์ปดํ์ผ
+- So, ํน์ ๋งคํฌ๋ก๋ฅผ ์ฌ์ฉํด C ๋ฒ์ ์ ๊ฐ์งํ๊ณ , ๋ฒ์ ์ ๋ฐ๋ผ์ ์ง์๋๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ๋ฒ ์์๋ณด์ โ
+
+ 1. ๋จผ์ ํ์ฌ ์ด๋ค ๋ฒ์ ์ ์ฌ์ฉํ๋์ง ํ์ธํ๊ธฐ
+
+ 1. ๋ฆฌ๋
์ค์์๋ gcc, macOS ์์๋ clang ์ฌ์ฉ
+ 2. ํ์ฌ C ํ์ค ๋ฒ์ ์ ๊ฐ์งํ๊ธฐ ์ํด ๊ธฐ์กด์ ์ ์๋ ๋งคํฌ๋ก๋ฅผ ๋ฐํ์ ์ ์ด๋ป๊ฒ ์ฌ์ฉํ๋๊ฐ
+
+ - C ํ์ค ๋ฒ์ ์ **๊ฐ์ง**ํ๊ธฐ & **์ปดํ์ผ** ํ๊ธฐ
+
+ - C ํ์ค์ ์ฌ๋ฌ ๋ฒ์ ๊ตฌ๋ณํ ์ ์์
+
+ ```c
+ #include
+
+ int main(int argc, char** argv) {
+ // ์ ์ผ ์ต์
+ #if __STDC_VERSION__ >= 201710L
+ printf("Hello World from C18!\n");
+ #elif __STDC_VERSION__ >= 201112L
+ printf("Hello World from C11!\n");
+ #elif __STDC_VERSION__ >= 199901L
+ printf("Hello World from C99!\n");
+
+ // ์ ์ผ ์๋
+ #else
+ printf("Hello World from C89/C90!\n");
+ #endif
+ return 0;
+ }
+ ```
+
+ - ๋ค์ํ ๋ฒ์ ์ C ํ์ค์ผ๋ก ์ปดํ์ผํ๊ธฐ
+
+ - ์ปดํ์ผ๋ฌ๋ก **-std=CXX** ์ต์
์ ์ ๋ฌํด์ผ ํจ
+ - ์ต์ ์ปดํ์ผ๋ฌ์ ๊ธฐ๋ณธ C ํ์ค ๋ฒ์ ์ C11 ์
+
+ ```bash
+ $ gcc ExtremeC_examples_chapter12_1.c -o ex12_1.out
+ $ ./ex12_1.out
+ Hello World from C11!
+
+ $ gcc ExtremeC_examples_chapter12_1.c -o ex12_1.out -std=c11
+ $ ./ex12_1.out
+ Hello World from C11!
+
+ $ gcc ExtremeC_examples_chapter12_1.c -o ex12_1.out -std=c99
+ $ ./ex12_1.out
+ Hello World from C99!
+
+ $ gcc ExtremeC_examples_chapter12_1.c -o ex12_1.out -std=c90
+ $ ./ex12_1.out
+ Hello World from C89/C90!
+
+ $ gcc ExtremeC_examples_chapter12_1.c -o ex12_1.out -std=c89
+ $ ./ex12_1.out
+ Hello World from C89/C90!
+ ```
+
+ โญ 12.3 gets ํจ์์ ์ ๊ฑฐ
+
+- ์ ๋ช
ํ gets ํจ์๊ฐ ์ ๊ฑฐ๋จ
+ - C11 ํ์ค์์ gets ์ฐ๋ฉด C11 ์ปดํ์ผ๋ฌ๋ก ์ปดํ์ผ ๋์ง ์์
+ - **gets ํจ์**
+ - ํค๋ณด๋๋ก๋ถํฐ ๋ฌธ์์ด์ ์
๋ ฅ๋ฐ์ ๋ฒํผ์ ์ ์ฅํ๋ ํจ์
+ - ์ด ํจ์๋ **ํ๋์ ์ธ์**๋ฅผ ์๊ตฌํ๋๋ฐ, ๊ทธ๊ฒ์ **์
๋ ฅ๋ฐ์ ๊ฐ์ ์ ์ฅํ ๋ฒํผ**
+ - โ **๋ฒํผ**๋
+ - buffer ๋ฐฐ์ด ๋ณ์์ ์์ ์ฃผ์
+ - C์ธ์ด์์ โ๋ฐฐ์ด์ ์ด๋ฆ์ ๊ทธ ๋ฐฐ์ด์ ์์ ์ฃผ์์ ๋์ผํ๋คโ
+ - gets() ํจ์์ ์ธ์๋ก ์ ๋ฌ๋๋ ๊ฒ์ **โ๋ฉ๋ชจ๋ฆฌ ์ฃผ์โ ๊ฐ** (buffer ๋ณ์์ ์์ ์ฃผ์)
+ - ์ํฐ๊ฐ ์
๋ ฅ ๋ ๋๊น์ง ์
๋ ฅ์ ๋ฐ์
+ - ์ฌ์ฉ์๊ฐ ์ํฐ๋ฅผ ์น๊ธฐ ์ ๊น์ง ์
๋ ฅํ ๊ฐ๋ค์ ์ธ์๋ก ์ฃผ์ด์ง ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ์ ์ฅํ๋คโ
+ - So,, ์ํฐ ์
๋ ฅ ์ ๊น์ง ๋ง์ ๊ฐ ์
๋ ฅ.. โ ์ฌ์ฉ์์ ๊ณผ๋ํ ์
๋ ฅ์ด ๊ฒฐ๊ตญ ๐จ **๋ฒํผ ์ค๋ฒ ํ๋ก์ฐ**๋ฅผ ๋ฐ์
+ - **๋ฒํผ ์ค๋ฒํ๋ก** ๊ณต๊ฒฉ์ ๋์์ด ๋๋ค
+ - ๊ฒฝ๊ณ ๊ฒ์ฌ๊ฐ ์๊ณ ํธ์ถ ํ๋ก๊ทธ๋จ์ด ๋ค์์ ์ฌ ํ์ ๊ธธ์ด๋ฅผ ํ์คํ๊ฒ ๊ฒฐ์ ํ์ง ๋ชปํ๋ ๋งํผ, ์ด ํจ์๋ ์
์ฑ ์ฌ์ฉ์๊ฐ ๋ฒํผ ์ค๋ฒํ๋ก ๊ณต๊ฒฉ์ ํตํด ์คํ ์ค์ธ ํ๋ก๊ทธ๋จ์ ๊ธฐ๋ฅ์ ์์๋ก ๋ณ๊ฒฝํ ์ ์์
+ - ๋ฐ๋ฉด์ **fgets** ํจ์๋ ๊ฒฝ๊ณ ๊ฒ์ฌ ๋จ
+ - **fgets ํจ์**
+ - **FILE ๊ตฌ์กฐ์ฒด**๋ฅผ ์ฌ์ฉํ์ฌ **ํ์ผ ์
์ถ๋ ฅ ์คํธ๋ฆผ**์์ **๋ฌธ์์ด**์ ๊ฐ์ ธ์ค๋ ํจ์
+ ```arduino
+ char*fgets(char* str,int numChars, FILE* stream);
+ char*fgets(char* str,int numChars, stdin); // ํค๋ณด๋๋ก๋ ์
๋ ฅ ๊ฐ๋ฅ
+ ```
+ 1. ์ฒซ ๋ฒ์งธ ๋งค๊ฐ๋ณ์(str) : ํ์ผ์์ ์ฝ์ ๋ฌธ์์ด์ ์ ์ฅํ **๋ฉ๋ชจ๋ฆฌ์ ์ฃผ์**๋ฅผ ๋๊ฒจ์ฃผ๊ธฐ
+ 2. ๋ ๋ฒ์งธ ๋งค๊ฐ๋ณ์(numChars) : ์ ์ฅํ ๋ฌธ์์ **์ต๋ ๊ฐ์**๋ฅผ ์ง์
+ 3. ์ธ ๋ฒ์งธ ๋งค๊ฐ๋ณ์(stream) : ํ์ผ์์ ๋ฌธ์์ด์ ์ฝ๊ธฐ ์ํด ์ฌ์ฉํ **ํ์ผ ํฌ์ธํฐ**
+ - FILE ๊ตฌ์กฐ์ฒด ์ฌ์ฉํ๋ฉฐ, ํ
์คํธ ํ์ผ ๊ด๋ฆฌํ๋ ํฌ์ธํฐ
+ 4. ๊ฒฐ๊ณผ๋ฅผย string์ ์ ์ฅํ๊ณ ์คํธ๋ง ๋์ ๋(null) ๋ฌธ์(\0)๋ฅผ ์ถ๊ฐ
+
+ โญ 12.4 fopen ํจ์๋ก์ ๋ณํ
+
+- **fopen ํจ์**
+
+ - ํ์ผ์ ์ด์ด์ ํ์ผ ์์ ์(descriptor) ๋ฅผ ๊ทธ ํ์ผ๋ก ๋ฐํํ ๋ ์ฌ์ฉ
+ - ํ์ผ ! ๊ผญ ํ์ผ ์์คํ
์ ์ด๋ค ํ์ผ์ด ์๋,, ๊ต์ฅํ ๋ณดํธ์ ์ด๋ค
+ - fopen ํจ์ ํจ๋ฐ๋ฆฌ์ ๋ํ ๋ค์ํ ์๊ทธ๋์ฒ
+
+ ```c
+ FILE* fopen(const char *pathname, const char *mode);
+ FILE* fdopen(int fd, const char *mode);
+ FILE* freopen(const char *pathname, const char *mode, FILE
+ *stream);
+ ```
+
+ - ๋ชจ๋ ์๊ทธ๋์ฒ๋ mode ์
๋ ฅ์ ๋ฐ์
+
+ - **mode** : ํ์ผ์ ์ฌ๋ ๋ฐฉ๋ฒ์ ์ ํ๋ ๋ฌธ์์ด
+
+ - FreeBSD ๋งค๋ด์ผ์ fopen ํจ์
+
+ - **๋ชจ๋ x** ๋ C11 ์์ ๋์
๋จ
+
+ - ํ์ผ์ ์ฐ๊ธฐ ์ํด ์ด๋ ค๋ฉด fopen ์ ๋ชจ๋ w ๋๋ w+ ๋ฃ๊ธฐ
+ - ์ด๋ฏธ ํ์ผ์ด ์กด์ฌํ๋ค๋ฉด,, w ๋๋ w+ ๋ชจ๋๋ ํ์ผ์ ์ญ์ ํจ (๋น์)
+ - So, ํ์ผ ์ถ๊ฐํ๋ฉด์ ํ์ฌ ๋ด์ฉ ์ ์งํ๋ ค๋ฉด a ๋ชจ๋ ์ฌ์ฉํ๊ธฐ
+
+ ```bash
+ $ man 3 fopen
+ ...
+ mode ์ธ์๋ ๋ค์ ๋ฌธ์ ์ค ํ๋๋ก ์์ํ๋ ๋ฌธ์์ด์ ๊ฐ๋ฆฌํต๋๋ค.
+
+ "r" ์ฝ๊ธฐ ๋ชจ๋๋ก ํ์ผ์ ์ฝ๋๋ค. ์คํธ๋ฆผ์ ํ์ผ์ ๊ฐ์ฅ ์์ ์์นํฉ๋๋ค.
+ ํ์ผ์ด ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ ์คํจํฉ๋๋ค.
+ "w" ์ฐ๊ธฐ ๋ชจ๋๋ก ํ์ผ์ ์ฝ๋๋ค. ์คํธ๋ฆผ์ ํ์ผ์ ๊ฐ์ฅ ์์ ์์นํฉ๋๋ค.
+ ํ์ผ์ด ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ ํ์ผ์ ์์ฑํฉ๋๋ค.
+ "a" ์ฐ๊ธฐ ๋ชจ๋๋ก ํ์ผ์ ์ฝ๋๋ค. ์คํธ๋ฆผ์ ํ์ผ์ ๊ฐ์ฅ ๋์ ์์นํฉ๋๋ค.
+ fseek(3) ์ด๋ ์ด์ ์ ์ฌํ ๊ฒ๊ณผ ์๊ด์์ด,
+ ํญ์ ํ์ผ์ ํ์ฌ ๋๋ถ๋ถ์์ ํ์ผ ์ด์ด ์ฐ๊ธฐ๊ฐ ๋๋ฉ๋๋ค.
+ ํ์ผ์ด ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ ํ์ผ์ ์์ฑํฉ๋๋ค.
+
+ "r", "w", "a" ๋ค์ "+"์ ์ต์
์ผ๋ก ์ถ๊ฐํ๋ฉด **์ฝ๊ธฐ ๋ฐ ์ฐ๊ธฐ ๋ชจ๋**๋ก ํ์ผ์ ์ฝ๋๋ค.
+ ํ์ผ์ด ์ด๋ฏธ ์กด์ฌํ๋ ๊ฒฝ์ฐ "w" ๋ค์ "x"๋ฅผ ์ต์
์ผ๋ก ์ถ๊ฐํ๊ฑฐ๋,
+ "w+"์ ์ฌ์ฉํ๋ฉด fopen()์ด ํธ์ถ๋ฉ๋๋ค.
+
+ ์์ ์ถ๊ฐ๋ก "" ์ต์
์ ์ถ๊ฐํ๋ฉด fopen()์ ํธ์ถํด
+ ๊ธฐ๋ณธ ํ์ผ ์์ ์์ FD_CLOEXEC ํ๋๊ทธ๋ฅผ ์ค์ ํฉ๋๋ค.
+
+ ๋ชจ๋ ๋ฌธ์์ด์ "+"์ด๋ ์ฒซ ๋ฒ์งธ ๊ธ์ ๋ค์์ "b"๋ฅผ ํฌํจํ ์ ์์ต๋๋ค
+ ```
+
+ - ํ์ผ์ด ์กด์ฌํ๋์ง ํ์ธํ ๋, ํ์ผ ์์คํ
API ์ฌ์ฉํ์ง ์์ผ๋ฉด์ ํ์ผ ์ด๊ธฐ ์ํ ์์ฉ๊ตฌ ๋ ์ ๊ฒ ์ธ ์ ์์
+ - ๊ทธ๋ฐ์๋, fopen_s API์ ๋์
์ด ์์ (์์ ํ fopen ์ญํ ๋ฒ์ โ ๋ฒํผ์ ๊ฒฐํจ ๊ฐ์งํ๊ธฐ ์ํด, ์ ๊ณต๋ ๋ฒํผ์ ๊ทธ ๊ฒฝ๊ณ์ ๋ํ ์ถ๊ฐ ๊ฒ์ฌ ์ํ)
+
+ โญ 12.5 ๊ฒฝ๊ณ ๊ฒ์ฌ ํจ์
+
+- ๋ฌธ์์ด๊ณผ ๋ฐ์ดํธ ๋ฐฐ์ด์์ ์๋ํ๋ C ํ๋ก๊ทธ๋จ์ ์ฌ๊ฐํ ๋ฌธ์ ๋..
+ - ๐จ ๋ฒํผ๋ ๋ฐ์ดํธ ๋ฐฐ์ด์ ๊ฒฝ๊ณ๋ก ์ฝ๊ฒ ๋์ด๊ฐ ์ ์์
+ - **๋ฒํผ** : ๋ฐ์ดํธ ๋ฐฐ์ด์ด๋ ๋ฌธ์์ด ๋ณ์์ ์๋ฆฌ ํ์์๋ก ์ฌ์ฉ๋๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ
+ - ๋ฒํผ์ ๊ฒฝ๊ณ๋ฅผ ๋์ด๊ฐ๋ฉด โ **๋ฒํผ ์ค๋ฒํ๋ก** ๋ฐ์
+ - ์ด๋ฅผ ํตํด ์
์ฑ ๊ฐ์ฒด๊ฐ ๊ณต๊ฒฉ โ **๋ฒํผ ์ค๋ฒํ๋ก ๊ณต๊ฒฉ**
+ - ์ด๋ฐ ์ ํ์ ๊ณต๊ฒฉ โ ์๋น์ค ๊ฑฐ๋ถ (DOS) ๋ฐ์, ์
์ฉ
+ - strcpy, strcat ๊ฐ์ string.h ์ ์๋ ๋ฌธ์์ด ์กฐ์ ํจ์๋ ๋ฒํผ ์ค๋ฒํ๋ก ๊ณต๊ฒฉ ๋ฐฉ์ง์ ๊ฒฝ๊ณ ๊ฒ์ฌ ๋ฉ์ปค๋์ฆ์ด ๋ถ์กฑํจ
+- But, C11 ์์ ์๋ก์ด ํจ์๊ฐ ๋์
๋จ
+ - **๊ฒฝ๊ณ ๊ฒ์ฌ ํจ์** : ๋ฌธ์์ด ์กฐ์ ํจ์์์ ์ด๋ฆ ๋น๋ ค์ด, ๋์ **\_s** ๋ถ์
+ - **\_s ์ ๋ฏธ์ฌ** : **์ทจ์ฝ์ ์ ์ข
๋ฃ**ํ๊ธฐ ์ํด **๋ฐํ์ ๊ฒ์ฌ๋ฅผ ๋ ๋ง์ด ์ํ**ํ๋ ํจ์๋ฅผ ์์ ํ ๋ฒ์ ์ด๋ผ๊ณ ๊ตฌ๋ถํจ
+ ```c
+ errno_t strcpy_s(char *restrict dest, rsize_t destsz, const char
+ *restrict src);
+ ```
+ - ์ฒซ ๋ฒ์งธ ์ธ์ : ๋ณต์ฌํ ๋ฌธ์์ด (๋ค๋ฅธ ๋ณ์, ๋ฉ๋ชจ๋ฆฌ)
+ - ๋ ๋ฒ์งธ ์ธ์ : dest ๋ฒํผ์ ๊ธธ์ด
+ - ํจ์๋ ํ ๋น๋์ง ์์ ๋ฉ๋ชจ๋ฆฌ์ ์ฐ์ง ์๋๋ก dest ๋ฒํผ์ ํฌ๊ธฐ๋ณด๋ค src ๋ฌธ์์ด์ด ์งง๊ฑฐ๋ ๊ฐ์์ง ํ์ธ ๋ฑ ๋ฐํ์ ๊ฒ์ฌ ์ํํจ
+ - ๋ณต์ฌ๋ ๋ฉ๋ชจ๋ฆฌ์ ํฌ๊ธฐ๋ฅผ ์ ์ด์ผ ํจ!
+ - ์ธ ๋ฒ์งธ ์ธ์ : ์๋ณธ ๋ฌธ์์ด
+
+ โญ 12.6 ๊ฐ์ ๋ฐํํ์ง ์๋ ํจ์
+
+- ํจ์ ํธ์ถ์ return ํค์๋๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ํจ์์ ๋ธ๋ก ๋์ ๋๋ฌํ๋ฉด ์ข
๋ฃ
+- ํธ์ถ์ด ์ ๋ ๋๋์ง ์์ ๋๋ ์๋๋ฐ, ๋ณดํต์ ์ด๋ค ์๋๋ฅผ ๊ฐ์ง๊ณ ์ผ๋ถ๋ฌ ์ํํจ
+- ๊ฐ์ ๋ฐํํ์ง ์๋ ํจ์
+
+ ```c
+ void main_loop() {
+ while (1) {
+ ...
+ }
+ }
+
+ int main(int argc, char** argv) {
+ ...
+ main_loop();
+ return 0;
+ }
+ ```
+
+ - main_loop() ํจ์๋ ํ๋ก๊ทธ๋จ์ ์ฃผ์ ์์
์ํํ๊ณ ํจ์์์ ๋์์ค๋ฉด ํ๋ก๊ทธ๋จ์ด ์ข
๋ฃ๋จ
+ - ์ด๋ฐ ๊ฒฝ์ฐ์ ์ปดํ์ผ๋ฌ๋ ์ต์ ํ ๋ ๋ง์ด ์ํํจ
+ - But, main_loop() ๋ ์ด๋ป๊ฒ๋ ์ ๋ ๋ณํ๋์ง ์์
+ - C11 ์์๋ **๊ฐ์ ๋ฐํํ์ง ์๋ ํจ์๋ผ๊ณ ํ์**๋๋ ๊ธฐ๋ฅ์ด ์์
+ - stdnoreturn.h ํค๋ ํ์ผ์ **\_Noreturn** ํค์๋๋ฅผ ์ฌ์ฉํด ์ ๋ ์ข
๋ฃ๋์ง ์๋ ํจ์ ์ง์ ํจ
+ - main_loop ๋ฅผ ๋๋์ง ์๋ ํจ์๋ก ํ์ํ๋ \_Noreturn ํค์๋ ์ฌ์ฉํ๊ธฐ
+ ```c
+ _Noreturn void main_loop() {
+ while (true) {
+ ...
+ }
+ }
+ ```
+ - ํ๋ก๊ทธ๋จ์ ๋น ๋ฅธ ์ข
๋ฃ๋ฅผ ์ํด C11 ์์ ์ต๊ทผ์ ์ถ๊ฐ๋จ
+ - exit, quick_exit, abort โ ๊ฐ์ ๋ฐํํ์ง ์๋ ํจ์๋ก ๊ฐ์ฃผํจ
+ - ๋ฐํ๊ฐ์ด ์๋ ํจ์์ ์กด์ฌ๋ฅผ ์ปดํ์ผ๋ฌ๊ฐ ์๊ณ ์๋ค๋ฉดโ ์๋์น ์๊ฒ ๋ฐํ๊ฐ์ด ์๋ ํจ์ ํธ์ถ์ ์ธ์ํ ์ ์์ โ ๋
ผ๋ฆฌ์ ๋ฒ๊ทธ์ ๋ํ ์ ํธ โ ์ ์ ํ๊ฒ ๊ฒฝ๊ณ ํจ ๐จ
+ - But, \_Noreturn ์ผ๋ก ํ์ํ ํจ์๊ฐ ๋ฐํ๊ฐ์ด ์๋ค๋ฉด ์ ์๋์ง ์์ ํ์ โ ๊ถ์ฅ X
+
+ โญ 12.7 ํ์
์ ๋ค๋ฆญ ๋งคํฌ๋ก
+
+- C11 ์์ **\_Generic** ์ด๋ผ๋ ์ ํค์๋ ๋์
+
+ - **์ปดํ์ผ ํ๋ ๋์ ์๋ฃํ์ ์ธ์ํ๋ ๋งคํฌ๋ก๋ฅผ ์์ฑํ๋๋ฐ ์ฌ์ฉ**ํจ
+ - ์ธ์์ ์๋ฃํ์ ๋ฐ๋ผ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ ๋งคํฌ๋ก๋ฅผ ์์ฑํ ์ ์์ โ **์ผ๋ฐ (Generic) ์ ํ**
+
+ - ์ ๋๋ฆญ ๋งคํฌ๋ก์ ์
+
+ ```c
+ #include
+
+ #define abs(x) _Generic((x), int: absi, double: absd)(x)
+
+ int absi(int a) {
+ return a > 0 ? a : -a;
+ }
+
+ double absd(double a) {
+ return a > 0 ? a : -a;
+ }
+
+ int main(int argc, char** argv) {
+ // C์์ ์ค๋ฒ๋ก๋ฉ ๋์ฒด์ฉ -> ํ์
์ ๋๋ฆญ ๋งคํฌ๋ก
+ printf("abs(-2): %d\n", abs(-2));
+ printf("abs(2.5): %f\n", abs(2.5));
+ return 0;
+ }
+
+ // abs(-2): 2
+ // abs(2.5): 2.500000
+ ```
+
+ - x ์ธ์์ ์๋ฃํ์ ๋ฐ๋ผ ๋ค๋ฅธ ํํ์ ์ฌ์ฉํจ
+ - **์ ์๊ฐ**์ด๋ฉด **absi**
+ - **double ๊ฐ**์ด๋ผ๋ฉด **absd**
+ - C11 ์ ์๋ก์ด ๊ธฐ๋ฅ์ด ์๋์๊ณ ์ด์ ์๋ ๋ณผ ์ ์์์ผ๋ C ํ์ค์ ์์ํ์ (์ง๊ธ์ ํ์ค์ด ๋์์)
+ **โ So, ์๋ฃํ์ ์ธ์ํ๋ ๋งคํฌ๋ก ์์ฑ์ด ๊ฐ๋ฅ**
+
+ โญ 12.8 ์ ๋์ฝ๋
+
+- C11 ํ์ค์ ์ถ๊ฐ๋ ์ค์ํ ๊ธฐ๋ฅ ์ค ํ๋ UTF-8, UTF-16, UTF-32 ์ธ์ฝ๋ฉ์ ํตํ ์ ๋์ฝ๋ ์ง์
+- C11 ์ด์ ์๋ IBM ์ ๋์ฝ๋ ๊ตญ์ ์ปดํฌ๋ํธ (ICU)์ ๊ฐ์ ์๋ ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํจ
+- ์์คํค์ ์์คํค ํ์ฅ ๋ฌธ์๋ฅผ ์ ์ฅํ๋ 8๋นํธ ๋ณ์์ธ char์ unsigned char ํ๋ง ์์์ต๋๋ค.
+ - ํ์ฅ๋ฌธ์: 255 ์ดํ์ ํด๋นํ๋ ์ซ์ฃ๊ฐ์ ์ ์ฅํ๊ธฐ ์ํด 1๋ฐ์ดํธ ์ด์์ ๋ ์ฌ์ฉํ๋ ๋ฌธ์.
+- UTF-8 UTF-16์ ๊ฐ๋ณ ๊ธธ์ด ์ธ์ฝ๋ฉ์ด๋ผ๊ณ ํฉ๋๋ค.
+ - ๋ฌธ์ ๋น 1๋ฐ์ดํธ ๋ฏธ๋ง์ ์ฌ์ฉํ๋ ์ด๊ธฐ ๊ฐ๋ณ ๊ธธ์ด ์ธ์ฝ๋ฉ์ ์ข
์ข
์ด๊ธฐย ๋ง์ดํฌ๋ก์ปดํจํฐ์ฉย ์ด๋๋ฒค์ฒ ๊ฒ์์์ ์์ด ํ
์คํธ๋ฅผ ๋ ์ ์ ๋ฐ์ดํธ๋ก ํจํน(pack)ํ๊ธฐ ์ํด ์ฌ์ฉ๋จ
+- UTF-8์ ์์คํค์ ์์ ์งํฉ์ผ๋ก ๋ด
๋๋ค. ์ด๋ ์์คํค ๋ฌธ์(ํ์ฅ ์์คํค ๋ฌธ์๋ ์๋๋๋ค.)์ ํํ์ด ๊ฐ๊ธฐ ๋๋ฌธ์
๋๋ค.
+ - UTF-16์ ๋ชจ๋ ๋ฌธ์๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ํ๋ ๋๋ 2๊ฐ์ ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.(๊ฐ ์๋๋ 16๋นํธ๋ฅผ ๊ฐ์ต๋๋ค
+ - ์ฌ์ฉํ๋ 32๋นํธ CPU(ARM ๋ฑ)๋ผ๋ฉด ์๋๋ 32๋นํธ๊ฐ ๋๋ค
+- UTF-32๋ ๋ชจ๋ ๋ฌธ์์ ๋ํ ๊ฐ์ ์ ์ฅํ๊ธฐ ์ํด ์ ํํ 4๋ฐ์ดํธ๋ก ๊ณ ์ ํฌ๊ธฐ ์ธ์ฝ๋ฉ์
๋๋ค.
+- UTF-8์ UTF-16์ ์์ฃผ ๋์ค๋ ๋ฌธ์์ ๋ ์์ ๋ฐ์ดํธ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ์์ฉํ๋ก๊ทธ๋จ์ ์ ํฉํฉ๋๋ค.
+- UTF-32์ UTF-8์ UTF-16์ ๋นํด ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์๋นํฉ๋๋ค. ํ์ง๋ง UTF-8์ UTF-16์ ์์ถ ์ธ์ฝ๋ฉ์ด๋ผ์ ๋ ๋ง์ ์ฐ์ฐ์ ํด์ผํฉ๋๋ค.
+
+ โญ 12.9 ์ต๋ช
๊ตฌ์กฐ์ฒด์ ์ต๋ช
๊ณต์ฉ์ฒด
+
+- ์ต๋ช
๊ตฌ์กฐ์ฒด์ ์ต๋ช
๊ณต์ฉ์ฒด๋ ์ด๋ฆ์ ๊ฐ์ง ์๋ ์๋ฃํ ์ ์๋ก, ๋ณดํต ๋ค๋ฅธ ์๋ฃํ ๋ด์์ ์ค์ฒฉ ์๋ฃํ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
+
+```c
+typedef struct {
+ union {
+ struct {
+ int x;
+ int y;
+ };
+ int data[2];
+ };
+} point_t;
+```
+
+- union๊ณผ struct์ ์ด๋ฆ์ด ์๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
+
+```c
+/* File name: ExtremeC_examples_chapter12_4.c
+ * Description: Anonymous structures and unions
+ */
+
+#include
+
+typedef struct {
+ union {
+ struct {
+ int x;
+ int y;
+ };
+ int data[2];
+ };
+} point_t;
+
+int main(int argc, char** argv) {
+ point_t p;
+ p.x = 10;
+ p.data[1] = -5;
+ printf("Point (%d, %d) using anonymous structure.\n", p.x, p.y);
+ printf("Point (%d, %d) using anonymous byte array.\n",
+ p.data[0], p.data[1]);
+ return 0;
+}
+```
+
+ โญ 12.10 ๋ฉํฐ์ค๋ ๋ฉ
+
+- C์์ ๋ฉํฐ ์ค๋ ๋ฉ์ POSIX ์ค๋ ๋ฉ ํจ์ ๋๋ pthread ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํด ์ค๋ซ๋์ ์ง์์ด ๋์์ต๋๋ค.
+- POSIX ์ค๋ ๋ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ด๋ฆ ๊ทธ๋๋ก ๋ฆฌ๋
์ค๋ ์ ๋์ค ๊ณ์ด ์์คํ
๊ณผ ๊ฐ์ POSIXํธํ ์์คํ
์์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
+- ์๋์ฐ์ ๊ฐ์ด POSIX ํธํ ์์คํ
์ด ์๋ ๊ฒฝ์ฐ ์ด์์ฒด์ ๊ฐ ์ ๊ณตํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ผํฉ๋๋ค.
+- C11์์๋ POSIX์ ํธํ๊ณผ ์๊ด์์ด ํ์ค C๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋ ์์คํ
์์ ์ฌ์ฉํ ์ ์๋ ํ์ค ์ค๋ ๋ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. C11ํ์ค์์ ๋ณผ ์ ์๋ ๊ฐ์ฅ ํฐ ๋ณํ์
๋๋ค.
+- ์ ๊ฐ์ค๋ฝ๊ฒ๋ C11 ์ค๋ ๋ฉ์ ๋ฆฌ๋
์ค์ macOS์์๋ ๊ตฌํ๋์ง ์์์ต๋๋ค.
+- C18 ํ์ค์ C11์์ ์์ ํ ๋ชจ๋ ๋ด์ฉ์ ํฌํจํ๋ฉฐ, ์๋ก์ด ๊ธฐ๋ฅ์ ๋์
๋์ง ์์์ต๋๋ค.