C언어
- 아주 오래되고 전통적인 순수 텍스트 기반의 언어
- 벨 연구소에서 1971년경부터 리치(D.M.Ritchie) 등에 의해서 설계 개발된 시스템 기술용의 프로그래밍 언어
- 컴퓨터의 구조에 밀착한 기초 기술이 가능한 것과 간결한 표기가 될 수 있는 것이 특징
- C 언어는 프로그램 오류를 쉽게 발견하기 위한 기능은 부족하지만, 고수준 언어에서 자주 볼 수 있는 기술상의 제약이 적기 때문에 오히려 프로그래밍하기 쉬운 편리한 언어로 평가됨
1) C 기초
검은색 바탕에 있는 이상한 글씨들은 아래의 스크래치 블록과 결과적으로 정확히 같다.
- int main(void) : 스크래치의 “초록색 깃발을 클릭했을 때” 블록과 같은 역할. 즉 '시작한다'의 의미.
- int main(void) { }의 중괄호 사이에 코드 작성
- printf(“hello, world\n”) : 스크래치의 “‘hello, world’라고 말하기” 블록과 같은 역할 ( \n은 줄바꿈의 기능)
- 글자나 단어, 문장을 적을 때는 언제나 텍스트에 " " 쌍따옴표로 감싸야 한다.
- 우리가 일상에서 문장의 끝에 마침표(.)를 붙이는 것 처럼 C에서는 세미콜론(;)을 붙여야 한다.
- #include <stdio.h>는 “stdio.h”라는 이름의 파일을 찾아서 “printf” 함수에 접근할 수 있도록 해준다.
- 우리가 Word로 문서를 저장했을때 "문서.docx"와 같이 .docx가 붙는 것 처럼 C로 작성한 코드는 “파일이름.c”로 저장해야 한다. (확장자 “.c”는 C로 작성된 코드라는 의미.)
컴파일러
- 우리가 직접 작성한 코드는 “소스 코드” 라고 한다. 이를 2진수로 작성된 “머신 코드”로 변환해야 컴퓨터가 이해할 수 있는데, 이런 작업을 컴파일러라는 프로그램이 수행해준다.
- 터미널창의 명령어 프롬프트에서 “$” 기호 옆에우리가 원하는 명령어를 입력한다.
- clang hello.c 라는 명령어는 “clang” 이라는 컴파일러로 “hello.c”라는 코드를 컴파일하라는 의미
- 그 결과 a.out 이라는 파일이 생성됨
- ./a. out 이라는 명령어를 실행하면 컴퓨터가 현재 디렉토리에 있는 a.out이라는 프로그램을 실행하게 해준다.
(./a. out에서 제일 앞에 있는 .은 지금 있는 현재 폴더를 나타냄)
2) 문자열
CS50 Sandbox에서는 스크래치의 ask함수와 가장 비슷한 것은 get_string 함수
※ String은 단어나 구절, 문장을 부르는 말 (숫자와는 다른 종류의 데이터)
① get_string 함수로 변수 지정하고 저장하기
- 사용자의 이름을 받아서 저장할 변수를 스크래치와 같이 answer이라고 지정 (이때 변수는 마음대로 정해도 무관)
- 여기서 유의해할 점은 C는 오래된 언어이기 때문에 변수가 저장하는 데이터의 종류를 아주 정확하게 명시해줘야 한다는 점
- 그래서 우리는 저장하고자 하는 값의 종류가 문자열(string)이라는 것을 알려줘야 한다. 이때 string을 형식지정자라고 한다.
- 우리가 일반적으로 사용하는 =은 같다 이지만, 프로그래밍 언어에서는 오른쪽에서 왼쪽으로 가는 화살표와 비슷하다고 생각해야 한다.
- 오른쪽에 있는 것을 왼쪽에 지정한다는 것. 이를 할당 연산자라고 한다.
- get_string 함수가 사용자의 이름을 반환하면 그 이름을 anwser이라는 변수에 저장하는 것
② printf 함수로 출력하기
- 그럼 이 것을 printf 함수로 출력을 해보자. 이때 유의할 점은 printf("hello, answer");이 아니라는 점!
- 이 코드를 실행한다면 answer이 출력이 되어 hello, answer이 그대로 결과로 나온다.
- 우리는 answer이라는 변수에 들어있는 이름을 출력을 해야하기 때문에 %를 사용해 준다.
- 이 때도 어떤 종류의 인자를 받는지 말해줘야 한다. 우리는 이름이라는 문자열을 받기때문에 string에서의 s를 %뒤에 붙여서 인자를 받아준다.
- 그래서 최종적으로는 printf("hello, %s\n", answer);이 되는 것
- 가장 위에 포함된 cs50.h 파일 안에 string이라는 문자열 형식과 get_string 이라는 함수에 대한 코드가 포함되어 있다. 이 파일을 포함해야만 전체 코드를 컴파일 하고 실행할 수 있기 때문!
③ 터미널창에 아래 명령어를 입력하여 컴파일하기
- 여기서 -o string 은 string.c 를 string.out 이라는 머신코드로 저장하도록 하는 명령어
- -lcs50은 “link”라는 의미를 지닌 -l 이라는 인자에 우리가 추가로 포함한 “cs50” 파일을 합친 것
- 이를 통해 컴파일시 cs50 파일을 연결하도록 알려줄 수 있다.
다소 복잡한 이런 과정 대신에, 아래 make 명령어를 통해 간단하게 컴파일을 수행할 수도 있다.
이와 같이 작성한 코드를 컴파일 하고 실행하면, 사용자에게 입력값을 받고 문장 내에 포함하여 출력하는 프로그램이 되는 것 !
출처 : https://www.boostcourse.org/cs112/lecture/119007?isDesc=false
'boostcourse > CS50' 카테고리의 다른 글
CS50 3. 배열 (1) - 컴파일링, 디버깅, 코드의 디자인 (0) | 2022.10.22 |
---|---|
CS50 2. C 언어 (3) - 자료형, 형식 지정자, 연산자 (0) | 2022.10.22 |
CS50 2. C 언어 (2) - 조건문과 루프 (0) | 2022.10.22 |
CS50 1. 컴퓨터 사고 (2) - 스크래치 (0) | 2022.10.22 |
CS50 1. 컴퓨팅 사고 (1) - 2진법, 정보의 표현, 알고리즘 (0) | 2022.10.22 |