๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
6. CS ๊ธฐ์ดˆ ๐Ÿ“š/Linux & Unix ๐Ÿง

[Linux/Unix][6-1] txt write err ์ฒ˜๋ฆฌ

by lxvxxu 2025. 10. 21.

 

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

int main(void)
{
    int fd;
    char str[] = "write test";
    fd = open("test.txt", O_RDWR | O_CREAT, 0644);
    write(fd, str, sizeof(str));
    close(fd);

    return 0;
}

 

๋ฌด์—‡์„ ํ•˜๋Š” ์ฝ”๋“œ์ธ๊ฐ€?

  • open("test.txt", O_RDWR | O_CREAT, 0644)
    • ํ˜„์žฌ ๋””๋ ‰ํ„ฐ๋ฆฌ์— test.txt๋ฅผ “์ฝ๊ธฐ+์“ฐ๊ธฐ” ๋ชจ๋“œ๋กœ ์—ฝ๋‹ˆ๋‹ค. ํŒŒ์ผ์ด ์—†์œผ๋ฉด ํผ๋ฏธ์…˜ 0644(์†Œ์œ ์ž ์ฝ๊ธฐ/์“ฐ๊ธฐ, ๊ทธ๋ฃน/๊ธฐํƒ€ ์ฝ๊ธฐ)๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ ๊ถŒํ•œ์€ umask์˜ ์˜ํ–ฅ์„ ๋ฐ›์•„ ์กฐ๊ธˆ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์–ด์š”.
  • write(fd, str, sizeof(str))
    • ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ fd์— "write test"๋ฅผ ์”๋‹ˆ๋‹ค.
    • ์ฃผ์˜: sizeof(str)๋Š” ๋ฌธ์ž์—ด ๊ธธ์ด(10) + ๋„ ์ข…๋ฃŒ๋ฌธ์ž '\0'(1)์„ ํ•ฉ์นœ 11์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ํŒŒ์ผ์˜ ๋์— ๋„ ๋ฐ”์ดํŠธ๊ฐ€ 1๊ฐœ ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜ ํ…์ŠคํŠธ ํŒŒ์ผ์ด๋ผ๋ฉด ๋ณดํ†ต strlen(str)๋งŒํผ(๋„ ์ œ์™ธ) ์“ฐ๋Š” ๊ฒƒ์ด ๊ด€๋ก€์ž…๋‹ˆ๋‹ค.
  • close(fd)
    • ํŒŒ์ผ์„ ๋‹ซ์Šต๋‹ˆ๋‹ค.

์ฆ‰, test.txt๋ฅผ ๋งŒ๋“ค๊ณ  "write test"๋ฅผ ๊ธฐ๋กํ•œ ๋’ค ๋‹ซ๋Š” ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค.

๋‹ค๋งŒ ์ฝ๊ธฐ๋Š” ํ•˜์ง€ ์•Š์œผ๋‹ˆ O_RDWR ๋Œ€์‹  O_WRONLY๊ฐ€ ๋” ์•Œ๋งž์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ๋ถ€๋ถ„ ๊ธฐ๋ก/์‹œ๊ทธ๋„ ์ธํ„ฐ๋ŸฝํŠธ, ์˜ค๋ฅ˜ ๋“ฑ์„ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.


์—๋Ÿฌ ์ฒ˜๋ฆฌ์™€ ๋ชจ๋ฒ” ์‚ฌ์šฉ์„ ๋„ฃ์–ด ๋‹ค์‹œ ์ž‘์„ฑ

  • ์—ด๊ธฐ ์‹คํŒจ ์‹œ ์ฒ˜๋ฆฌ
  • O_WRONLY | O_CREAT | O_TRUNC๋กœ “์“ฐ๊ธฐ ์ „์šฉ + ์—†์œผ๋ฉด ์ƒ์„ฑ + ๊ธฐ์กด ๋‚ด์šฉ์€ ์ง€์›€”
  • strlen์œผ๋กœ ๋„ ์ œ์™ธ ๊ธธ์ด ์‚ฌ์šฉ
  • write๊ฐ€ ๋ถ€๋ถ„์ ์œผ๋กœ๋งŒ ์“ฐ๋Š” ๊ฒฝ์šฐ๋ฅผ ๋ฃจํ”„๋กœ ์ฒ˜๋ฆฌ
  • EINTR(์‹œ๊ทธ๋„ ์ธํ„ฐ๋ŸฝํŠธ) ์žฌ์‹œ๋„
  • close ์‹คํŒจ ํ™•์ธ
  • ํ•„์š”ํ•œ ํ—ค๋”(errno.h, stdio.h, string.h) ์ถ”๊ฐ€
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
#include <stdio.h>
#include <string.h>

