<div>== CHAPTER 1: A Tutorial Introduction ==</div> <div><br /></div> <div>=== 1.1 Getting Started ===</div> <div><br /></div> <div>* #include <stdio.h></div> <div><br /></div> <div>#include는 컴파일러에게 include 하라고 시키는 명령 같은 겁니다. 우리 말로는 보통 "인클루드" 라고 부릅니다. </div> <div>C는 이런 식의 명령들이 있는데요, "compiler directive", 우리말로 "컴파일러 지시자" 라고 부릅니다.</div> <div>항상 #으로 시작하며, 이 #을 "preprocessor operator" 우리말로 "전처리 연산자"라고 부릅니다.</div> <div>이 문장은 CPU가 이해할 수 있는 기계어로 번역되지는 않습니다.</div> <div>컴파일러를 우리가 주문한 대로 번역해 주는 사람이라고 한다면, 이 문장은 번역해 달라고 쓴게 아니고 번역가에게 전달하는 포스트잇 메모 같은겁니다.</div> <div>여러 컴파일러 지시자가 있는데 가장 많이 쓰는게 #include 입니다.</div> <div><br /></div> <div>#include는 컴파일러에게 뒤에 나오는 파일을 이 위치에 끼워 넣으라는 지시자입니다.</div> <div>여기서는 stdio.h 라는 파일을 열어서 전체 복사를 해서 이 자리에 붙여 넣으라는 뜻입니다. (소스코드가 진짜 바뀌는건 아닙니다)</div> <div>컴파일러는 기계어로 번역하기에 앞서 이 지시를 수행합니다.</div> <div><br /></div> <div>* <stdio.h></div> <div>stdio.h 파일은 어디에 있을까요? 신경 안 써도 됩니다. 파일명을 < >로 감싸 놓으면 미리 약속된 디렉토리를 뒤져서 stdio.h를 찾게 됩니다.</div> <div>이런 파일을 헤더(header) 파일이라고 부르는데요, 일반적으로 h 라는 확장자를 사용합니다.</div> <div><br /></div> <div>C로 코딩을 하면 일상적으로 헤더 파일을 만들어 쓰게 됩니다. 보통 .c 파일 하나당 .h 파일을 하나 만들고, 공통적으로 쓸 .h 파일을 몇 개 더 만들어 씁니다.</div> <div><br /></div> <div>우리말로는 보통 어떻게 읽는지 모르겠는데, 저는 "에스티디아이오 쩜 에치"라고 읽습니다.</div> <div>처음에 "스튜디오 쩜 에치"라고 읽은 사람도 있을 겁니다.</div> <div>stdio가 맞고요, std는 standard, io는 input/output을 뜻합니다. 따라서 stdio는 "표준 입출력"을 의미합니다.</div> <div>C에서는 이렇게 줄여서 쓰는게 관례인데요, printf 함수도 print + format 을 줄여 쓴 겁니다. 형식을 맞춰서 출력한다는 뜻이죠.</div> <div>유닉스를 만든 분이 C를 만들어서 유닉스 명령어과 C의 함수명은 느낌이 비슷합니다. (엄청 짧습니다)</div> <div><br /></div> <div>비주얼 스튜디오(앞으로 VS 라고 합시다)에서 stdio.h 위에 커서를 갖다 놓고 오른쪽 클릭해서 팝업메뉴를 열면 stdio.h 파일을 불러 올 수 있습니다.</div> <div>표준 헤더 파일이니까 수정하지는 말고 보기만 하세요. 다양한 컴파일러 지시자가 보일거고 잘 찾아보면 printf도 나옵니다.</div> <div><br /></div> <div>실제 찾아보니 이렇게 나오네요.</div> <div>_Check_return_opt_ _CRTIMP int __cdecl printf(_In_z_ _Printf_format_string_ const char * _Format, ...);</div> <div>너무 복잡하니까 stdio.h에는 이렇게 여러 함수들이 들어 있다는 것과 stdio.h를 include 하면 이 함수들을 모두 쓸 수 있게 된다는 것만 알고 넘어갑시다.</div> <div><br /></div> <div>* main()</div> <div>C로 만든 모든 프로그램은 main 함수가 하나씩 있습니다. 우리 말로는 그냥 "메인함수" 라고 부릅니다. </div> <div>커맨드 창에서 우리 프로그램을 실행시키던, 윈도 탐색기에서 더블 클릭해서 실행시키던 제일 먼저 실행되는게 이 함수입니다.</div> <div>이건 약속입니다. 컴파일러가 약속을 지켜서 이 함수를 실행파일의 제일 먼저 실행되는 위치에 넣어 줍니다.</div> <div><br /></div> <div>C의 함수는 ()가 무조건 있어야 하며, {}로 둘러 싼 부분이 실행됩니다.</div> <div><br /></div> <div>* printf("hello world\n");</div> <div>우리 말로는 "프린트에프" 라고 부르는게 대세인거 같습니다. </div> <div>printf()는 함수입니다. 함수란 실행할 일들을 묶어 놓은 것입니다. 묶을 때는 {와 }를 사용하고요, 그럴싸한 이름을 붙이고 괄호 ()를 써 줍니다.</div> <div>이 괄호 안에 함수에게 전달하고 싶은 것을 적어줍니다.</div> <div>여기서는 화면에 출력하는 함수를 부를 때 "hello world\n"라는 문자열을 넘겨 준겁니다. </div> <div><br /></div> <div>C 프로그래머에게 제일 중요한게 함수인데요 여기까지만 알고 넘어갑시다.</div> <div><br /></div> <div>* "hello, world\n"</div> <div>C에서 쌍따옴표로 문자열을 표현합니다.</div> <div>홑 따옴표로 문자열을 포함하는 언어도 있고, 둘 다 사용 할 수 있는 언어도 있습니다.</div> <div>C는 홑 따옴표를 한 개의 문자를 표현하는데 씁니다. 완전히 다르므로 주의해야 합니다.</div> <div><br /></div> <div>* \n</div> <div>줄 바꿈을 표시하기 위해 쓴건데요, 이런 특수한 문자 표현식을 escape sequence라고 하고 우리말로는 "제어문자"라고 합니다.</div> <div>\n 자체를 우리말로 부를 땐 그냥 "역슬래쉬 엔"이 대세인거 같습니다.</div> <div><br /></div> <div>만약 이런 표현 방법이 없었다면 아래처럼 써야 했을 겁니다.</div> <div><br /></div> <div>printf("hello world</div> <div>");</div> <div><br /></div> <div>world 뒤에 공백을 몇 개 넣어야 한다면 알아보기 매우 어려워집니다. \n 이라고 쓰는게 낫죠.</div> <div>소스코드에서 구분하기 어려운 문자들을 뽑아서 역슬래쉬 다음에 이어 쓰는걸로 정해 놓은겁니다.</div> <div>만약 hello world를 출력하지 않고</div> <div>hello "world" 를 출력하고 싶다면 </div> <div><br /></div> <div>printf("hello \"world\"\n"); 라고 고쳐주면 됩니다. </div> <div><br /></div> <div>처음엔 읽기 어려운데 익숙해지면 눈에 들어옵니다.</div> <div><br /></div> <div><br /></div> <div>* ;</div> <div>C언어의 모든 문장은 ;(세미콜론)으로 끝나야 합니다.</div> <div>제일 많이 실수하는게 바로 세미콜론 빼먹는거 입니다.</div> <div>일부러 빼고 빌드 해보세요. 다음과 같은 에러 메세지가 나옵니다.</div> <div><br /></div> <div>error C2143: 구문 오류 : ';'이(가) '}' 앞에 없습니다.</div> <div><br /></div> <div>요즘 컴파일러는 꽤 친절해서 오류의 원인을 이렇게 자세히 알려줍니다. 그러니 오류 메세지를 잘 읽어보세요.</div> <div>VS에서는 오류메세지를 더블클릭하면 해당 오류가 발생한 소스코드로 이동합니다.</div> <div><br /></div> <div>* cc 와 a.out</div> <div>책에는 cc로 빌드하고 a.out을 실행한다고 나옵니다.</div> <div>유닉스 계열에서는 이렇게 합니다. C만 해도 어려운데 유닉스가 왠 말입니까?</div> <div>저는 익숙한 윈도 환경에서 실습 하는걸 권장합니다.</div> <div><br /></div> <div>cc는 C 컴파일러를 실행하는 것이고, 유닉스 계열은 대개 C 컴파일러가 설치 되어 있습니다.</div> <div>리눅스를 기본 옵션으로 깔아도 아마 gcc 라는 C 컴파일러가 설치될 겁니다.</div> <div><br /></div> <div>컴파일러는 옵션이 무척 많습니다. 책의 hello world 예제는 아주 간단하기 때문에 별다른 옵션을 지정하지 않아도 잘 빌드될 겁니다.</div> <div>빌드 결과인 실행파일이 a.out 이라는 이름으로 같은 디렉토리에 생성됩니다. </div> <div>왜 하필 a.out 이라고 만들까요? 재미있는 스토리가 있을거 같습니다. 구글에 "why a.out" 라고 검색해 보니 어셈블러가 a.out을 기본 실행파일명으로 사용하기 때문이라고 나오는군요.</div> <div>더 찾아보고 싶어지네요.</div> <div><br /></div> <div>만약 콘솔에서 a.out이라고 쳐도 실행이 안 되고 command를 찾을 수 없다고 나온다면</div> <div>./a.out 이라고 치면 됩니다. 현재 디렉토리의 a.out 을 실행시키라는 뜻입니다.</div> <div><br /></div> <div>오늘은 여기까지인데요, 책에서는 불과 두 페이지 반 밖에 안 되는 분량입니다. 아...</div>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.