1. 출력
- 프로그래밍의 시작은 역시 출력이다. C언어로 "hello, world"를 출력하려면 어떻게 해야할지 천천히 살펴보자.
#include <stdio.h>
int main(void)
{
printf("hello, world\n");
}
- 가장 첫줄의 include <stdio.h>는 출력과 관련된 C언어의 표준라이브러리인 stdio.h를 불러온다는 의미이다.
- int main(void){} 는 코드의 시작을 알린다고 보면된다. 앞으로 작성할 코드 모두 이 괄호안에 작성하게 된다.
- printf()는 출력함수이며 괄호 안에 쌍따옴표로 문장을 적을 수 있다. 이 때 \n 은 개행문자로써 출력후 문단을 넘기는 역할, 즉 엔터를 쳐주는 역할이다.
- 그리고 끝에 ;(세미콜론)은 우리가 문장을 작성할 때 .(마침표)로 끝을 내는 것과 동일한 역할이다. 꼭 빼먹지 말고 끝마다 챙겨주자.
2. 컴파일러
* 소스코드
- 우리가 위에서 작성한 코드를 소스코드라고 한다.
- 소스코드는 2진수가 아니므로 곧바로 컴퓨터가 이해할 수 없다.
* 머신코드
- 2진수로 작성된 코드로써 컴퓨터가 이해하고 실행할 수 있다.
* 컴파일러
- 우리가 작성한 소스코드를 머신코드로 변환시켜주는 프로그램이다.
- 코드를 print.c라는 파일에 미리 작성하였다. 이 때 확장자가 반드시 .c 여야 C언어임을 유의하자.
- 터미널에 clang 명령어로 'clang'컴파일러를 작동시킨다.
- 그럼 자동으로 a.out이라는 파일이 생기는데 이것이 머신코드이다.
- 참고로 원하는 파일명으로 생성하고 싶을 경우 -o 명령어를 사용한다. clang -o p.out print.c 라고 작성하면 p.out이라는 파일이 생길 것이다.
- 머신코드를 실행 시키기위해 터미널에서 a.out을 실행시키면 우리가 원하는 대로 hello, world를 출력한다.
- 터미널에서 .은 현재 디렉토리를 의미한다. /는 디렉토리나 파일의 구분이라고 보면 된다.
3. 문자열
- 이번에는 단순한 출력이 아니라 사용자에게 문자열(string)을 받아서 그것을 이용해서 출력을 해보자.
- 다음은 사용자에게 이름을 묻고, 그 이름에 인사를 하는 코드이다.
#include <cs50.h>
#include <stdio.h>
int main(void)
{
string name = get_string("What's your name?\n");
printf("hello, %s\n", name);
}
- 먼저 cs50.h 라이브러리를 불러왔다. 여기에 string이라는 문자열 형식과 get_string과 같은 함수가 담겨있다.
- name이라는 변수에 사용자에게 받은 변수를 할당할 것이다. 할당을 할 때에는 =를 사용한다. 그리고 문자열을 받을 것이기 때문에 변수앞에 string이라고 선언을 해야한다.
- get_string()함수로 사용자에게 문자열을 받도록하고 안에는 사용자에게 보여줄 문구를 입력한다.
- 출력문안에 %s를 넣어서 string값이 들어갈 위치를 표시하고 두 번째 인자로 미리 받았던 변수를 넣으면 자동으로 %s의 위치에 들어가게 된다.
- 가장 위에서 했을 때와 달리 컴파일을 할 때 약간 주의해야할 것이 있다. clang을 사용하면 cs50라이브러리를 바로 찾지 못한다. 만일 clang을 사용하려면 $ clang -o name name.c -lcs50 를 입력해야한다. -l 명령어로 우리가 넣은 cs50라이브러리 파일까지 합치는 것이다.
- 그러나 위의 방식은 조금 복잡하다. 그 대신에 make 명령어를 쓰면 자동으로 찾아서 컴파일을 진행해 준다.
참고
이 글은 하버드 대학교 David Malan 교수의 CS50 강의를 수강 후 정리하며 쓴 글입니다. 코드는 C언어로 작성되었으며, 개발환경은 CS50 Sandbox에 최적화되어 있습니다. 일부 라이브러리는 다른 환경에서 별도의 설정이 필요할 수 있습니다.
CS50 공식사이트
부스트코스
CS50 Sandbox
'Language > C' 카테고리의 다른 글
<C언어 기초> 06. 배열 (0) | 2021.01.27 |
---|---|
<C언어 기초> 05. 사용자 정의 함수 (0) | 2021.01.24 |
<C언어 기초> 04. 자료형과 연산자 (2) | 2021.01.23 |
<C언어 기초> 03. 루프 (0) | 2021.01.22 |
<C언어 기초> 02. 조건문 (0) | 2021.01.21 |