일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 백준
- 구현
- Naver boostcourse
- 서블릿
- Customer service 구현
- Naver boostcamp
- 서버
- 풀스택
- 프로그래머스
- 네이버
- cs50
- sts
- 웹 프로그래밍
- 2021 Dev-matching 웹 백엔드 개발자
- BOJ
- 백엔드
- QNA 봇
- 장고
- boostcourse
- 대회
- Django
- 4기
- AI Tech 4기
- 프로그래밍
- 파이썬
- 웹
- P Stage
- AI Tech
- 부스트캠프
- 레벨2
- Today
- Total
daniel7481의 개발일지
[CS50] 2. C(1) 본문
1. C의 기초
C는 컴퓨터에서 할 수 있는 모든 것을 거의 할 수 있는 컴퓨터 언어이다.
C의 예(hello.c):
#include <stdio.h>
int main(void):
{
printf('hello, world');
}
뭐라고 하는지 하나도 몰라도 괜찮다. 교수님이 괜찮다고 하신다.
int main(void)는 시작한다라는 의미를 갖고 있다. 이 프로그램을 실행했을 때 이 메인 함수를 실행하라는 것이다. printf는 print format의 줄임말로 say라는 의미이고 출력하라는 명령이다. 이러한 문자는 프로그램에서 쌍따옴표 혹은 따옴표("", '')으로 감싸줘야 한다. 한 문장이 끝나고 나면 C에서는 마침표를 붙이는 것처럼 세미클론(;)을 붙여야 한다. 그럼 #include <stdio.h> 가 무엇인가? C에서는 함수를 사용하려면 그 함수가 저장되어 있는 파일을 불러와야 한다. stdio.h는 헤더 파일로 기본적인 함수를 사용하려면 불러와야 하는 파일이다. include로 파일을 참조할 수 있는 것이다. C언어는 typing에 기반을 둔 프로그램 언어이다. 스크래치랑 달리 그래픽을 지원하지 않는다.
자 이제 위 코드를 돌려보려고 한다. 그러나 일반 인터페이스처럼 더블 클릭으로 돌아가지 않고, 컴퓨터는 2진법만 알아듣는다. 위 코드는 분명히 0과 1로만 나타내어진 것 같지는 않다. 우리가 만약 0과 1로만 코딩을 해야 했으면 해낼 수 있는 사람은 거의 없을 뿐더러 이정도로 발전할 수 없었을 거다. 그럼 컴퓨터는 위 코드를 어떻게 알아듣는 것일까? 위 코드를 2진법으로 전환(convert)해주는 프로그램이 필요한데, 이를 compiler라고 한다. 이러한 compiler 중에 c는 clang을 사용 할 수 있다. 프롬프트에 $(입력하라는 기호다) clang hello.c 라고 하면 a.out이라는 파일이 생성된다. 이 파일 안에 있는 0과 1로만 이루어진 assembly어만 적혀 있다. 다음 $./a.out(./는 현재 디렉터리를 확인하라는 말이다)을 실행하자.
결과는 hello world$가 나왔다. $는 앞에 말한 바와 같이 입력하라는 기호이다. 컴퓨터는 내가 시킨 일만 하는 도구이다. 내가 줄을 바꾸라는 명령을 내리지 않기 때문에 줄을 바꾸지 않은 것이다. 이제 printf('hello world\n')로 바꿔주고 clang 명령어를 다시 실행해 보자. 그럼 a.out이 다시 만들어진다. 아무 일도 일어난 것 같지 않아 보여도 a.out이 새로 만들어진 것이다.
생각해보기
"hello, boostcourse"를 출력해보세요
#include <stdio.h>
int main(void)
{
printf('hello, boostcourse\n')
}
2. 문자열
이제 C로 'What's your name?' 이라는 질문을 하고 내가 'hello, '내 이름''이라는 답을 하게끔 프로그램을 짜보자. 여기서 문자를 나타내는 것은 string(문자열)이다. C는 변수를 선언할 때 그 자료형을 같이 선언해줘야 한다. 다음 예를 살펴보자.
answer = get_string('What's your name?') 이 방법은 틀렸다.
string answer = get_string('What's your name?')
문자열 변수를 선언 할 때에는 그 변수가 문자열이라고 같이 선언해줘야 한다, 이 때 문자열은 string 자료형이라고 말한 바 있다. 여기서 get_string 함수는 문자열을 입력 받는 함수라고 하자. What's your name?이라는 문자 후에 입력한 값이 answer라는 문자열 변수에 들어간 것이다. 자 이제 hello라는 문자랑 answer 문자열 변수를 합쳐보자. 그냥 'hello, answer'라고 하면 당연히 틀리게 될 것이다. 우리가 출력하려고 하려는 값은 입력 받은 문자열 변수 answer이지 'answer'이라는 문자열이 아니다. 그러므로 사용해야할 것은 %s라는 것이다. s는 string을 나타낸다. 형식은 다음과 같다.
printf('hello, %s\n', answer)
여기서 뒤에 있는 인자는 여러 개가 될 수 있다. 그러면 각 변수 사이에 쉼표로 나눠서 plug-in 할 수 있다.
printf('%s and %s' str1, str2)
아까 프롬프트 창에서 머신 코드를 만들려고 할 때 쓴 명령어를 보자.
$ clang hello.c라고 하면 a.out이라는 머신 코드가 만들어진다고 설명한 바 있다. 이때
$ clang -o hello hello.c라고 하면 a.out이 아닌 hello라는 머신 코드가 만들어진다.
또한 stdio.h뿐만 아니라 다른 헤더도 참조하고 싶을 때는
$ clang -= hello hello.c lCS50(이러면 CS50이라는 header를 코드 안에 include시켜줘야 한다)
굉장히 복잡해지는 것 같아서 굉장히 간단한 방법은
$ make hello이다. 이러면 hello.c라는 파일을 찾고, hello라는 머신 코드가 만들어진다.
'Naver Boostcourse' 카테고리의 다른 글
[웹 프로그래밍(풀스택)] Web 개발의 이해(1) (0) | 2021.12.06 |
---|---|
[CS50] C(2) (0) | 2021.12.06 |
[CS50]1. 컴퓨터 사고 (2) (0) | 2021.12.03 |
[CS50] 1. 컴퓨팅 사고(1) (0) | 2021.12.03 |
Naver boostcamp 준비 (0) | 2021.12.03 |