컴퓨터 과학 CS - C 기초
부스트코스 - 모두를 위한 컴퓨터 과학 (CS50 2019) / 2. C언어 / 1) C 기초
https://www.boostcourse.org/cs112/lecture/119004?isDesc=false
모두를 위한 컴퓨터 과학 (CS50 2019)
부스트코스 무료 강의
www.boostcourse.org
C 언어란?
오래되고 전통적인 순수 텍스트 기반의 언어. 1972년 켐 톤슨과 데니스 리치가 유닉스 운영체제를 만들기 위해 고안한 프로그래밍 언어. 켄 톰슨이 BCPL언어를 고쳐 B언어를 개발했고 이를 데니스 리치가 개선하면서 C언어가 탄생하게 되었다.
https://dojang.io/mod/page/view.php?id=753
C 언어 코딩 도장: 1.4 C 언어란?
C 언어는 1972년 켄 톰슨과 데니스 리치가 벨 연구소에서 일할 당시 유닉스 운영체제를 만들기 위해 고안한 프로그래밍 언어입니다. 그런데 A 언어도 아니고 왜 C 언어일까요? 처음에 켄 톰슨은 BCP
dojang.io
앞서 스크래치를 이용하여 그래픽으로 프로그래밍을 해봤다면 이제는 스크래치 블록을 텍스트로서 이해해보자
- 짧은 코드 안의 C 언어 규칙
C언어)
#include <stdio.h>
int main(void){
printf("hello, world");
}
#include <stdio.h> | stdio.h 라는 이름의 파일 찾아 printf 함수에 접근할 수 있도록 한다. |
int main(void){ } | 시작을 의미 |
"hello, world"; | hello, world 라고 말해라 텍스트는 쌍따옴표 " "로 감싸야 하고, 명령어는 세미콜론 ; 으로 마무리해야 한다. |
C 언어 클라우드 툴을 사용해 프로그램을 작성해보자
CS50 Sandbox
Temporary programming environments for students and teachers.
sandbox.cs50.io
+ 터미널 정의 ( https://littlezero48.tistory.com/65 )
위와 같이 코드를 만들어 hello.c로 저장했지만 이 코드들은 컴퓨터가 이해하지 못한다.
따라서 0과 1의 컴퓨터의 언어 즉, 머신코드로 바꾸는 중간단계가 필요함.
이런 번역을 수행하는 알고리즘 혹 소프트웨어를 우리는 컴파일러 라고 한다.
아래 터미널에서 clang이라는 명령어를 쳐보자
clang은 코드를 컴파일하는 프로그램의 이름으로 clang 뒤에 해석해서 실행하고자 하는 파일을 같이 써서 명령해주면
a.out 이라는 새 파일이 생성된다. 이 파일안에는 hello.c의 코드를 머신코드로 해석한 내용이 들어가 있다.
명령어 ./a.out을 쳐보자
이 명령어는 . 와 /와 a.out으로 구성된 명령어로 .는 현재 폴더라는 의미이고 /는 .과 a.out을 구분하는 역할이며 a.out은 파일명으로 현재 폴더의 a.out을 실행하라는 의미이다. 명령어를 실행해보면 hello, world를 말하라는 코드내용을 충실하게 실행하여 터미널 창에 보여준다
하지만 hello, world 뒤에 불필요한 무언가가 보인다.
뒤의 $(달러사인)은 프롬프트로 다음 명령어를 받길 기다리는 표시, 커서이다
+ 프롬프트 정의 ( https://littlezero48.tistory.com/65 )
스크래치와 달리 명령 그자체만 실행하는 불친절한 C는 커서를 다음 줄로 바로 옮겨주는 명령은 받은 적이 없기에 그대로 실행한 것이다.
컴퓨터는 Enter의 의미를 이해하기 어렵다
따라서 새로운 줄로 바꾸기 위해서는 약속된 특별한 문자의 명령어가 필요한데 바로 \n (백슬래쉬 n) 이다.
코드를 고쳤으나 여전히 고쳐지지 않았다. 왜일까?
왜냐하면 우리가 실행한 a.out은 여전히 전 상태의 것 그대로로 우리가 변경한 코드를 다시 컴파일하지 않았기 때문이다.
다시 컴파일하고 실행해 본다면 바로 적용된 것을 확인할 수 있다
+ 컴파일되는 파일을 다른 이름으로 여러개 저장할 수 있을까?
clang이라는 명령어를 쓸때 꼭 clang 파일, 프로그램이름 만 쓰는 것이 아니다
명령행 인자(Command line argument)라 하는 것을 추가하여 명령할 수 있다.
-o 명령행 인자를 통해 원하는 이름을 설정하여 실행해보자 이와같이 생성된걸 확인 할 수 있다.
* ls 명령어 : list. 현재 폴더나 디렉토리에 있는 파일 리스트를 보여주는 명령어로 아래처럼 현재 위치의 파일을 보여준다.
뒤에 붙은 *(애스터리스크) 의미는 실행 가능한 것을 의미한다.
* rm 명령어: remove. 파일을 삭제할때 쓰는 명령어. rm에 삭제를 원하는 파일명과 함께 쳐주면 해당 파일을 지울건지 다시한번 묻는다. y (또는 yes)로 확인해주고 다시 ls로 파일을 확인하면 a.out이 사라져 있는 것을 볼 수 있다.
* mkdir : 디렉토리 생성
* rmdir : 디렉토리 삭제