๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ’ป/CS

CS50_๋ฐฐ์—ด

1) ์ปดํŒŒ์ผ๋ง

 

make๋‚˜ clang์„ ์‚ฌ์šฉํ•ด์„œ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•  ๋•Œ ๊ฑฐ์น˜๋Š” ๋„ค๋‹จ๊ณ„

  • ์ „์ฒ˜๋ฆฌ
  • # ์œผ๋กœ ์‹œ์ž‘๋˜๋Š” C ์†Œ์Šค ์ฝ”๋“œ๋Š” ์ „์ฒ˜๋ฆฌ๊ธฐ์—๊ฒŒ ์‹ค์งˆ์ ์ธ ์ปดํŒŒ์ผ์ด ์ด๋ฃจ์–ด์ง€๊ธฐ ์ „์— ๋ฌด์–ธ๊ฐ€๋ฅผ ์‹คํ–‰ํ•˜๋ผ๊ณ  ์•Œ๋ ค์คŒ.
  • ์˜ˆ๋ฅผ ๋“ค์–ด, #include๋Š” ์ „์ฒ˜๋ฆฌ๊ธฐ์—๊ฒŒ ๋‹ค๋ฅธ ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ํฌํ•จ์‹œํ‚ค๋ผ๊ณ  ์•Œ๋ ค์คŒ.
  • ํ”„๋กœ๊ทธ๋žจ์˜ ์†Œ์Šค ์ฝ”๋“œ์— #include ์™€ ๊ฐ™์€ ์ค„์„ ํฌํ•จํ•˜๋ฉด, ์ „์ฒ˜๋ฆฌ๊ธฐ๋Š” ์ƒˆ๋กœ์šด ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋Š”๋ฐ ์ด ํŒŒ์ผ์€ ์—ฌ์ „ํžˆ C ์†Œ์Šค ์ฝ”๋“œ ํ˜•ํƒœ์ด๋ฉฐ stdio.h ํŒŒ์ผ์˜ ๋‚ด์šฉ์ด #include ๋ถ€๋ถ„์— ํฌํ•จ๋จ.
  • ์ปดํŒŒ์ผ๋ง
  • ์ปดํŒŒ์ผ๋Ÿฌ๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ํ”„๋กœ๊ทธ๋žจ์€ C ์ฝ”๋“œ๋ฅผ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋ผ๋Š” ์ €์ˆ˜์ค€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ์ปดํŒŒ์ผ.
  • ์–ด์…ˆ๋ธ”๋ฆฌ๋Š” C๋ณด๋‹ค ์—ฐ์‚ฐ์˜ ์ข…๋ฅ˜๊ฐ€ ํ›จ์”ฌ ์ ์ง€๋งŒ, ์—ฌ๋Ÿฌ ์—ฐ์‚ฐ๋“ค์ด ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋ฉด C์—์„œ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ๋“ค์„ ์ˆ˜ํ–‰.
  • C ์ฝ”๋“œ๋ฅผ ์–ด์…ˆ๋ธ”๋ฆฌ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜์‹œ์ผœ์คŒ์œผ๋กœ์จ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ปดํ“จํ„ฐ๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด์™€ ์ตœ๋Œ€ํ•œ ๊ฐ€๊นŒ์šด ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋งŒ๋“ค์–ด์คŒ.
  • ์–ด์…ˆ๋ธ”๋ง
  • ์–ด์…ˆ๋ธ”๋ฆฌ ์ฝ”๋“œ๋ฅผ ์˜ค๋ธŒ์ ํŠธ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜์‹œํ‚ค๋Š” ๊ฒƒ.
  • ์ปดํ“จํ„ฐ์˜ ์ค‘์•™์ฒ˜๋ฆฌ์žฅ์น˜๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์„ ์–ด๋–ป๊ฒŒ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์–ด ํ˜•ํƒœ์ธ ์—ฐ์†๋œ 0๊ณผ 1๋“ค๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ์ž‘์—…. ์ด ๋ณ€ํ™˜์ž‘์—…์€ ์–ด์…ˆ๋ธ”๋Ÿฌ๋ผ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์ˆ˜ํ–‰.
  • ๋งํ‚น
  • ๋ง์ปค๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋‹ค๋ฅธ ์˜ค๋ธŒ์ ํŠธ ์ฝ”๋“œ ํŒŒ์ผ์„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ•˜๋‚˜์˜ ์˜ค๋ธŒ์ ํŠธ ์ฝ”๋“œ ํŒŒ์ผ๋กœ ํ•ฉ์นจ.
  • ์˜ˆ๋ฅผ ๋“ค์–ด, ์ปดํŒŒ์ผ์„ ํ•˜๋Š” ๋™์•ˆ์— CS50 ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งํฌํ•˜๋ฉด ์˜ค๋ธŒ์ ํŠธ ์ฝ”๋“œ๋Š” GetInt()๋‚˜ GetString() ๊ฐ™์€ ํ•จ์ˆ˜๋ฅผ ์–ด๋–ป๊ฒŒ ์‹คํ–‰ํ•  ์ง€ ์•Œ ์ˆ˜ ์žˆ๊ฒŒ ๋จ.

 