int main(void)
{
    const char *path = "test.txt";
    const char  msg[] = "write test";
    size_t      len   = strlen(msg);

    /* ํŒŒ์ผ ์—ด๊ธฐ: ์“ฐ๊ธฐ ์ „์šฉ, ์—†์œผ๋ฉด ์ƒ์„ฑ, ๊ธฐ์กด ๋‚ด์šฉ์€ ๋น„์›€ */
    int fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, 0644);
    if (fd == -1) {
        perror("open");
        return 1;
    }

    /* ์•ˆ์ „ํ•˜๊ฒŒ ๋ชจ๋‘ ์“ธ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต */
    size_t total = 0;
    while (total < len) {
        ssize_t n = write(fd, msg + total, len - total);
        if (n == -1) {
            if (errno == EINTR) continue;  // ์‹œ๊ทธ๋„๋กœ ๋Š๊ธฐ๋ฉด ์žฌ์‹œ๋„
            perror("write");
            close(fd);                      // ๋‹ซ๊ธฐ ์‹œ๋„ ํ›„ ์ข…๋ฃŒ
            return 1;
        }
        total += (size_t)n;
    }

    /* (์„ ํƒ) ๋””์Šคํฌ์— ๊ฐ•์ œ ํ”Œ๋Ÿฌ์‹œํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด fsync(fd); */

    if (close(fd) == -1) {
        perror("close");
        return 1;
    }

    return 0;
}

 

์ถ”๊ฐ€ ์„ค๋ช…

  • ๊ถŒํ•œ 0644: rw-r--r-- ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. ๋‹จ, ์‹ค์ œ ์ ์šฉ์€ umask์— ์˜ํ•ด ์ œํ•œ๋ฉ๋‹ˆ๋‹ค(์˜ˆ: umask 022๋ฉด ๊ทธ๋Œ€๋กœ 0644).
  • O_TRUNC vs O_APPEND
    • ๊ธฐ์กด ๋‚ด์šฉ์„ ์ง€์šฐ๊ณ  ์ƒˆ๋กœ ์“ฐ๋ ค๋ฉด O_TRUNC.
    • ๊ธฐ์กด ๋์— ๋ง๋ถ™์ด๋ ค๋ฉด O_APPEND.
  • ์ปดํŒŒ์ผ ์˜ˆ์‹œ
gcc -Wall -Wextra -O2 write_test.c -o write_test
./write_test   # ์‹คํ–‰ ํ›„ ํ˜„์žฌ ํด๋”์— test.txt ์ƒ์„ฑ

๋„ ๋ฐ”์ดํŠธ ๋ฌธ์ œ: ์›๋ณธ์ฒ˜๋Ÿผ sizeof(str)๋ฅผ ์“ฐ๋ฉด ํŒŒ์ผ ๋์— '\0'๊ฐ€ ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค. ๋ณดํ†ต ํ…์ŠคํŠธ ํŒŒ์ผ์—๋Š” ๋ถˆํ•„์š”ํ•˜๋‹ˆ strlen์„ ์“ฐ๋Š” ๊ฒŒ ์ข‹์Šต๋‹ˆ๋‹ค.

 

1) ํ—ค๋”๋“ค(์™œ ํ•„์š”ํ•œ๊ฐ€)

  • <sys/types.h>, <sys/stat.h>, <fcntl.h>: open, ํŒŒ์ผ ๊ถŒํ•œ/ํ”Œ๋ž˜๊ทธ ์ •์˜.
  • <unistd.h>: write, close, fsync ๊ฐ™์€ POSIX ํ•จ์ˆ˜.
  • <errno.h>: ์‹œ์Šคํ…œ ํ˜ธ์ถœ ์‹คํŒจ ์‹œ ์—๋Ÿฌ์ฝ”๋“œ(errno) ํ™•์ธ.
  • <stdio.h>: perror๋กœ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ.
  • <string.h>: strlen ์‚ฌ์šฉ(๋ฌธ์ž์—ด ๊ธธ์ด ๊ณ„์‚ฐ).

