[CS] C : 기초, 문자열

hee.moon·2022년 8월 27일
0

Computer Science

목록 보기
4/15
post-thumbnail
/* 모두를 위한 컴퓨터 과학(CS50 2019) 정리본입니다. */

C에 대해서 처음 공부해봤다. 1972년에 '데니스 리치'라는 사람이 만든 프로그래밍 언어라고 한다. C는 세계적으로 많이 쓰이는 프로그래밍 언어 중 하나이다. 대학생 때 내 다음 학번부터 인문계 포함 전체 신입생들이 필수로 C 언어 수업(C++인가?)을 듣게 했던 거 같다. 그만큼 컴퓨터 공부의 시작은 C로 하는 곳이 많은 것 같다.


1. C언어


C는 전통적인 순수 텍스트 기반의 언어이다. 강의에서는 스크래치의 블록과 비교해서 알려주지만, 정리할 때는 코드로만 정리하려고 한다.

#include <stdio.h>

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

첫줄 #include <stdio.h>는 "stdio.h"라는 이름의 파일을 찾아서 printf함수에 접근할 수 있도록 해준다.
int main(void)는 시작한다는 의미를 가지고 있다. 내가 작성할 코드는 모두 이 int main(void) {}의 중괄호 사이에 작성하게 된다.
printf("hello, world\n")은 hello, world(줄바꿈)를 출력하는 함수이다.

C로 작성한 코드는 파일이름.c로 저장해야 한다. 위 코드를 hello.c로 저장한다(다른 파일명도 상관 없다).


2. 컴파일러


우리가 직접 작성한 코드를 source code라고 부른다. 이를 2진수로 작성된 machine code로 변환해야 컴퓨터가 이해할 수 있다. 이 작업을 컴파일러라는 프로그램이 수행해준다.
터미널 창에 아래 명령어를 입력한다. clang이라는 컴파일로 위에서 저장한 hello.c를 컴파일하라는 의미이다. 엔터를 누르면 a.out이라는 파일이 생성된다.

$ clang hello.c

그 다음 아래 명령어를 실행하면 a.out이 실행되는 것을 확인할 수 있다. 두번째 줄은 결과값이다.

$ ./a.out
hello, world

3. 문자열


printf 말고 새로운 get_string 함수를 배워보자.

get_string() : 프롬프트에 사용자의 입력을 받아서 그 입력을 반환하는 함수

사용자의 이름을 받아서 저장할 변수를 answer이라고 하자.
여기서 주의할 점이 있다. C는 오래된 언어이기 때문에 변수가 저장하는 데이터의 종류를 정확하게 명시해줘야한다. 즉, 우리가 변수로 저장하고자 하는 값의 종류가 string이라는 것을 명시해야 한다. 이때 string을 '형식지정자'라고 한다(형식지정자에는 string 말고도 여러가지가 있다).

get_string함수가 사용자의 이름을 반환하면 그 이름을 answer이라는 변수에 저장하도록 해보자.

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

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

3-1. %s 의미

printf("hello, answer")로 printf 코드를 작성하고 실행하면 answer이 그대로 출력된다. 우리의 의도는 answer이라는 변수에 들어있는 이름을 출력하는 것이기 때문에 %를 사용해줘야 하며, 문자열을 받기 때문에 string의 s를 %뒤에 붙여서 인자를 받아줘야 한다.


3-2. cs50.h는 왜?

#include <cs50.h>는 cs50.h 파일 안에 string이라는 문자열 형식과 get_string이라는 함수에 대한 코드가 포함되어 있기 때문에 작성해준다.

터미널 창에 아래 명령어를 입력하면 컴파일을 할 수 있다.

$ clang -o string string.c -lcs50

여기서 -o string은 string.c를 string.out이라는 machine code로 저장하도록 하는 명령어다. -lcs50은 link라는 의미를 가진 -l이라는 인자에 우리가 추가로 포함한 cs50 파일을 합친 것이다. 이를 통해 컴파일시 cs50 파일을 연결하도록 알려줄 수 있다.

위의 복잡한 명령어 대신에 make 명령어를 통해 간단하게 컴파일할 수 있다!

$ make string

3-3. 출력화면

$ ./string
What's your name?
moon
hello, moon
profile
Frontend Engineer

0개의 댓글

관련 채용 정보