- 학습목표: 컴파일링의 네 단계를 설명할 수 있다,.
- 핵심단어: 컴파일러, 어셈블링, 링킹
-- 4개의 단계가 존재: preprocessing, compiling, assembling, linking
-- clang 혹은 make 즉 명령어를 사용하여 프로그램을 실행하면 해당 파일의 실제 코드로 대체
-- ex) # include stdio.h => string get_string(string prompt);
소스코드 → 머신코드
전처리가 된 코드가 clang 과 같은 컴파일러에 의해 어셈블리 코드로 바뀐다.
-- 어셈블리 코드가 생기면 그걸 실제 0과 1로 이루어진 머신코드로 바꿔야 하는데, 이걸 clang 이 수행하는 어셈블링이라고 하는 것이다.
-- 위 세단계를 거친 후 모든 0과 1들을 하나의 큰 파일로 합치는 것
-- 프로그램은 여러 다른 파일과 연관되어 있으므로 그 파일들을 clang 이 컴파일 해야 한다. 이를 위해 clang 을 여러번 실행해야 한다면 시간 소요가 늘어나겠지만 컴퓨터가 자동으로 해주므로 괜찮다.
- 학습목표: 디버깅 하는 여러방법을 설명할 수 있다.
- 핵심단어: 디버깅, help50, debug50
-- 문법 오류 및 논리 오류 : help, debugging
- 학습목표: 코드의 정확성과 디자인을 관리하는 방법을 설명할 수 있다.
- 핵심단어: check50, style50, 고무오리
-- 가독성이 좋아야 하는 이유 : 유지보수 및 협업시 큰 도움이 됨
- 학습목표: 배열을 정의하고 사용하는 방법을 설명할 수 있다.
- 핵심단어: 배열
- 모두 같은 자료형의 값들로 구성되어 있으며 길이를 선언해줘야 함
- c에서는 char를 사용할 때 쌍따옴표가 아닌 따옴표 !
- 형변환 변수 앞에 괄호 사용 ex) (int) a
- 2진법 ASCII 등 컴퓨터에 저장될 때 어떤식으로 저장되는지 대응 관계를 항상 인지하기
- 학습목표: 배열을 정의하고 사용하는 방법을 설명할 수 있다.
- 핵심단어: 배열, 전역변수
- 전역변수는 대문자로, 선언할 때 const
- main 이 위에 있는 것이 좋음
- C 에서는 정수를 정수로 나누면 정수가 나옴
- 강력한 자료형으로 반환 ex) int/float => float
- 학습목표: 문자열이 C에서 정의되는 방식과 메모리에 저장되는 방식을 설명할 수 있다.
- 핵심단어: 문자, 문자열
- string 은 정해진 크기를 가질 수 없음
- 문자열이 언제 끝나는지를 알려주는 정보가 필요
-- ↪ null 문자 (\0) : 8개의 bit 가 모두 0인 상태
- %s 에 변수명을 넣으면 printf가 일종의 루프를 만들어 첫번째 글자부터 반복해서 널문자 전까지 출력
- 학습목표: 문자열을 탐색하고 일부 문자를 수정하는 코드를 구현할 수 있다.
- 핵심단어: strlen, toupper
- # include <string.h> : 문자열과 관련된 다양한 함수들이 있는 라이브러리
- # include <ctype.h> : toupper 함수가 있는 라이브러리
⨁ 프로그래밍은 결국 추상화를 이용해서 복잡한 기계어를 간단하게 처리하는 것
- 학습목표: 명령형 인자를 받는 프로그램을 C로 작성할 수 있다.
- 핵심단어: 명령행 인자, argv, argc
- 실행하고자 하는 프로그램 뒤에 적는다. ex) $ clang -o hello hello.c
- 정보를 보호하기 위한 암호화
⨁ 송신자와 수신자가 사전에 어떤 키를 사용해서 문자를 암호화 할지 정해야 한다.
ex)
위와 같은 구조에서 key = 1, plaintext = I LOVE YOU 라고 가정할 때, 컴파일 과정에서 plaintext 는 ASCII 코드를 사용하여 변환 후 각 수에 1을 더해주어 ciphertext 로 ouput 한다면 다른 사람들은 원래 값을 알 수 없다.