2) ๋””๋ฒ„๊น…

 

๋ฒ„๊ทธ(bug)๋Š” ์ฝ”๋“œ์— ๋“ค์–ด์žˆ๋Š” ์˜ค๋ฅ˜.

๋ฒ„๊ทธ๋กœ ์ธํ•ด ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰์— ์‹คํŒจํ•˜๊ฑฐ๋‚˜ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์›ํ•˜๋Š” ๋Œ€๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š๊ฒŒ ๋จ.

 

๋””๋ฒ„๊น…(debugging)์€ ์ฝ”๋“œ์— ์žˆ๋Š” ๋ฒ„๊ทธ๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ๊ณ ์น˜๋Š” ๊ณผ์ •.

 

  • help50: ์ปดํŒŒ์ผ์‹œ ์ƒ๊ธฐ๋Š” ์˜ค๋ฅ˜ ํ•ด์„
  • debug50: ๋ณ€์ˆ˜์˜ ๊ฐ’ ํ™•์ธ or ๋ธŒ๋ ˆ์ดํฌํฌ์ธํŠธ๋ถ€ํ„ฐ ํ•œ ์ค„ ์”ฉ ์ฝ”๋“œ ์‹คํ–‰ ๊ฐ€๋Šฅ

 

3) ์ฝ”๋“œ์˜ ๋””์ž์ธ

style50

 

4) ๋ฐฐ์—ด(1)

 

  • ๋ฉ”๋ชจ๋ฆฌ
  • bool: ๋ถˆ๋ฆฌ์–ธ, 1๋ฐ”์ดํŠธ
  • char: ๋ฌธ์ž, 1๋ฐ”์ดํŠธ
  • int: ์ •์ˆ˜, 4๋ฐ”์ดํŠธ
  • float: ์‹ค์ˆ˜, 4๋ฐ”์ดํŠธ
  • long: (๋” ํฐ) ์ •์ˆ˜, 8๋ฐ”์ดํŠธ
  • double: (๋” ํฐ) ์‹ค์ˆ˜, 8๋ฐ”์ดํŠธ
  • string: ๋ฌธ์ž์—ด, ?๋ฐ”์ดํŠธ

 

5) ๋ฐฐ์—ด(2)

  • ์ „์—ญ๋ณ€์ˆ˜

์ƒ์ˆ˜ ์„ ์–ธ 

