쉽게풀어쓴 C 언어 Express 제 2 장프로그램개발과정 컴퓨터프로그래밍기초
프로그램작성과정 에디터 (editer) 컴파일러 (compiler) 링커 (linker) 로더 (loader) 소스파일 test.c 오브젝트파일 test.obj 실행파일 test.exe 통합개발환경 (IDE) 컴퓨터프로그래밍기초 2
프로그램작성단계 편집 (edit) 에디터를이용하여원하는작업의내용을기술하여소스코드작성 소스파일 (source file): 소스코드가들어있는텍스트파일 ( 예 ) test.c 컴파일 (compile) 소스파일-> 기계어로변환 오브젝트파일 (object file) : 기계어로변환된파일 ( 예 ) test.obj ( 혹은 test.o) 링크 (link) 오브젝트파일들을라이브러리파일들과연결하여하나의실행파일생성 실행파일 (executable file): 실행이가능한파일 ( 예 ) test.exe ( 혹은 a.out, test) 컴퓨터프로그래밍기초 3
컴퓨터프로그래밍기초 4
Q & A (Q) 소스파일과오브젝트파일, 실행파일중에서반드시보관하여야하는파일은무엇일까? (A) 정답은소스파일이다. 소스파일만있으면컴파일러를수행시켜서오브젝트파일, 실행파일은만들수있다. 하지만소스파일을삭제하면컴파일이불가능하다. 따라서반드시소스파일은잘보관하여야한다. Visual C++ 에서는프로젝트와워크스페이스파일도같이보관하는것이좋다. 이러한파일들은다시만들수도있지만번거로운작업이된다. 컴퓨터프로그래밍기초 5
통합개발환경 통합개발환경 (IDE: integrated development environment): 에디터 + 컴파일러 + 디버거 디버거 : 소스를디버깅할수있다. 에디터 : 소스를작성할수있다. 컴파일러 : 소스를컴파일할수있다. 컴퓨터프로그래밍기초 6
통합개발환경의종류 비주얼스튜디오 마이크로소프트사의제품 윈도우기반의거의모든형태의응용프로그램제작가능 최신버전 : 비주얼스튜디오 2011( 개발자버전 ) 우리가사용할버전 : 비주얼스튜디오 2010 컴퓨터프로그래밍기초 7
통합개발환경의종류 Dev-C++ 오픈소스프로젝트의산물 C/C++ 통합개발환경 GCC 컴파일러이용 무료 컴퓨터프로그래밍기초 8
비주얼스튜디오 2010 시작하기 설정하기 : C/C++ 을개발하기위한설정하기. 컴퓨터프로그래밍기초 9
비주얼스튜디오 2010 시작하기 컴퓨터프로그래밍기초 10
비주얼스튜디오 2010 시작하기 컴퓨터프로그래밍기초 11
비주얼스튜디오 2010 시작하기 컴퓨터프로그래밍기초 12
워크스페이스와프로젝트 워크스페이스 (workspace); 작업공간, 여러개의프로젝트가있을수있다. 프로젝트 (project): 하나의실행파일을만들기위하여필요한파일들의그룹 프로젝트 : 실행파일을만들기위하여필요한파일들 워크스페이스 : 여러개의프로젝트들을가지고있는작업공간 컴퓨터프로그래밍기초 13
비주얼스튜디오 2010 시작하기 새로운프로젝트생성. 컴퓨터프로그래밍기초 14
프로젝트생성하기 프로젝트이름 파일이저장될위치 컴퓨터프로그래밍기초 15
프로젝트생성하기 컴퓨터프로그래밍기초 16
프로젝트생성하기 컴퓨터프로그래밍기초 17
소스파일생성하기 오른쪽클릭 컴퓨터프로그래밍기초 18
소스파일생성하기 선택 생성할파일이름. 확장자는.c 컴퓨터프로그래밍기초 19
소스파일에프로그램작성 Test.c 의내용이여기에표시된다. 생성된파일 컴퓨터프로그래밍기초 20
비주얼스튜디오 2010 의전체구조 프로젝트에속하는파일을보여준다. 소스파일을에디팅하는윈도우. 컴파일과링크과정에서의메시지출력. 컴퓨터프로그래밍기초 21
프로그램입력 철자가틀리지않도록조심! 컴퓨터프로그래밍기초 22
프로그램입력시주의사항 /* 와 */ 에서 / 와 * 는반드시붙여서쓰도록한다. include 나 stdio 와같은단어는붙여서쓴다. /* 첫번째프로그램 */ #include <stdio.h> int main(void) { printf("hello World!"); return 0; } 큰따옴표안의문장들은화면에그대로출력된다. 여기서 \ 와 n 은반드시붙여야한다. int 와 main 은별도의단어이므로구별하기위하여공백이있문장의끝에는 ; 을잊지말자. 어야한다. ; 와 : 을잘구별한다. 서로대응되는중괄호들은같은열에놓는편이좋다. 컴퓨터프로그래밍기초 중괄호안에들어가는문장들은일반적으로들여쓰기를한다. 탭키를이용하거나스페이스키를이용한다. 비주얼 C++ 에는자동적으로들여쓰기를해주는기능이있다. 23
컴파일하기 빌드 (build) 란보통컴파일과링크를수행하여실행파일을작성하는것을의미한다. 컴퓨터프로그래밍기초 24
컴파일결과 에러가없다면이런화면이나타난다. 컴퓨터프로그래밍기초 25
오브젝트파일과실행파일의생성 실행파일이생성된것을확인할수있다. 컴퓨터프로그래밍기초 26
프로그램실행하기 컴퓨터프로그래밍기초 27
실행결과화면 프로그램의출력. 프로그램실행이끝나면나오는메시지. 컴퓨터프로그래밍기초 28
첫번째프로그램의설명 /* 첫번째프로그램 */ #include <stdio.h> int main(void) { printf("hello World!"); return 0; } Hello World! 컴퓨터프로그래밍기초 29
주석 주석 (comment): 프로그램에대한설명 /* 한줄로된주석 */ 주석은프로그램을설명하는글입니다. int main(void) /* 줄의일부분인주석 */ /* 여러줄로된주석 */ 컴퓨터프로그래밍기초 30
헤더파일포함 #include <stdio.h> #include 는소스코드안에특정파일을현재의위치에포함 헤더파일 (header file): 컴파일러가필요로하는정보를가지고있는파일 stdio.h: standard input output header file 주의!: 전처리기지시자문장끝에는세미콜론을붙이면안된다. 컴퓨터프로그래밍기초 31
함수 int main(void) 함수 (function): 특정한작업을수행하기위하여작성된독립적인코드 ( 참고 ) 수학적인함수 y x 2 1 프로그램 = 함수의집합 main() 은가장먼저수행되는함수 입력 함수 출력 컴퓨터프로그래밍기초 32
문장 함수는여러개의문장으로이루어진다. 문장들은순차적으로실행된다. 컴퓨터프로그래밍기초 33
출력함수 printf() printf( Hello World! ); printf() 는컴파일러가제공하는함수로서출력을담당합니다. 큰따옴표안의문자열을화면에출력합니다. Hello World! 컴퓨터프로그래밍기초 34
함수반환문 return 0; return 은함수의결과값을외부로반환합니다. 운영체제 main() printf( Hello World! ); return 0; 운영체제 컴퓨터프로그래밍기초 35
응용프로그램 #1 다음과같은출력을가지는프로그램을제작하여보자. Hello world! Kim ChulSoo 컴퓨터프로그래밍기초 36
첫번째버전 문장들은순차적으로실행된다는사실이용 /* 첫번째프로그램 */ #include <stdio.h> int main(void) { printf("hello World!"); printf( Kim ChulSoo"); return 0; } 우리가원하는결과가아님! Hello World!Kim ChulSoo 컴퓨터프로그래밍기초 37
줄바꿈문자 \n 줄바꿈문자인 \n 은화면에서커서는다음줄로이동하게한다. 컴퓨터프로그래밍기초 38
변경된프로그램 줄바꿈문자를포함하면우리가원하던결과가된다. /* 첫번째프로그램 */ #include <stdio.h> int main(void) { printf("hello World!\n"); printf( Kim ChulSoo"); return 0; } Hello World! Kim ChulSoo 컴퓨터프로그래밍기초 39
응용프로그램 #2 다음과같은출력을가지는프로그램을제작하여보자. 3X1=3 3X1=3 3X2=6 3X2=6 3X3=9 3X3=9 컴퓨터프로그래밍기초 40
응용프로그램 역시문장들은순차적으로수행된다는점을이용한다. /* 첫번째프로그램의응용 */ #include <stdio.h> int main(void) { printf("3 X 1 = 3\n"); printf("3 X 2 = 6\n"); printf("3 X 3 = 9\n"); } return 0; 컴퓨터프로그래밍기초 41
오류수정및디버깅 컴파일이나실행시에오류가발생할수있다. 에러와경고 에러 (error): 심각한오류 경고 (warning): 경미한오류 오류의종류 컴파일시간오류 : 대부분문법적인오류 실행시간오류 : 실행중에 0으로나누는연산같은오류 논리오류 : 논리적으로잘못되어서결과가의도했던대로나오지않는오류 컴퓨터프로그래밍기초 42
오류메시지의분석 에러가발견된소스파일명 return 앞에 ; 를빠뜨렸다는의미이다. Compiling... test.c c:\cprogram\test\test.c(7) : error C2143: syntax error : missing ';' before 'return' Error executing cl.exe. 에러가발견된라인의번호 문법적인오류 (syntax error) 가있었음을나타낸다. 컴퓨터프로그래밍기초 43
오류수정과정 컴파일러 (compiler) 링커 (linker) 실행 (execution) 소스파일 test.c 오브젝트파일 test.obj 실행파일 test.exe ERROR!! 컴파일시간오류 실행시간오류논리오류 컴퓨터프로그래밍기초 44
오류 #1 /* 에러가발생하는프로그램 */ #include <stdio.h> int main(void) { printf("hello World!\n") return 0; } 문장의끝에 ; 이없음!! --------------------Configuration: test - Win32 Debug-------------------- Compiling... test.c C:\PROJECT\test\test.c(7) : error C2143: syntax error : missing ';' before 'return' Error executing cl.exe. test.exe - 1 error(s), 0 warning(s) 컴퓨터프로그래밍기초 45
오류 #2 /* 에러가발생하는프로그램 * / #include <stdio.h> int main(void) { printf("hello World!\n") return 0; } * 과 / 이떨어져있음 -> 전체가주석처리됨 --------------------Configuration: test - Win32 Debug-------------------- Compiling... test.c c:\project\test\test.c(9) : fatal error C1071: unexpected end of file found in comment Error executing cl.exe. test.exe exe - 1 error(s), 0 warning(s) 컴퓨터프로그래밍기초 46
오류 #3 /* 첫번째프로그램 */ #include <stdio,h> int main(void) { print("hello World!"); return 0; } stdio.h 로적어주어야됨 --------------------Configuration: test - Win32 Debug-------------------- Compiling... test.c c:\project\test\test.c(2) : fatal error C1083: Cannot open include file: 'stdio,h': No such file or directory 컴퓨터프로그래밍기초 47
오류 #4 /* 첫번째프로그램 */ #include <stdio.h> int main(void) { print("hello World!"); return 0; } print 가아니라 printf 임 -------------------Configuration: test - Win32 Debug-------------------- Compiling... test.c C:\CPROGRAM\test\test.c(6) : warning C4013: 'print' undefined; assuming extern returning int Linking... test.obj : error LNK2001: unresolved external symbol _print Debug/test.exe : fatal error LNK1120: 1 unresolved externals Error executing link.exe. test.exe - 2 error(s), 1 warning(s) 48 컴퓨터프로그래밍기초
논리오류 다음과같은출력을가지는프로그램을작성하여보자. Hello World! Good Morning 컴퓨터프로그래밍기초 49
논리오류가존재하는프로그램 /* 첫번째프로그램 */ #include <stdio.h> int main(void) { printf("hello World!\n"); printf("good Morning\n"); return 0; } // 1 줄바꿈문자인 \n때문에줄이바뀌었음. Hello World! Good Morning 컴퓨터프로그래밍기초 50
논리오류가수정된프로그램 /* 첫번째프로그램 */ #include <stdio.h> int main(void) { printf("hello World! "); printf("good Morning\n"); return 0; } // 1 논리오류수정!! Hello World! Good Morning 컴퓨터프로그래밍기초 51
디버깅 디버깅 : 논리오류를찾는과정 컴퓨터프로그래밍기초 52
디버거 (debugger) 컴퓨터프로그래밍기초 53
디버거의실행과정 컴퓨터프로그래밍기초 54
디버거의실행과정 컴퓨터프로그래밍기초 55
디버거의명령어정의 F5 (Go): 실행 F10 (Step Over): 한문장씩실행 ( 함수도하나의문장취급 ) F11 (Step Into): 한문장씩실행 ( 함수안으로진입 ) F9 (Breakpoint): 현재문장에중단점을설정 컴퓨터프로그래밍기초 56
Q & A 컴퓨터프로그래밍기초 57