관리 메뉴

흰둥씨의 개발장

[모두를 위한 컴퓨터 과학(CS50 2019)] compile / debug / style 본문

[오늘의 공부]/CS

[모두를 위한 컴퓨터 과학(CS50 2019)] compile / debug / style

돈워리비해삐 2023. 6. 17. 00:42

 컴파일링 과정 

1) 전처리(precompile) : 전처리기에 의해 수행, #으로 시작하는 c의 소스코드들을 먼저 실행
2) 컴파일 (compile) : 컴파일러에 의해 수행, 소스코드 => 어셈블리 코드(저수준 프로그래밍 언어)
3) 어셈블(assemble) : 어셈블러에 의해 수행, 어셈블리 코드 => 머신코드(오브젝트코드)
4) 링크(link) : 생성된 머신코드(오브젝트 코드)들을 모아서 하나의 파일로 만들어줌

디버깅

버그:  개발자가 프로그램 내 의도하지 않은 실수

//bug.c
int main(void)
{
    printf("hello\n");
}

위와 같이 입력하고 터미널에서 컴파일요청($make bug)하면 에러발생함 

help50

$help50 make bug

help50을 요청 하면 터미널에 오류가 왜 발생했는지에 대한 좀더 명확한 답변을 들을수 있음 

Asking for help...

bug.c:5:5: error: implicitly declaring library function 'printf' with type 'int (const char *, ...)'
[-Werror,-Wimplicit-function-declaration]
    printf("hello\n");

Did you forget to #include <stdio.h> (in which printf is declared) atop your file?

ㄴ에러는 printf가 적힌 5행에서 발생함
ㄴ#include <stdio.h>(printf가 선언된)를 잊지 않았니? 


printf

#을 10번 출력하는 코드를 만들고 싶어서 아래와 같은 코드를 작성했을때,

#include <stdio.h>

int main(void)
{
    for(int i = 0 ; i <= 10 ; i++)
    {
        printf("#\n");
    }
}

간단한 코드이기 때문에 문제가 어디인지를 바로 알아차릴수 있지만, 
복잡할 때는 아래와 같이 printf를 활용해보는 것도 좋음 

#include <stdio.h>

int main(void)
{
    for(int i = 0 ; i <= 10 ; i++)
    {
		printf("i is now %i: ", i);
        printf("#\n");
    }
}

ㄴi조건을 i< 10으로 수정하면 됨을 알수 있음


debug50

CS50 IDE를 사용하면 debug50이라는 프로그램도 사용할 수 있음

$debug50 ./파일명

 

고무오리 디버깅

디버그 해도해도 안되면 잠깐 쉬면서 머리 환기하기 


코드 디자인
CS50에서 제안하는 C언어 코드디자인