2) ๋ฐ์ดํ„ฐ ์ค€๋น„

 
const char *path = "test.txt";
const char  msg[] = "write test";
size_t      len   = strlen(msg);
  • msg๋Š” ํŒŒ์ผ์— ์“ธ ๋‚ด์šฉ.
  • strlen(msg)๋Š” ๋„ ๋ฌธ์ž('\0') ์ œ์™ธ ๊ธธ์ด.
    → ํ…์ŠคํŠธ ํŒŒ์ผ ๋์— ์“ธ๋ฐ์—†๋Š” ๋„ ๋ฐ”์ดํŠธ๊ฐ€ ๋“ค์–ด๊ฐ€์ง€ ์•Š๊ฒŒ ํ•˜๋ ค๋Š” ์˜๋„.
    (์›๋ž˜ ์ฝ”๋“œ์˜ sizeof(str)๋Š” ๋„๊นŒ์ง€ ์จ์„œ 1๋ฐ”์ดํŠธ ๋” ๊ธฐ๋ก๋จ.)

3) ํŒŒ์ผ ์—ด๊ธฐ(ํ•ต์‹ฌ ํ”Œ๋ž˜๊ทธ ์„ค๋ช…)

 
int fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, 0644);
  • O_WRONLY: ์“ฐ๊ธฐ ์ „์šฉ(์ฝ์ง€๋Š” ์•Š์œผ๋‹ˆ๊นŒ O_RDWR ๋ถˆํ•„์š”).
  • O_CREAT: ํŒŒ์ผ์ด ์—†์œผ๋ฉด ์ƒˆ๋กœ ๋งŒ๋“ฆ.
  • O_TRUNC: ์ด๋ฏธ ์กด์žฌํ•œ๋‹ค๋ฉด ๋‚ด์šฉ์„ ๋น„์šฐ๊ณ  ์ƒˆ๋กœ ์”€(๊ธธ์ด๋ฅผ 0์œผ๋กœ).
    • ๊ธฐ์กด ๋‚ด์šฉ ๋’ค์— ๋ง๋ถ™์ด๊ณ  ์‹ถ๋‹ค๋ฉด O_TRUNC ๋Œ€์‹  O_APPEND ์‚ฌ์šฉ.
  • 0644: ์ƒ์„ฑ ์‹œ ๊ถŒํ•œ(์†Œ์œ ์ž ์ฝ๊ธฐ·์“ฐ๊ธฐ, ๊ทธ๋ฃน/๊ธฐํƒ€ ์ฝ๊ธฐ). ์‹ค์ œ๋กœ๋Š” umask์— ์˜ํ•ด ์ œํ•œ๋  ์ˆ˜ ์žˆ์Œ.

์—ด๊ธฐ ์‹คํŒจ ์ฒ˜๋ฆฌ

 
if (fd == -1) { perror("open"); return 1; }
  • ์‹œ์Šคํ…œํ˜ธ์ถœ์€ ์‹คํŒจ ์‹œ -1์„ ๋ฐ˜ํ™˜. perror๋Š” errno์— ๋งž๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅ(์˜ˆ: ๊ถŒํ•œ ๊ฑฐ๋ถ€, ๋””๋ ‰ํ„ฐ๋ฆฌ ์—†์Œ ๋“ฑ).

