배열

khxxjxx·2021년 4월 9일
0

강좌 : 부스트캠프 모두를 위한 컴퓨터과학(cs50 2019)

3. 배열

✍컴파일링

#include <stdi.h>

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

main : 프로그램의 시작점으로써 실행 버튼을 클릭하는 것과 같다

printf : 출력을 담당하는 함수

++ printf 함수를 사용하기 위해서는 stdio.h 라이브러리가 필요

stdio.h : 라이브러리 라고도 하며 정확히는 헤더파일

++ stdio.h 파일에 printf 함수의 프로토타입이 있어 프로그램을 컴파일할때 printf가 무엇인지 알려주는 역할

make나 clang을 사용해서 프로그램을 실행하면 4개의 단계를 거치게 된다.

전처리(Precompile)

  • 전처리기에 의해 수행
  • # 으로 시작되는 C 소스코드는 해당파일의 실제코드로 대체
  • clang이 stdio.h 파일에 직접 들어가 해당되는 코드를 가져와서 나의 파일에 포함시키는 것

#include가 전처리기에게 다른 파일의 내용을 포함시키라고 알려주면 그 파일에 직접 들어가 해당되는 코드를 가져와서 나의 파일에 포함 시키는데 이 파일은 여전히 C 소스코드 형태이며 stdio.h 파일의 내용이 #include 부분에 포함된다

컴파일(Compile)

  • 소스코드를 머신코드로 바꾸는 단계
  • 더 구체적으로 전처리기가 전처리한 소스 코드를 어셈블리코드로 변환시키는 단계
  • 컴파일러라고 불리는 프로그램은 C 코드를 어셈블리어라는 저수준 프로그래밍 언어로 컴파일한다

코드가 clang에 의해 컴파일되면 C로 작성된 소스코드는 어셈블리 코드라는 중간단계로 바뀌게되고 컴퓨터의 뇌인 CPU가 실제로 이해할 수 있는 언어에 조금 더 가까워진다

어셈블(Assemble)

  • 어셈블리 코드가 생기면 그걸 실제 0과 1로 이루어진 머신코드로 변경
  • 이 변환작업은 어셈블러라는 프로그램이 수행
  • 그게 바로 clang이 수행하는 어셈블링이라고 한다

  • 링커는 여러 개의 다른 오브젝트 코드 파일을 실행 가능한 하나의 오브젝트 코드 파일로 합치는 것

만약 프로그램이(math.h나 cs50.h와 같은 라이브러리를 포함해) 여러 개의 파일로 이루어져 있어 하나의 오브젝트 파일로 합쳐져야 한다면 링크라는 컴파일의 마지막 단계가 필요하다


이 4단계를 거치면 최종적으로 실행 가능한 파일이 완성


✍버그와 디버깅

버그

  • 코드에 들어있는 오류
  • 의도하지 않은 프로그램 내 실수

디버깅

  • 코드에 있는 버그를 식별하고 고치는 과정

오류가 일어날 경우 sandbox.cs50.io에서 $ help50 make 파일이름을 사용할 경우 컴파일시 생기는 오류를 해석

코드의 오류가 아니라 사용자의 실수로 인한 오류를 확인할 땐 CS50 IDE 이용

ide.cs50.ioE를 사용하면 debug50을 사용하여 디버깅 가능

소스코드에 직접 브레이크포인트를 지정하고 컴파일한 후 $ debug50 ./파일명을 실행하면 오른쪽 패널을 통해 변수의 값을 확인하거나 브레이크포인트로부터 한줄씩 코드를 실행할 수 있다

디버깅 종료시 : ctrl + c

++ IDE : 통합 개발 환경의 줄임말
profile
코린이

0개의 댓글