![[CS50] C언어 - C 기초, 컴파일러](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdi99p4%2FbtsHSTFeREZ%2FukuvWZHe0PtolBg6ZVQgeK%2Fimg.jpg)
C는 아주 오래되고 전통적인 순수 텍스트 기반의 언어이다.
사전 지식이 없다면 어렵게 느껴질 수 있다. 특유의 이상한 영어들이 적혀있는 것을 보면 두려움이 생길 수 있다.
하지만 강의를 듣다보면 코드는 물론이고 그 이상을 이해할 수 있을 것이다.
스크래치와 C언어
우선 검은색 바탕에 있는 이상한 글씨들은 아래의 스크래치 블록과 결과적으로 정확히 같다.
int main(void)는 스크래치의 “when (green flag) clicked” 블록과 같은 역할을 한다. 즉, ‘시작한다’의 의미를 가지고 있다.
앞으로 C언어에서 작성할 코드 전부는 int main(void) {}
의 중괄호 안에 작성할 것이다.
그 밑에 보라색 블록을 보게 되면 “say”라는 블록이 있을 것이다.
C언어에서는 printf();
라는 코드 안에 작성한다. 이 때 텍스트에 쌍따옴표(””)로 감싸야 한다.
마지막으로 C로 작성한 코드는 “파일이름.c”로 저장해야 한다.
확장자 .c
는 C언어로 작성된 코드라는 뜻이다.
컴파일러
우여곡절 끝에 아래처럼 코드를 작성했다.
#include <stdio.h>
int main() {
printf("hello, world");
}
그럼 이걸 이제 0과 1로 번역해야 한다. 컴퓨터가 이해할 수 있도록 하기 위해서 2진법으로 고쳐야 한다는 이야기이다.
하지만 인간이 할 수 없으니 이 고치는 과정에서 중간단계가 필요하다.
일반화하면, 소스코드를 입력받아 머신코드라고 하는 출력을 내보내는 일종의 프로그램이 필요하다.
소스코드는 C, Python, Java와 같은 언어들로 작성한 코드이다.
머신코드는 실제로 이해하는 0과 1의 조합이다.
따라서 소스코드를 머신코드로 번역을 수행해주는 소프트웨어인 컴파일러가 필요하다.
(Visual Studio Code 기준) 아래를 보게 되면 터미널 창을 볼 수 있다.
뭔가를 입력하라고 하고 말하는 듯이 커서가 깜박이고 있다.
clang이라는 컴파일러를 사용해서 소스코드를 머신코드로 번역할 수 있다.
터미널에 clang hello.c라고 입력해보자.
엔터를 치는 순간 뭔가가 생긴다.
왼쪽에 보게 되면 a.out
이라는 파일이 하나 생겼다.
이 파일은 어셈블리 출력이지만 어쨌든 머신코드이다. 즉 a.out 파일 안에는 컴퓨터가 이해할 수 있는 2진법으로 적혀있는 것이다.
C 코드를 컴파일러에 넣어 → 0과 1로 이루어진 출력을 만들었고 → 0과 1들이 자동적으로 a.out이라는 파일 안에 저장된 것이다.
이제 a.out을 열어보는 것이 아니라, 실행을 해볼 것이다. 열어봐도 2진법으로 작성되어 있기 때문에 봐도 의미가 없다.
그래서 터미널에 ./a.out
을 입력해 실행할 것이다.
이렇게 hello, world가 나타난다!
좀 이상한 부분이 있는데, 위에 보면 맨 끝에 커서가 있다.
컴퓨터에게 커서를 다음 줄로 옮기라고 말하지 않았기 때문에 남아있는 것이다.
바꾸려면 문자열 끝에 \n
을 넣어주면 된다.
코드를 바꾸었다면 다시 컴파일해주어야 한다.
터미널에 clang hello.c
를 입력해준다.
바뀐 티는 안나지만 a.out
은 새로운 파일이 되었다.
다시 실행해보자.
깔끔하게 잘 보이는 것을 확인할 수 있다.
References
모두를 위한 컴퓨터 과학 (CS50 2019)
부스트코스 무료 강의
www.boostcourse.org
'CSE > CS 기초' 카테고리의 다른 글
[CS50] C언어 - 자료형, 형식 지정자, 연산자 (1) | 2024.06.12 |
---|---|
[CS50] C언어 - 문자열 (1) | 2024.06.12 |
[CS50] 컴퓨팅 사고 - 알고리즘 (0) | 2024.06.10 |
[CS50] 컴퓨팅 사고 - 정보의 표현 (0) | 2024.06.10 |
[CS50] 컴퓨팅 사고 - 2진법 (0) | 2024.06.10 |
컴퓨터 전공 관련, 프론트엔드 개발 지식들을 공유합니다. React, Javascript를 다룰 줄 알며 요즘에는 Typescript에도 관심이 생겨 공부하고 있습니다. 서로 소통하면서 프로젝트 하는 것을 즐기며 많은 대외활동으로 개발 능력과 소프트 스킬을 다듬어나가고 있습니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!