const int N = 3;
int main(void)
{
    // ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์ ์ˆ˜์˜ ๊ฐฏ์ˆ˜ ์ž…๋ ฅ
    int n = get_int("Scores:  ");

    // ์ ์ˆ˜ ๋ฐฐ์—ด ์„ ์–ธ ๋ฐ ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ๊ฐ’ ์ž…๋ ฅ
    int scores[n];
    for (int i = 0; i < n; i++)
    {
        scores[i] = get_int("Score %i: ", i + 1);
    }

    // ํ‰๊ท  ์ถœ๋ ฅ
    printf("Average: %.1f\n", average(n, scores));
}

 

6) ๋ฌธ์ž์—ด๊ณผ ๋ฐฐ์—ด

 

 ๋ฌธ์ž์—ด(string) ์ž๋ฃŒํ˜•์˜ ๋ฐ์ดํ„ฐ: ๋ฌธ์ž(char) ์ž๋ฃŒํ˜•์˜ ๋ฐ์ดํ„ฐ๋“ค์˜ ๋ฐฐ์—ด

๊ฐ€์žฅ ๋์˜  ‘\0’ ์€ ๋ฌธ์ž์—ด์˜ ๋์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋„ ์ข…๋‹จ ๋ฌธ์ž

 

7) ๋ฌธ์ž์—ด์˜ ํ™œ์šฉ

  • ๋ฌธ์ž์—ด์˜ ๊ธธ์ด
int main(void)
{
    string s = get_string("Input: ");
    printf("Output:\n");
    for (int i = 0, n = strlen(s); i < n; i++)
    {
        printf("%c\n", s[i]);
    }
}
  • ๋ฌธ์ž์—ด ๋Œ€๋ฌธ์ž ๋ณ€ํ™˜
int main(void)
{
    string s = get_string("Before: ");
    printf("After:  ");
    for (int i = 0, n = strlen(s); i < n; i++)
    {
        printf("%c", toupper(s[i]));
    }
    printf("\n");
}
  • string.h
  • ๋ฌธ์ž์—ด๊ณผ ๊ด€๋ จ๋œ ๋‹ค์–‘ํ•œ ํ•จ์ˆ˜๋“ค์ด ์กด์žฌ. ๋ฌธ์ž์—ด ๊ธธ์ด, ๋ฌธ์ž์—ด ๋ถ„๋ฆฌ, ๋ฌธ์ž์—ด ๋ณต์‚ฌ ๋“ฑ
  • ctype.h
  • ๋ฌธ์ž์—ด์ด ์•„๋‹Œ ๋ฌธ์ž์™€ ๊ด€๋ จ๋œ ๋‹ค์–‘ํ•œ ํ•จ์ˆ˜๋“ค์ด ์กด์žฌ. ๋ฌธ์ž ๋ณ€ํ™˜, ๋ฌธ์ž ๋น„๊ต ๋“ฑ

 

8) ๋ช…๋ นํ–‰ ์ธ์ž

int main(int argc, string argv[])
{
    if (argc == 2)
    {
        printf("hello, %s\n", argv[1]);
    }
    else
    {
        printf("hello, world\n");
    }
}

์ฒซ๋ฒˆ์งธ ๋ณ€์ˆ˜ argc๋Š” main ํ•จ์ˆ˜๊ฐ€ ๋ฐ›๊ฒŒ ๋  ์ž…๋ ฅ์˜ ๊ฐœ์ˆ˜.

๋‘๋ฒˆ์งธ ๋ณ€์ˆ˜ argv[]๋Š” ๊ทธ ์ž…๋ ฅ์ด ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๋ฐฐ์—ด.

  • argv[0]๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์˜ ์ด๋ฆ„์œผ๋กœ ์ €์žฅ

'๐Ÿ’ป > CS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[์šด์˜์ฒด์ œ] Synchronization - 1  (0) 2022.12.16
[์šด์˜์ฒด์ œ] Real-time System์ด๋ž€?  (1) 2022.12.16
CS ์ฐธ๊ณ   (0) 2022.06.12
CS50_C์–ธ์–ด  (0) 2022.06.12
CS50_์ปดํ“จํŒ… ์‚ฌ๊ณ   (0) 2022.06.12