4) ์•ˆ์ „ํ•œ ์“ฐ๊ธฐ ๋ฃจํ”„(์™œ ๋ฃจํ”„๊ฐ€ ํ•„์š”ํ•œ๊ฐ€)

 
size_t total = 0;
while (total < len) {
    ssize_t n = write(fd, msg + total, len - total);
    ...
    total += (size_t)n;
}
  • write๋Š” ์š”์ฒญํ•œ ๋ฐ”์ดํŠธ๋ฅผ ํ•œ ๋ฒˆ์— ๋ชจ๋‘ ์“ฐ์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ(partial write).
    • ํŒŒ์ดํ”„, ์†Œ์ผ“, ํŒŒ์ผ์ด ๋น„๋™๊ธฐ/๋„คํŠธ์›Œํฌ/ํŠน์ • ํŒŒ์ผ์‹œ์Šคํ…œ์ผ ๋•Œ ํŠนํžˆ ๊ฐ€๋Šฅ.
    • ์ผ๋ฐ˜ ํŒŒ์ผ์ด๋ผ๋„ ์‹œ๊ทธ๋„ ์ธํ„ฐ๋ŸฝํŠธ, ๋ฆฌ์†Œ์Šค ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋ถ€๋ถ„ ์“ฐ๊ธฐ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด์š”.
  • ๊ทธ๋ž˜์„œ “์ง€๊ธˆ๊นŒ์ง€ ์“ด ๊ธธ์ด”(total)๋ฅผ ์ถ”์ ํ•˜๋ฉฐ ๋‚จ์€ ๋งŒํผ ๊ณ„์† ์‹œ๋„.

์“ฐ๊ธฐ ์‹คํŒจ ์ผ€์ด์Šค ์ฒ˜๋ฆฌ

 
if (n == -1) {
    if (errno == EINTR) continue; // ์‹œ๊ทธ๋„์— ์˜ํ•ด ์ค‘๋‹จ → ๋‹ค์‹œ ์‹œ๋„
    perror("write");
    close(fd);
    return 1;
}
  • EINTR: ํ•จ์ˆ˜๊ฐ€ ์‹œ๊ทธ๋„์— ์˜ํ•ด ์ค‘๋‹จ๋œ ๊ฒƒ—์žฌ์‹œ๋„ํ•˜๋ฉด ๋จ.
  • ๊ทธ ์™ธ ์—๋Ÿฌ(๋””์Šคํฌ ๊ฝ‰ ์ฐธ, ๊ถŒํ•œ ๋ฌธ์ œ, I/O ์˜ค๋ฅ˜ ๋“ฑ)๋Š” ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ ํ›„ ์ข…๋ฃŒ.
  • ์‹คํŒจํ•˜๋”๋ผ๋„ close๋Š” ์‹œ๋„ํ•ด์„œ ์ปค๋„ ๋ฆฌ์†Œ์Šค๋ฅผ ํšŒ์ˆ˜.

5) (์„ ํƒ) ๋””์Šคํฌ ๊ฐ•์ œ ๊ธฐ๋ก

 
/* fsync(fd); */
  • ํŒŒ์ผ์‹œ์Šคํ…œ ์บ์‹œ์—๋งŒ ์žˆ๊ณ  ๋””์Šคํฌ์— ์•„์ง ์•ˆ ๋‚ด๋ ค๊ฐ”์„ ์ˆ˜ ์žˆ์Œ.
    ์ค‘์š”ํ•œ ๋กœ๊ทธ/๊ฑฐ๋ž˜ ๊ธฐ๋ก์ด๋ฉด fsync๋กœ ์˜์†์„ฑ ๋ณด์žฅ.

6) ๋‹ซ๊ธฐ์™€ ์—๋Ÿฌ ํ™•์ธ

 
if (close(fd) == -1) {
    perror("close");
    return 1;
}
  • close๋„ ์‹คํŒจํ•  ์ˆ˜ ์žˆ์Œ(๋„คํŠธ์›Œํฌ ํŒŒ์ผ์‹œ์Šคํ…œ ์ง€์—ฐ๋œ ์˜ค๋ฅ˜ ๋“ฑ).
    ๋‹ซ๊ธฐ ์‹คํŒจ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์‹ค์ œ๋กœ ์•ˆ ์จ์กŒ์„ ์œ„ํ—˜์„ ์˜๋ฏธํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ฒดํฌ.

