쉽게풀어쓴 C 언어 Express 제 2 장프로그램개발과정
통합개발환경 통합개발환경 (IDE: integrated development environment) 에디터 + 컴파일러 + 디버거 Visual C++: 이클립스 (eclipse): Dev-C++: 마이크로소프트제작 오픈소스프로젝트 오픈소스프로젝트
통합개발환경의종류 비주얼 C++(Visual C++) 마이크로소프트사의제품 윈도우기반의거의모든형태의응용프로그램제작가능 최신버전 : 비주얼 C++ 2010 우리가사용할버전 : 비주얼 C++ 2010
통합개발환경의종류 Dev-C++ 오픈소스프로젝트의산물 C/C++ 통합개발환경 GCC 컴파일러이용 무료
비주얼 C++ 설치
워크스페이스와프로젝트 솔루션 (solution); 문제해결에필요한프로젝트가들어있는컨테이너프로젝트 (project): 하나의실행파일을만드는데필요한여러가지항목들이들어있는컨테이너
프로젝트생성하기
프로젝트생성하기
프로젝트생성하기
소스파일생성하기
소스파일생성하기
프로그램입력
프로그램입력
전문가설정
컴파일하기
프로그램실행하기
중간점검 에디터, 컴파일러, 링커, 실행, 디버깅등의기능이하나의프로그램안에들어있는것을무엇라고하는가? Visual C++ 에서새로운프로젝트를생성하는메뉴는무엇인가? Visual C++ 에서프로젝트에속하는소스파일을컴파일하여실행파일을생성하는메뉴는? C 언어에서는대문자와소문자를구별하는가? Visual C++ 를이용하여서 sample.c라는소스파일을컴파일하였을때생성되는파일들은무엇인가? Visual C++ 를사용하여소스프로그램을편집하는경우, 메모장같은다른텍스트에디터를사용하여도되는가?
첫번째프로그램의설명 #include <stdio.h> int main(void) { printf("hello World!"); return 0; }
프로그램 == 작업지시서 #include <stdio.h> * 화면에 Hello World! 를표시한다. int main(void) { printf("hello World!"); return 0; } 작업지시서 프로그램
작업을적어주는위치 #include <stdio.h> int main(void) { 여기다가원하는작업을수행하는문장을적어준다. return 0; } 프로그램
간략한소스설명 #include <stdio.h> int main(void) { } printf("hello World!"); return 0; 헤더파일을포함한다. 메인함수시작화면에 Hello World! 를출력외부로 0값을반환 메인함수종료 프로그램
#include <stdio.h> #include 는소스코드안에특정파일을현재의위치에포함 헤더파일 (header file): 컴파일러가필요로하는정보를가지고있는파일 stdio.h: standard input output header file 주의!: 전처리기지시자문장끝에는세미콜론 (;) 을붙이면안된다.
int main(void) 함수를정의하는문장 함수 (function): 특정한작업을수행하기위하여작성된독립적인코드 ( 참고 ) 수학적인함수 y x 2 1 프로그램 = 함수의집합 main() 은가장먼저수행되는함수 입력 함수 출력
함수의간략한설명
문장 함수는여러개의문장으로이루어진다. 문장들은순차적으로실행된다. 문장의끝에는반드시 ; 이있어야한다.
printf("hello World!"); printf() 는컴파일러가제공하는함수로서출력을담당합니다. 큰따옴표안의문자열을화면에출력합니다.
return 0; return 은함수의결과값을외부로반환합니다. 운영체제 main() printf( Hello World! ); return 0; 운영체제
중간점검 문장의끝에추가하여야하는기호는? printf() 가하는기능은무엇인가?
응용프로그램 #1 다음과같은출력을가지는프로그램을제작하여보자.
첫번째버전 문장들은순차적으로실행된다는사실이용 #include <stdio.h> int main(void) { printf("hello World!"); printf("kim ChulSoo"); 2 개의문장은순차적으로실행된다. } return 0;
줄바꿈문자 \n 줄바꿈문자인 \n 은화면에서커서는다음줄로이동하게한다. Hello World! printf( Hello World! ); Hello World! 현재커서의위치. 다음문자를표시할때는이곳부터시작한다. printf( Hello World!\n );
줄바꿈문자 2 개를사용하면?
변경된프로그램 줄바꿈문자를포함하면우리가원하던결과가된다. #include <stdio.h> int main(void) { printf("hello World!\n"); printf("kim ChulSoo \n"); return 0; }
응용프로그램 #2 다음과같은출력을가지는프로그램을제작하여보자.
응용프로그램 역시문장들은순차적으로수행된다는점을이용한다. #include <stdio.h> int main(void) { printf("3 X 1 = 3\n"); printf("3 X 2 = 6\n"); printf("3 X 3 = 9\n"); 3 개의문장은순차적으로실행된다. } return 0;
중간점검 화면에새로운줄을만드는데사용되는특수한기호는? 사과, 오렌지, 포도 를한줄에하나씩출력하는프로그램을작성하여보자. 구구단 3단전체를출력하는프로그램을작성하여보자.
오류수정및디버깅 컴파일이나실행시에오류가발생할수있다. 에러와경고 에러 (error): 심각한오류 경고 (warning): 경미한오류 오류의종류 컴파일시간오류 : 대부분문법적인오류 실행시간오류 : 실행중에 0으로나누는연산같은오류 논리오류 : 논리적으로잘못되어서결과가의도했던대로나오지않는오류
오류수정과정 컴파일러 (compiler) 링커 (linker) 실행 (execution) 소스파일 test.c 오브젝트파일 test.obj 실행파일 test.exe ERROR!! 컴파일시간오류 실행시간오류논리오류
오류 #1 #include <stdio.h> int main(void) { printf("hello World!\n") return 0; } 문장의끝에 ; 이없음!! 오류가발견된소스파일 오류가발견된줄번호 return 앞에 ; 을빠뜨렸다는의미이다. 1>------ 모두다시빌드시작 : 프로젝트 : hello, 구성 : Debug Win32 ------ 1> hello.c 1>c:\users\chun\documents\visual studio 2010\projects\hello\hello\hello.c(7): error C2143: 구문오류 : ';' 이 ( 가 ) 'return' 앞에없습니다. ========== 모두다시빌드 : 성공 0, 실패 1, 생략 0 ==========
오류 #2 /* 에러가발생하는프로그램 * / #include <stdio.h> int main(void) { printf("hello World!\n") return 0; } * 과 / 이떨어져있음 -> 전체가주석처리됨 1>------ 빌드시작 : 프로젝트 : hello, 구성 : Debug Win32 ------ 1> hello.c 1>c:\users\chun\documents\visual studio 2010\projects\hello\hello\hello.c(9): fatal error C1071: 주석에서예기치않은파일의끝이나타났습니다. ========== 빌드 : 성공 0, 실패 1, 최신 0, 생략 0 ========== 주석은프로그램에대한설명글로서 /* */ 안에표시한다.
오류 #3 #include <stdio.h> int main(void) { print("hello World!"); return 0; } print 가아니라 printf 임 1>------ 빌드시작 : 프로젝트 : hello, 구성 : Debug Win32 ------ 1> hello.c 1>c:\users\chun\documents\visual studio 2010\projects\hello\hello\hello.c(6): warning C4013: 'print' 이 ( 가 ) 정의되지않았습니다. extern 은 int 형을반환하는것으로간주합니다. 1>hello.obj : error LNK2019: _print 외부기호 ( 참조위치 : _main 함수 ) 에서확인하지못했습니다. 1>c:\Users\chun\Documents\Visual Studio 2010\Projects\hello\Debug\hello.exe : fatal error LNK1120: 1 개의확인할수없는외부참조입니다. ========== 빌드 : 성공 0, 실패 1, 최신 0, 생략 0 ==========
논리오류 다음과같은출력을가지는프로그램을작성하여보자.
논리오류가존재하는프로그램 #include <stdio.h> int main(void) { printf("hey!"); printf("good Morning"); return 0; } 줄이바뀌지않았음!
논리오류가수정된프로그램 #include <stdio.h> int main(void) { printf("hey! \n"); printf("good Morning \n"); return 0; } 논리오류수정!!
디버깅 디버깅 : 논리오류를찾는과정
디버거 (debugger)
디버거의실행과정
디버거의명령어정의 F5 (Go): 실행 F10 (Step Over): 한문장씩실행 ( 함수도하나의문장취급 ) F11 (Step Into): 한문장씩실행 ( 함수안으로진입 ) F9 (Breakpoint): 현재문장에중단점을설정
중간점검 프로그램을편집하여컴파일, 링크를한다음, 실행시켰는데자신이기대한대로결과가나오지않았다. 이때는어떻게하여야하는가? 비교적경미한오류를무엇이라고하는가?
Q & A