[CS50 | 모두를 위한 컴퓨터 과학] C - C기초
주어진 학습목표를 이루기 위해서 이해를 우선으로 두고 공부할 것이다.
들어가기 전에 학습목표, 핵심 단어는 강의 자료를 가져올 것이고 그 이후로는 내가 이해하고 공부한 부분을 직접 적고, 마지막에는 배운 점이나 느낀 점을 적도록 하겠다.
들어가기 전에
그래픽 인터페이스로 상호작용성이 좋은 스크래치로도 간단한 프로그래밍을 할 수 있지만, 텍스트 기반의 프로그래밍 언어를 이용해도 컴퓨터에게 동일한 일을 하게 할 수 있습니다. 가장 널리 쓰이는 프로그래밍 언어중 하나인 C의 기초를 배워보겠습니다.
학습 목표
C로 “hello, world”를 출력하는 프로그램을 만들 수 있습니다.
핵심 단어
- stdio.h
- clang
- 컴파일러
stdio.h
C는 아주 오래되고 전통적인 순수 텍스트 기반의 언어이다. 아래는 "hello, world"를 줄바꿈으로 출력하는 코드이다.
#include <stdio.h> : "stdio.h"라는 이름의 파일을 찾아서 "print"함수에 접근시켜준다.
int main(void)'시작한다'라는 의미를 담고있다.
앞으로 작성할 코드는 int main(void) {} 중괄호 사이에 작성하게 된다.
#include <stdio.h>
int main(void)
{
printf("hello, world\n");
}
컴파일러
위의 코드는 우리가 직접 작성한 "소스코드"라고 한다. 하지만 컴퓨터는 이 문자를 곧이 곧대로 이해할 수 없기 때문에 2진수로 바꿔서 컴퓨터에게 전송해야한다. 그 2진수로 작성된 코드는 "머신코드"라고 하며 이 과정을 컴파일러라는 프로그램이 수행해준다.

"clang"이라는 컴파일러로 "hello.c"라는 코드를 컴파일 하라는 명령어이다.
$ clang hello.c
그 결과로 a.out이라는 파일이 생성된다. 이는 머신코드이다.
컴퓨터가 현재 디렉토리에 있는 a.out이라는 프로그램을 실행시켜준다. 맨앞의 .은 현재 폴더를 의미한다.
$ ./a.out
물론 이런식으로 다른 이름의 머신파일을 저장할 수 도있다.
$ clang -o hello hello.c
// 실행
$ ./hello
명령어 프롬프트를 사용해 리스트나 파일을 삭제 할 수 있다. (ls, rm)
ls를 통해 현재 디렉토리에 있는 파일의 목록이 나온다. 파일명 뒤에 *은 실행할 수 있는 머신파일을 의미한다.
$ ls
// a.out* hello* hello.c
생각해보기
C언어는 처음이지만 이번 강의를 통해 가볍게 한 번 접해보는 것도 아주 좋은 기회라는 생각이 들었다. (물론 가볍게 배울 수 있는 언어는 아니지만..? )
그동안 공부하면서 '이진수로만 이뤄진 컴퓨터가 어떻게 내가 쓰는 코드를 이해하지?' 라는 것에 대해 의문을 가져본적이 없었다.
하지만 첫 강의부터 듣다보니 그 궁금증이 생기고, 오늘 컴파일러라는 프로그램을 배우면서 좀 더 컴퓨터를 이해할 수 있게 되었다.
Reference : CS50