게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
The C PROGRAMMING LANGUAGE 해설
게시물ID : programmer_2322짧은주소 복사하기
작성자 : 사원대우임원
추천 : 4/4
조회수 : 770회
댓글수 : 4개
등록시간 : 2014/04/02 19:11:30
== CHAPTER 1: A Tutorial Introduction ==

=== 1.1 Getting Started ===

* #include <stdio.h>

#include는 컴파일러에게 include 하라고 시키는 명령 같은 겁니다. 우리 말로는 보통 "인클루드" 라고 부릅니다. 
C는 이런 식의 명령들이 있는데요, "compiler directive", 우리말로 "컴파일러 지시자" 라고 부릅니다.
항상 #으로 시작하며, 이 #을 "preprocessor operator" 우리말로 "전처리 연산자"라고 부릅니다.
이 문장은 CPU가 이해할 수 있는 기계어로 번역되지는 않습니다.
컴파일러를 우리가 주문한 대로 번역해 주는 사람이라고 한다면, 이 문장은 번역해 달라고 쓴게 아니고 번역가에게 전달하는 포스트잇 메모 같은겁니다.
여러 컴파일러 지시자가 있는데 가장 많이 쓰는게 #include 입니다.

#include는 컴파일러에게 뒤에 나오는 파일을 이 위치에 끼워 넣으라는 지시자입니다.
여기서는 stdio.h 라는 파일을 열어서 전체 복사를 해서 이 자리에 붙여 넣으라는 뜻입니다. (소스코드가 진짜 바뀌는건 아닙니다)
컴파일러는 기계어로 번역하기에 앞서 이 지시를 수행합니다.

* <stdio.h>
stdio.h 파일은 어디에 있을까요? 신경 안 써도 됩니다. 파일명을 < >로 감싸 놓으면 미리 약속된 디렉토리를 뒤져서 stdio.h를 찾게 됩니다.
이런 파일을 헤더(header) 파일이라고 부르는데요, 일반적으로 h 라는 확장자를 사용합니다.

C로 코딩을 하면 일상적으로 헤더 파일을 만들어 쓰게 됩니다. 보통 .c 파일 하나당 .h 파일을 하나 만들고, 공통적으로 쓸 .h 파일을 몇 개 더 만들어 씁니다.

우리말로는 보통 어떻게 읽는지 모르겠는데, 저는 "에스티디아이오 쩜 에치"라고 읽습니다.
처음에 "스튜디오 쩜 에치"라고 읽은 사람도 있을 겁니다.
stdio가 맞고요, std는 standard, io는 input/output을 뜻합니다. 따라서 stdio는 "표준 입출력"을 의미합니다.
C에서는 이렇게 줄여서 쓰는게 관례인데요, printf 함수도 print + format 을 줄여 쓴 겁니다. 형식을 맞춰서 출력한다는 뜻이죠.
유닉스를 만든 분이 C를 만들어서 유닉스 명령어과 C의 함수명은 느낌이 비슷합니다. (엄청 짧습니다)

비주얼 스튜디오(앞으로 VS 라고 합시다)에서 stdio.h 위에 커서를 갖다 놓고 오른쪽 클릭해서 팝업메뉴를 열면 stdio.h 파일을 불러 올 수 있습니다.
표준 헤더 파일이니까 수정하지는 말고 보기만 하세요. 다양한 컴파일러 지시자가 보일거고 잘 찾아보면 printf도 나옵니다.

실제 찾아보니 이렇게 나오네요.
_Check_return_opt_ _CRTIMP int __cdecl printf(_In_z_ _Printf_format_string_ const char * _Format, ...);
너무 복잡하니까 stdio.h에는 이렇게 여러 함수들이 들어 있다는 것과 stdio.h를 include 하면 이 함수들을 모두 쓸 수 있게 된다는 것만 알고 넘어갑시다.

* main()
C로 만든 모든 프로그램은 main 함수가 하나씩 있습니다. 우리 말로는 그냥 "메인함수" 라고 부릅니다. 
커맨드 창에서 우리 프로그램을 실행시키던, 윈도 탐색기에서 더블 클릭해서 실행시키던 제일 먼저 실행되는게 이 함수입니다.
이건 약속입니다. 컴파일러가 약속을 지켜서 이 함수를 실행파일의 제일 먼저 실행되는 위치에 넣어 줍니다.

