본문 바로가기

Language/C

<C언어 기초> 01 출력과 문자열

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

Introduction to the intellectual enterprises of computer science and the art of programming. This course teaches students how to think algorithmically and solve problems efficiently. Topics include abstraction, algorithms, data structures, encapsulation, r

cs50.harvard.edu

 

부스트코스

 

다 함께 배우고 성장하는 부스트코스

부스트코스(boostcourse)는 모두 함께 배우고 성장하는 비영리 SW 온라인 플랫폼입니다.

www.boostcourse.org

 

CS50 Sandbox

 

CS50 Sandbox

Temporary programming environments for students and teachers.

sandbox.cs50.io

 

 

 

'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