티스토리 뷰

반응형

 

 

주어진 학습목표를 이루기 위해서 이해를 우선으로 두고 공부할 것이다.

들어가기 전에 학습목표, 핵심 단어는 강의 자료를 가져올 것이고 그 이후로는 내가 이해하고 공부한 부분을 직접 적고, 마지막에는 배운 점이나 느낀 점을 적도록 하겠다. 

 

 


 

들어가기 전에

문자열을 다루기 위해서는 문자열 형식을 가진 변수가 필요합니다. 사용자로부터 문자열을 입력받고 이를 다른 문자열과 합쳐서 출력하는 프로그램을 C로 작성해보겠습니다.  

 

학습 목표

C로 문자열 형식을 가진 변수를 선언하고 출력하는 프로그램을 만들 수 있습니다.

 

핵심 단어

  • 형식지정자
  • string
  • make

 


 

형식지정자

 

 

지난 스크래치 강의에서 유저의 이름을 입력으로 받고, 그 유저의 이름을 불러 인사를 헀다. 이를 C로 해보면 다음과 같다. 

 

스크래치의 ask함수와 가장 비슷한 것은 get_String함수이다. String은 단어나 구절, 문장을 부르는 말이다. 

 

이때 C에서 출력을 하려면 answer와 같은 변수를 지정 할 수 있다. 하지만 C에서는 '어떤' 변수인지 정확히 명시해줭야한다. 

저장하고자 하는 값이 문자열이라면 변수 앞에 string을 붙여 알려준다. 이때 string을 형식지정자라고 한다. 

 

프로그래밍 언어에서 =은 같다라는 의미가 아닌 오른쪽에서 왼쪽으로 가는 화살표와 같다고 생각하면 된다. 오른쪽에 있는 것을 왼쪽 변수에 할당해준다고 해서 이를 할당 연산자라고 한다. 

 

이제 아래와 같은 코드로 인해 컴퓨터 메모리 어딘가에 유저의 이름이 저장되어있다. 그럼 이것을 출력하려면 어떻게해야할까?

 

 

 

answer은 변수이기 때문에 printf("hello, answer"); 같이 문자열 안에 담아버리면 문자열 그대로 출력된다. 

따라서 문자열 안에서 변수를 출력하고 싶을 때는 %를 사용해준다. 우리는 이름이라는 문자열(String)을 받기 때문에 s% 라고 붙여주면 된다. 

#include <stdio.h>

int main(void)
{
    printf("hello, world\n");
}

 

 

컴파일

지난 시간에 따르면 아래와 같은 명령어를 입력하면 컴파일이 되어야 한다. 참고로 여기서 -o string은 string.c를 string.out이라는 머신코드로 저장하게 해준는 명령어이다. 물론 다른 이름으로 저장해줄 수 있고 저렇게 안해줘도 저장은 해주지만 a.out과 같이 이름이 자동생성 되기 때문에 정해주는게 낫다. 

$ clang -o string string.c

 

하지만 이 상태로라면 오류가 날 것이다.   get_string이라는 함수는 cs50.h라는 파일안에 저장되어있는데 그걸 불러오지 않았기 때문이다. 그래서 문자열이 뭔지 컴퓨터가 알지 못해 오류 코드가 나온 것이다. 

#include <stdio.h>

int main(void)
{
    string answer = get_string("What's your name?\n")
    printf("hello, %s\n", answer);
}

 

아래와 같이 cs.50 파일을 불러온 후 다시 명령어를 입력해도 여전히 오류메세지를 볼 수 있을 것이다. 이는 터미널 창에서 연결을 하라는 명령어를 해주지 않았기 때문이다 .

#include <cs50.h>
#include <stdio.h>

int main(void)
{
    string answer = get_string("What's your name?\n")
    printf("hello, %s\n", answer);
}

 

 

따라서 아래와 같은 명령어로 cs50을 연결해준다. 

-lcs50은 "link"라는 의미를 지닌 -l 라는 인자에 우리가 추가로 포함한 "cs50"을 합친 것이다. 이를 통해 컴파일시 cs50파일을 연결하도록 알려줄 수 있다. 코드창에 불러오는 것은 소스코드를 추가해줬던 것이고 이 작업은 두 코드가 한 프로그램으로 실행 될 수 있도록 내 코드와 cs50의 소스코드를 연결(link)해주는 작업이라고 이해하면 된다. 

 

$ clang -o string string.c -lcs50

 

 

약간은 복잡한 이 과정 대신 make명령어를 통해 간단하게 컴파일을 수행할 수 있다. (다행이다..😀) 

$make string

 

 


 

생각해보기

 
"좋아하는 동물을 알려주세요"로 질문하여 동물 이름을 animal이라는 변수에 저장하고, 이를 "내가 좋아하는 동물은"으로 출력해주는 코드를 작성해보세요.

#include <cs50.h>
#include <stdio.h>

int main(void)
{
    string answer = get_string("좋아하는 동물을 알려주세요\n");
    printf("내가 좋아하는 동물은, %s\n", animal);
}

 

C에서 include가 자바스크립트에서 import해오는 것과 같이 이해해도 되는걸까? 그 깊이와는 조금 차이가 있는 걸까? 

지금까지 봤을 때 C언어는 알려줘야하는 부분이 많은 것 같다. 오래된 언어라서 그런건가..

타입을 항상 명시해줘야하는 것도 알고 있었는데 이번 기회에 명시하는 법까지 알아서 좋았다. 타입선언이 없는 자바스크립트라 꼭 타입스크립트까지 익혀두라는 소리를 많이 들었는데 나중에 꼭 배워야겠다. 

 

 



Reference : CS50



반응형