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 함수로 변수 지정하고 저장하기

get_string 함수로 변수 지정하기

 

  • 사용자의 이름을 받아서 저장할 변수를 스크래치와 같이 answer이라고 지정 (이때 변수는 마음대로 정해도 무관)
  • 여기서 유의해할 점은 C는 오래된 언어이기 때문에 변수가 저장하는 데이터의 종류를 아주 정확하게 명시해줘야 한다는 점
  • 그래서 우리는 저장하고자 하는 값의 종류가 문자열(string)이라는 것을 알려줘야 한다. 이때 string형식지정자라고 한다.
  • 우리가 일반적으로 사용하는 =은 같다 이지만, 프로그래밍 언어에서는 오른쪽에서 왼쪽으로 가는 화살표와 비슷하다고 생각해야 한다.
  • 오른쪽에 있는 것을 왼쪽에 지정한다는 것. 이를 할당 연산자라고 한다.
  • get_string 함수가 사용자의 이름을 반환하면 그 이름을 anwser이라는 변수에 저장하는 것

 

② printf 함수로 출력하기

 

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 

 

모두를 위한 컴퓨터 과학 (CS50 2019)

부스트코스 무료 강의

www.boostcourse.org

 

+ Recent posts