C의 함수는 ()가 무조건 있어야 하며, {}로 둘러 싼 부분이 실행됩니다.

* printf("hello world\n");
우리 말로는 "프린트에프" 라고 부르는게 대세인거 같습니다. 
printf()는 함수입니다. 함수란 실행할 일들을 묶어 놓은 것입니다. 묶을 때는 {와 }를 사용하고요, 그럴싸한 이름을 붙이고 괄호 ()를 써 줍니다.
이 괄호 안에 함수에게 전달하고 싶은 것을 적어줍니다.
여기서는 화면에 출력하는 함수를 부를 때 "hello world\n"라는 문자열을 넘겨 준겁니다. 

C 프로그래머에게 제일 중요한게 함수인데요 여기까지만 알고 넘어갑시다.

* "hello, world\n"
C에서 쌍따옴표로 문자열을 표현합니다.
홑 따옴표로 문자열을 포함하는 언어도 있고, 둘 다 사용 할 수 있는 언어도 있습니다.
C는 홑 따옴표를 한 개의 문자를 표현하는데 씁니다. 완전히 다르므로 주의해야 합니다.

* \n
줄 바꿈을 표시하기 위해 쓴건데요, 이런 특수한 문자 표현식을 escape sequence라고 하고 우리말로는 "제어문자"라고 합니다.
\n 자체를 우리말로 부를 땐 그냥 "역슬래쉬 엔"이 대세인거 같습니다.

만약 이런 표현 방법이 없었다면 아래처럼 써야 했을 겁니다.

printf("hello world
");

world 뒤에 공백을 몇 개 넣어야 한다면 알아보기 매우 어려워집니다. \n 이라고 쓰는게 낫죠.
소스코드에서 구분하기 어려운 문자들을 뽑아서 역슬래쉬 다음에 이어 쓰는걸로 정해 놓은겁니다.
만약 hello world를 출력하지 않고
hello "world" 를 출력하고 싶다면 

printf("hello \"world\"\n"); 라고 고쳐주면 됩니다. 

처음엔 읽기 어려운데 익숙해지면 눈에 들어옵니다.


* ;
C언어의 모든 문장은 ;(세미콜론)으로 끝나야 합니다.
제일 많이 실수하는게 바로 세미콜론 빼먹는거 입니다.
일부러 빼고 빌드 해보세요. 다음과 같은 에러 메세지가 나옵니다.

error C2143: 구문 오류 : ';'이(가) '}' 앞에 없습니다.

요즘 컴파일러는 꽤 친절해서 오류의 원인을 이렇게 자세히 알려줍니다. 그러니 오류 메세지를 잘 읽어보세요.
VS에서는 오류메세지를 더블클릭하면 해당 오류가 발생한 소스코드로 이동합니다.

* cc 와 a.out
책에는 cc로 빌드하고 a.out을 실행한다고 나옵니다.
유닉스 계열에서는 이렇게 합니다. C만 해도 어려운데 유닉스가 왠 말입니까?
저는 익숙한 윈도 환경에서 실습 하는걸 권장합니다.

cc는 C 컴파일러를 실행하는 것이고, 유닉스 계열은 대개 C 컴파일러가 설치 되어 있습니다.
리눅스를 기본 옵션으로 깔아도 아마 gcc 라는 C 컴파일러가 설치될 겁니다.

컴파일러는 옵션이 무척 많습니다. 책의 hello world 예제는 아주 간단하기 때문에 별다른 옵션을 지정하지 않아도 잘 빌드될 겁니다.
빌드 결과인 실행파일이 a.out 이라는 이름으로 같은 디렉토리에 생성됩니다. 
왜 하필 a.out 이라고 만들까요? 재미있는 스토리가 있을거 같습니다. 구글에 "why a.out" 라고 검색해 보니 어셈블러가 a.out을 기본 실행파일명으로 사용하기 때문이라고 나오는군요.
더 찾아보고 싶어지네요.

만약 콘솔에서 a.out이라고 쳐도 실행이 안 되고 command를 찾을 수 없다고 나온다면
./a.out 이라고 치면 됩니다. 현재 디렉토리의 a.out 을 실행시키라는 뜻입니다.

오늘은 여기까지인데요, 책에서는 불과 두 페이지 반 밖에 안 되는 분량입니다. 아...
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호