티스토리 뷰
1. 컴파일링
컴파일링의 과정 : preprocessing → compiling → assembling → linking
✔ 전처리(preprocessing) : 실질적인 컴파일 전에 헤더 파일 추가
✔ 컴파일(compiling) : 전처리한 코드를 컴퓨터가 이해할 수 있는 어셈블리어라는 저수준 프로그래밍 언어로 컴파일
✔ 어셈블링(assembling) :: 어셈플리코드를 중앙처리장치가 프로그래밍을 수행할 수 있도록, 연속된 0과 1로 변경
✔ 링커(링크) : 여러개의 파일을 하나의 오브젝트 파일로 합쳐야 할 때 필요한 단계 (컴파일을 하나만 해야 하면 진행 X)
2. 디버깅
버그와 디버깅
✔ 버그 : 코드에 들어있는 오류
✔ 디버깅 : 모드에 있는 버그를 식별하고 고치는 과정
디버거
✔ 프로그래머들이 사용하는 디버깅 프로그램
✔ 프로그램을 한 번에 한 행씩 실행할 수 있게 도와줌
✔ 프로그램을 특정 행(중지점)에서 멈추게 하는 프로그램으로 버그를 찾는데 도움을 준다
✔ 디버거가 모든 오류를 잡아내는 것은 아니다
고무 오리 디버깅
✔ 누군가에게(가상의 인물이나 고무 오리) 코드를 한 줄씩 설명하며 되짚어보는 디버깅 과정
3. 코드의 디자인
공백의 수나 줄 바꿈과 같은 것들은 코드의 실행에 직접적 영향을 주는 것은 아니나, 코드를 작성하는 사람들이 코드를 읽고 이해하는데 영향을 주기 때문에, 코드가 심미적으로 디자인되어야 한다.
4-5. 배열
배열
✔ 같은 자료형의 데이터를 메모리 상에 연이어서 저장하고 이를 하나의 변수로 관리하기 위해 사용
#include <stdio.h>
int main(void){
int arr[4] = {1,2,3,4};
for(int i=0; i<4; i++){
printf("%d ",arr[i]); //1 2 3 4
}
return 0;
}
형 변환
✔ 정해진 자료형을 다른 자료형으로 바꾸는 과정
#include <stdio.h>
int main(void){
int num = 2;
printf("%f",(double)2); //2.0
return 0;
}
전역 변수와 상수
✔ 전역변수 : 코드 전반에 걸쳐 사용될 값은 전역 변수로 저장하여 어디에서든 사용할 수 있게 한다
✔ 상수 : 코드 전반에 걸쳐 바뀌지 않는 값은 상수로 지정. 수정이 불가능하며, 상수명은 대문자만 사용한다
✔ 위와 같은 이유로 전역 변수는 상수로 선언되는 경우가 많다
#include <stdio.h>
const int MONTH = 12;
int main(void){
printf("%d",MONTH); //12
return 0;
}
6. 문자열과 배열
✔ 모든 자료형은 크기가 정해져 있다
✔ 문자열은 문장의 끝을 알 수 없어서 그 크기를 다른 자료형처럼 정해둘 수 없다
✔ 그렇기 때문에 다른 자료형과 다르게, 문자(char) 형의 배열을 만들듯이 그 크기를 정한다
✔ 그리고 문장이 끝났다는 의미로 마지막에 \0 (null = null종단 문자)를 저장한다
✔ 그렇기 때문에 n개의 문자를 사용한 문자열을 저장할 공간을 만들기 위해서는 n+1개의 문자형(char) 배열이 필요하다
7. 문자열의 활용
문자열의 길이와 탐색
✔ 문자열의 마지막에는 \0(null)이 저장되어 있으므로, for문을 사용해서 문자열을 출력할 수 있다
#include <stdio.h>
int main(void){
char arr[10]="happy";
for(int i=0; i<10; i++){
if(arr[i]!=0){
printf("%c",arr[i]);
}else{
break;
}
}
return 0;
}
<string.h>
✔ strlen( ) : 문자열의 길이를 확인하는 메서드
✔ strcmp( str1, str2 ) : 두 가지 문자의 사전적 순서를 비교하는 메서드
✔ strcpy( str1, str2 ) : str2의 문자열을 복사해 str1에 저장하는 메서드 → 문자열을 저장할 때 주로 사용
✔ strcat( str1, str2 ) : 두 개의 문자열을 붙임
✔ strstr( str1, str2 ) : 두 개의 문자열을 인자로 받아 첫 번째 문자열 내부에 두 번째 문자열이 나오는지 탐색
<ctype.h>
✔ int isalnum (int c) : c가 숫자 문자나 영문 알파벳의 ASCII 코드 값인지 판별
✔ int isalpha (int c) : c가 영문 알파벳의 ASCII 코드 값인지 판별
✔ int tolower (int c) : c를 소문자로 변환
✔ int toupper (int c) : c를 대문자로 변환
8. 명령행 인자
int main ( int argc, string argv[ ] )
✔ argc : main 함수가 받게 될 입력의 개수
✔ argv[ ] : 입력이 포함되어 있는 배열
✔ argv[0] 은 일반적으로 프로그램의 이름으로 저장
✔ 하나의 입력만을 받는다면 argv[ ]의 크기는 2가 됨 ( 0:프로그램의 이름, 1:입력받은 값)
✔ 컴파일한 파일의 이름을 입력하여 실행할 때, 추가로 입력하면 argv[ ]에 저장되면서 사용됨
#include <stdio.h>
int main(int argc, string argv[]){
if(argc == 2){
printf("hello, %s\n", argv[1]);
}else{
printf("hello, world\n");
}
return 0;
}
[출처] 부스트코스 | 모두를 위한 컴퓨터 과학(CS50 2019)
'Computer Science > CS50' 카테고리의 다른 글
[CS50 5주차] 2. 포인터 (0) | 2021.02.12 |
---|---|
[CS50 5주차] 1. 메모리 주소 (0) | 2021.02.12 |
[CS50 4주차] 알고리즘 (0) | 2021.02.12 |
[CS50 2주차] C언어 (0) | 2021.02.12 |
[CS50 1주차] 컴퓨팅 사고 (0) | 2021.02.11 |