์‹คํ–‰ ๊ฒฐ๊ณผ๋Š” ์–ด๋–ป๊ฒŒ ๋˜๋‚˜?

  • ํ˜„์žฌ ๋””๋ ‰ํ„ฐ๋ฆฌ์— test.txt๊ฐ€ ์ƒ๊ธฐ๊ณ , ํŒŒ์ผ ๋‚ด์šฉ์€ ์ •ํ™•ํžˆ:
 
write test

(๋„ ๋ฌธ์ž๋Š” ์—†์Œ)


์ž์ฃผ ํ—ท๊ฐˆ๋ฆฌ๋Š” ํฌ์ธํŠธ ์š”์•ฝ

  • sizeof("write test") = 11 (๋ฌธ์ž 10 + ๋„ 1)
    strlen("write test") = 10 (๋„ ์ œ์™ธ) → ํ…์ŠคํŠธ ํŒŒ์ผ์— ๋ณดํ†ต ์ด๊ฑธ ์‚ฌ์šฉ.
  • ์ƒˆ๋กœ ์“ฐ๊ธฐ: O_TRUNC / ์ด์–ด ์“ฐ๊ธฐ: O_APPEND.
  • ์ฝ์ง€ ์•Š์œผ๋ฉด O_WRONLY๊ฐ€ ์ ์ ˆ.
  • ์‹œ์Šคํ…œ ํ˜ธ์ถœ์€ ํ•ญ์ƒ ๋ฐ˜ํ™˜๊ฐ’ ์ฒดํฌ(ํŠนํžˆ open, write, close).

 

์ปดํŒŒ์ผ/์‹คํ–‰ ์˜ˆ

gcc -Wall -Wextra -O2 write_test.c -o write_test
./write_test
cat test.txt   # → write test
ls -l test.txt # → ๊ถŒํ•œ์ด ๋Œ€๋žต -rw-r--r-- (umask์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Œ)

Wall -Wextra -02๊ฐ€ ๋ญ์•ผ? ๊ผญ ์จ์•ผ๋ผ?

ChatGPT์˜ ๋ง:

์ข‹์•„, ์ด ๋ถ€๋ถ„์€ ์ปดํŒŒ์ผ ์˜ต์…˜์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ์•ผ ๐Ÿ˜Š
์ฝ”๋“œ ์‹คํ–‰์—๋Š” ๊ผญ ํ•„์š”ํ•˜์ง€๋Š” ์•Š์ง€๋งŒ, **“์ข‹์€ ์Šต๊ด€”**์ด๋ผ ์ž์ฃผ ์”€.
ํ•˜๋‚˜์”ฉ ํ’€์–ด์„œ ๋ณผ๊ฒŒ ๐Ÿ‘‡


๐Ÿงฉ -Wall

๋œป: “๋ชจ๋“  ๊ฒฝ๊ณ (Warning All)”
โžก๏ธ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์ปดํŒŒ์ผ ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๋ผ๋Š” ๋œป์ด์•ผ.

์˜ˆ๋ฅผ ๋“ค์–ด

 
int a; printf("%d\n", a); // a๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜์ง€ ์•Š์Œ

์ด๋Ÿฐ ์ฝ”๋“œ๊ฐ€ ์žˆ์œผ๋ฉด,
gcc main.c ๋กœ๋Š” ์กฐ์šฉํžˆ ๋„˜์–ด๊ฐ€์ง€๋งŒ
gcc -Wall main.c ๋กœ ํ•˜๋ฉด

warning: 'a' is used uninitialized in this function

์ด๋Ÿฐ ๊ฒฝ๊ณ ๊ฐ€ ๋œจ์ง€!
๐Ÿ‘‰ ์ฆ‰, ์‹ค์ˆ˜๋ฅผ ๋ฏธ๋ฆฌ ์žก์•„์ค˜์„œ ๋ฒ„๊ทธ ์˜ˆ๋ฐฉ์— ๋„์›€๋ผ.


๐Ÿงฉ -Wextra

๋œป: “์ถ”๊ฐ€ ๊ฒฝ๊ณ (Warning Extra)”
โžก๏ธ -Wall์ด ์žก์ง€ ๋ชปํ•˜๋Š” ์กฐ๊ธˆ ๋” ์„ธ๋ฐ€ํ•œ ๊ฒฝ๊ณ ๋“ค๊นŒ์ง€ ํ‘œ์‹œํ•ด ์ค˜.

