CS50 Sandbox

https://sandbox.cs50.io/

컴파일러

우리가 사용하는 프로그래밍 언어로 작성한 코드를 소스 코드라 하는데, 이를 컴퓨터가 이해할 수 있는 2진법으로 작성된 머신 코드로 바꾸기 위해서는 소스코드를 머신코드로 변환시켜주는 역할이 필요하다. 이러한 일을 수행하는 프로그램을 컴파일러라 한다.

터미널창에 $ 기호 옆에 원하는 명령어를 입력해서 사용한다.

$ clang hello.c

📝 컴파일러와 인터프리터의 차이

컴파일러는 사람이 작성한 소스코드를 한 번에 머신코드로 번역하는 반면, 인터프리터는 즉석으로 한 줄씩 실행을 하면서 번역한다.

번역 시간 자체는 컴파일러가 오래 걸리지만, 번역이 완료되면 실행 파일이 따로 생성이 되어 계속 사용할 수 있기 때문에 실행 시간이 상대적으로 빠르다. 반면 인터프리터는 실행 때마다 매번 번역되어야 하기 때문에 컴파일러를 사용하는 언어에 비해 실행 속도가 느리다.

C 기초

#include <stdio.h>

int main(void)
{
	printf("hello, world\n");
}

int main(void)는 코드 실행을 위한 시작을 의미한다.
우리가 작성하는 실행 코드들은 모두 이 int main(void) {} 의 중괄호 사이에 작성하게 된다.

문자열

변수가 들어 있는 이름을 출력할 때는 %를 사용한다.

get_string("What's your name?\n");
printf("hello, %s\n", answer);

문자열을 받을 것이므로 string(문자열)의 s를 %뒤에 붙여서 파라미터를 받아준다.

조건문/루프

x = x + 1; // 할당 연산자
x == y;	   // 일치 연산자 (bool)

할당 연산자 = 는 오른쪽에서 왼쪽으로 이동
일치 연산자 == 는 좌항과 우항의 값이 서로 일치하는 지를 평가

코드를 간결하게 만드는 것 => 효율성과 얼마나 적은 메모리, CPU를 사용해서 수행하는 것이 중요

조건의 끝에는 세미콜론(;)을 붙이지 않음

데이터 타입

  • bool
  • char: 문자 하나
  • string: 문자열
  • int
  • double
  • float: 부동소수점을 갖는 실수 ex) 3.14, 0.0, -28.56
  • double

int는 대략 40억까지 셀 수 있기 때문에 일반적으로 대부분 정수에 int를 사용한다.

형식 지정자

printf 함수에서는 각 데이터 타입을 위한 형식 지정자를 사용할 수 있다.

  • %c: char
  • %f: float, double
  • %i: int
  • %li: long
  • %s: string

사용자 정의 함수

#include <cs50.h>
#include <stdio.h>

int get_positive_int(void);

int main(void)
{
    int i = get_positive_int();
    printf("%i\n", i);
}

int get_positive_int(void)
{
    int n;
    do
    {
        n = get_int("Positive Integer: ");
    }
    while (n < 1);
    return n;
}

get_postive_int라는 함수는 입력을 받지 않은 상태이다.

만약 이 전에 사용했던 get_int나 get_string 함수처럼 어떤 값을 받아와서 변수에 저장하는 것처럼 이 함수가 뭔가를 반환하게 하고 싶을 때는 함수 왼쪽의 voidint로 바꿔주면 된다. 함수 왼쪽에 있는 단어는 출력의 종류를 의미한다.

int get_positive_int(void) 괄호 안의 void는 입력의 종류를 뜻한다. 만약 입출력이 없다면 void를 적어주면 된다.

사용자 정의 함수는 코드를 간결하게 만들 수 있고, 수정과 재사용이 용이하다는 장점이 있다.

라이브러리

여러 함수들을 모아둔 것을 말한다. C에는 표준 라이브러리가 있는데, 강의에서 사용한 #include<stdio.h>도 표준 라이브러리 중 하나이며 가장 보편적으로 사용된다. 그 밖에도 <math.h>, <time.h> 등 자신이 코딩하는데 필요한 함수들을 그때 그때 라이브러리를 불러와서 다른 사람들이 만들어둔 함수를 사용할 수 있다.

부동 소수점 부정확성

컴퓨터가 실수를 표현하는 방법은 정수보다 복잡하다. 실수를 정수와 마찬가지로 2진수로만 표현해야 하기 때문이다. 이로 인해 사용되는 방식 중 하나가 바로 부동 소수점(floating point) 방식인데, 지수의 값에 따라 소수점이 움직인다. 1/7, 0.1과 같은 소수들은 2진법으로 표현할 방법이 존재하지 않기 때문에, 컴퓨터는 그 값과 가장 근사한 값을 반환하게 된다.

x: 1
y: 10
x/y = 0.10000000149011611938476562500000000000000000000000

1/10은 원래 0.1의 결과값이 나와야 하지만, 이러한 이유로 다소 부정확한 결과를 나타내게 된다.

정수 오버플로우

정수의 데이터 타입 크기는 고정되어 있는 상태에서 저장할 수 있는 크기보다 큰 수를 저장하려 할 때 에러가 발생하게 되는데, 이를 정수의 오버플로우라 한다.

profile
하루하루는 성실하게 인생 전체는 되는 대로.

0개의 댓글

Powered by GraphCDN, the GraphQL CDN