#include <stdio.h>
이 코드는 stdio라는 c언어로 작성된 헤더파일을 내가 사용하겠다는 의미이다.
다른 사람들이 이미 작성해둔 코드를 사용할 수 있게 해주는 것으로 라이브러리라고 한다.
stdio.h에 printf 함수의 프로토타입이 있어서,
clang 컴파일러가 프로그램을 컴파일할 때 printf가 무엇인지 알려준다.
함수의 프로토타입을 모르면 ?
https://velog.io/@dumi33/CS50c%EC%96%B8%EC%96%B43%EC%82%AC%EC%9A%A9%EC%9E%90-%EC%A0%95%EC%9D%98%ED%95%A8%EC%88%98%ED%95%98%EB%93%9C%EC%9B%A8%EC%96%B4%EC%9D%98-%ED%95%9C%EA%B3%84
여기 1번을 보면 나온다.
1) clang -o hello hello.c
-o는 실행 옵션으로 생성되는 파일명을 지정하도록 해준다.
2) clang -o hello hello.c -lcs50
clang에게 cs50라이브러리에 있는 모든 0과 1을 여기에 연결하라는 의미이다.
l이 link의 약자인것이다.
2)는 make hello로 간단하게 줄일 수 있다.
지금까지 간단하게 소스코드에서 머신코드로 변경하는 것을 컴파일링이 이루어진다고 했다. 사실 컴파일링은 4단계로 구성된다.
< 전처리, compiling, assembling, linking >
1) preprocessing (전처리)
"#"으로 시작한 코드를 해당 파일의 실제 코드로 대체한다.
예를 들어 # include <stdio.h>가 printf의 프로토타입 으로 대체되는 것이다.
#include <stdio.h> -> int printf(string format,....);
이것들을 합해서 컴파일링이라고 한다.
대부분의 IDE(통합 개발 환경)에서 빨간색 점(중지점)을 제공한다.
이는 프로그램을 실행할 때 여기서 멈춘 뒤 사용자가 한단계씩 진행할 수 있도록 만든다.
해당 수업을 위해 만든 IDE에서 debug50 ./buggy2 와 같이 debug50을 앞에 붙여주면 한단계씩 진행하여 과정을 시각적으로 볼 수 있게 도와준다.
#include<stdio.h>
int main(void) {printf("hello,world\n");}
코드를 이렇게 만든다면 가독성이 떨어진다.
코드를 작성할 때는 나와 다른 사람이 읽기 쉽도록, 그리고 유지보수가 쉽도록 만들어야한다.
좋은 코드 작성 스타일을 갖는건 프로그래밍에서 필수적이다.
고무 오리 한마리를 구해다가
방문을 닫고 오리에게 설명하세요.
마치 조교에게 설명하듯 코드가 무슨일을 하는지 설명하세요.
한줄 한줄 설명하다보면 스스로 깨닫는 순간이 옵니다.
나도 오리 친구 갖고싶다.