์˜ˆ๋ฅผ ๋“ค์–ด ํ•จ์ˆ˜ ์ธ์ž ๊ฐœ์ˆ˜๊ฐ€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ๋‚˜,
์กฐ๊ฑด๋ฌธ ์•ˆ์—์„œ ๋ถ€์ฃผ์˜ํ•˜๊ฒŒ ๋ณ€์ˆ˜ ๋น„๊ตํ•  ๋•Œ ๋“ฑ๋“ฑ.

๐Ÿ’ก ์ฆ‰,
-Wall = ๊ธฐ๋ณธ์ ์ธ ๊ฒฝ๊ณ 
-Wextra = ์„ธ์„ธํ•œ ๊ฒฝ๊ณ ๊นŒ์ง€


โšก -O2

๋œป: “์ตœ์ ํ™” ๋ ˆ๋ฒจ 2” (Optimization level 2)

โžก๏ธ ์ปดํŒŒ์ผ๋Ÿฌ์—๊ฒŒ “์‹คํ–‰ ์†๋„๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ๋ฅผ ์ตœ์ ํ™”ํ•ด์ค˜” ๋ผ๋Š” ์ง€์‹œ์•ผ.

  • -O0 : (๊ธฐ๋ณธ) ์ตœ์ ํ™” ์•ˆ ํ•จ → ๋””๋ฒ„๊น…์— ์œ ๋ฆฌ
  • -O1 : ๊ฐ€๋ฒผ์šด ์ตœ์ ํ™”
  • -O2 : ๋Œ€๋ถ€๋ถ„์˜ ์ƒํ™ฉ์—์„œ ์ข‹์€ ์„ฑ๋Šฅ๊ณผ ์•ˆ์ •์„ฑ
  • -O3 : ๊ณต๊ฒฉ์ ์ธ ์ตœ์ ํ™” (๋งค์šฐ ๋น ๋ฅด์ง€๋งŒ ์ฝ”๋“œ๊ฐ€ ์ปค์งˆ ์ˆ˜ ์žˆ์Œ)

๊ทธ๋ž˜์„œ ๋ณดํ†ต ๊ฐœ๋ฐœ ์ค‘์—”

  • ๋””๋ฒ„๊น…ํ•  ๋• -O0 (๋ผ์ธ๋ฒˆํ˜ธ ๊ทธ๋Œ€๋กœ ์œ ์ง€๋จ)
  • ์™„์„ฑ ํ›„ ๋ฐฐํฌ์šฉ์œผ๋กœ๋Š” -O2

โœ… ๊ฒฐ๋ก 

์˜ต์…˜์˜๋ฏธ๊ผญ ์จ์•ผ ํ•˜๋‚˜?์ถ”์ฒœ ์—ฌ๋ถ€
-Wall ์ผ๋ฐ˜ ๊ฒฝ๊ณ  ์ „๋ถ€ ์ผœ๊ธฐ โŒ(ํ•„์ˆ˜ ์•„๋‹˜) โœ… ๋งค์šฐ ์ถ”์ฒœ
-Wextra ์ถ”๊ฐ€ ๊ฒฝ๊ณ  ์ผœ๊ธฐ โŒ โœ… ์ถ”์ฒœ
-O2 ์‹คํ–‰ ์†๋„ ์ตœ์ ํ™” โŒ โœ… ์ถ”์ฒœ (์™„์„ฑ ํ›„)

๐Ÿ’ฌ ์ •๋ฆฌํ•˜๋ฉด

"ํ•„์ˆ˜๋Š” ์•„๋‹ˆ์ง€๋งŒ, ๊ฐœ๋ฐœํ•  ๋•Œ ํ•ญ์ƒ -Wall -Wextra -O2๋ฅผ ๋ถ™์ด๋Š” ๊ฑด ์ข‹์€ ์Šต๊ด€"

๐Ÿ‘‰ ์‹ค์ˆ˜ ๋ฏธ๋ฆฌ ์žก๊ณ , ์‹คํ–‰ ์†๋„๋„ ๋น ๋ฅด๊ฒŒ ๋งŒ๋“ค์–ด์ค˜.