제2장프로그램개발과정 - kangwon · 프로그램작성과정 컴파일러 (compiler)...

57
쉽게 풀어쓴 C언어 Express 쉽게 풀어쓴 C언어 Express 2프로그램 개발 과정 2프로그램 개발 과정 컴퓨터 프로그래밍 기초

Upload: others

Post on 10-Jun-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

쉽게 풀어쓴 C언어 Express쉽게 풀어쓴 C언어 Express

제2장 프로그램 개발 과정제2장 프로그램 개발 과정

컴퓨터프로그래밍기초

Page 2: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

프로그램작성과정작성과정

컴파일러(compiler)컴파일러(compiler)

링커(linker)링커(linker)

로더(loader)로더(loader)

에디터(editer)에디터(editer)

소스파일

test.c

오브젝트파일

test.obj

실행파일

test.exe

통합 개발 환경(IDE)

컴퓨터프로그래밍기초 2

Page 3: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

프로그램작성단계램작성단계 편집 (edit)

에디터를이용하여원하는작업의내용을기술하여소스코드작성 소스파일(source file): 소스코드가들어있는텍스트파일

(예) test.c

컴파일 (compile) 소스파일->기계어로변환 오브젝트파일(object file) : 기계어로변환된파일

(예) test.obj (혹은 test.o)

링크(link) 오브젝트파일들을라이브러리파일들과연결하여하나의실행파일생성성

실행파일 (executable file): 실행이가능한파일 (예) test.exe (혹은 a.out, test)

컴퓨터프로그래밍기초 3

Page 4: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

컴퓨터프로그래밍기초 4

Page 5: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

Q & AQ (Q)소스 파일과 오브젝트 파일, 실행 파일 중에서 반드시 보관하여야하는 파일은 무엇일까?야하는 파일은 무엇일까?

(A) 정답은 소스 파일이다. 소스 파일만 있으면 컴파일러를 수행시켜서 오브젝트 파일, 실행 파일은 만들 수 있다. 하지만 소스 파일을켜서 젝 파일, 실행 파일은 만들 수 있다 하지만 파일을삭제하면 컴파일이 불가능하다. 따라서 반드시 소스 파일은 잘 보관하여야 한다. Visual C++에서는 프로젝트와 워크스페이스 파일도같이 보관하는 것이 좋다 이러한 파일들은 다시 만들 수도 있지만같이 보관하는 것이 좋다. 이러한 파일들은 다시 만들 수도 있지만번거로운 작업이 된다.

컴퓨터프로그래밍기초 5

Page 6: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

통합개발환경통 개발 경 통합 개발 환경(IDE: integrated development environment):

에디터 + 컴파일러 + 디버거 디버거: 소스를 에디터 + 컴파일러 + 디버거 디버거: 소스를디버깅 할 수 있다.

에디터: 소스를작성 할 수 있다에디터: 소스를작성 할 수 있다작성 할 수 있다.작성 할 수 있다.

컴파일러: 소스를컴파일 할 수 있다컴파일러: 소스를컴파일 할 수 있다

컴퓨터프로그래밍기초 6

컴파일 할 수 있다.컴파일 할 수 있다.

Page 7: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

통합개발환경의종류

비주얼 스튜디오 마이크로소프트사의 제품 윈도우 기반의 거의 모든 형태의 응용 프로그램 제작 가능최신 버전 비주얼 스튜디오 2011(개발자 버전) 최신 버전: 비주얼 스튜디오 2011(개발자 버전)

우리가 사용할 버전: 비주얼 스튜디오 2010

컴퓨터프로그래밍기초 7

Page 8: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

통합개발환경의종류

Dev-C++ 오픈 소스 프로젝트의 산물 C/C++ 통합 개발 환경

GCC 컴파일러 이용 GCC 컴파일러 이용 무료

컴퓨터프로그래밍기초 8

Page 9: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

비주얼스튜디오 2010 시작하기

설정하기: C/C++을 개발하기위한 설정하기.설정하기: C/C++을 개발하기위한 설정하기.

컴퓨터프로그래밍기초 9

Page 10: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

비주얼스튜디오 2010 시작하기

컴퓨터프로그래밍기초 10

Page 11: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

비주얼스튜디오 2010 시작하기

컴퓨터프로그래밍기초 11

Page 12: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

비주얼스튜디오 2010 시작하기

컴퓨터프로그래밍기초 12

Page 13: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

워크스페이스와프로젝트

워크스페이스(workspace); 작업 공간, 여러 개의 프로젝트가 있을 수있다.

프로젝트(project): 하나의 실행 파일을 만들기 위하여 필요한 파일들의 그룹들의 그룹

프로젝트: 실행 파일을 만들기 위하여 필요한 파일들

프로젝트: 실행 파일을 만들기 위하여 필요한 파일들

워크스페이스: 여러 개의 프로젝트들을워크스페이스: 여러 개의 프로젝트들을여러 개의 프로젝트들을가지고 있는 작업공간여러 개의 프로젝트들을가지고 있는 작업공간

컴퓨터프로그래밍기초 13

Page 14: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

비주얼스튜디오 2010 시작하기

새로운 프로젝트 생성.새로운 프로젝트 생성.

컴퓨터프로그래밍기초 14

Page 15: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

프로젝트생성하기

프로젝트 이름

파일이 저장될 위치

컴퓨터프로그래밍기초 15

Page 16: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

프로젝트생성하기

컴퓨터프로그래밍기초 16

Page 17: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

프로젝트생성하기

컴퓨터프로그래밍기초 17

Page 18: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

소스파일생성하기

오른쪽 클릭

컴퓨터프로그래밍기초 18

Page 19: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

소스파일생성하기

선택

생성할 파일이름.확장자는 ‘.c’

컴퓨터프로그래밍기초 19

Page 20: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

소스파일에프로그램작성

‘Test.c’ 의 내용이여기에 표시된다.

생성된 파일

컴퓨터프로그래밍기초 20

Page 21: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

비주얼스튜디오 2010의 전체 구조

소스 파일을에디팅하는 윈도우에디팅하는 윈도우.

프로젝트에속하는 파일을

보여준다.

컴파일과 링크과정에서의 메시지 출력.

컴퓨터프로그래밍기초 21

Page 22: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

프로그램입력

철자가 틀리지않도록 조심!않도록 조심!

컴퓨터프로그래밍기초 22

Page 23: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

프로그램입력시주의사항

/* 첫번째 프로그램 */

/*와 */에서 /와 *는 반드시 붙여서 쓰도록 한다./*와 */에서 /와 *는 반드시 붙여서 쓰도록 한다.

include나 stdio와 같은단어는 붙여서 쓴다.include나 stdio와 같은단어는 붙여서 쓴다.

/ 첫번째 프로그램 /#include <stdio.h>

int main(void)int와 mainint와 main

큰따옴표안의 문장들은 화면에그대로 출력된다. 여기서 \와n은 반드시 붙여야 한다.

큰따옴표안의 문장들은 화면에그대로 출력된다. 여기서 \와n은 반드시 붙여야 한다.

int main(void){

printf("Hello World!");return 0;

int와 main 은 별도의단어이므로 구별하기 위하여공백이 있

int와 main 은 별도의단어이므로 구별하기 위하여공백이 있 문장의 끝에는 ;을 잊지말자.문장의 끝에는 ;을 잊지말자.;

}공백이 있어야 한다.공백이 있어야 한다.

문장의 끝에는 ;을 잊지말자.;와 :을 잘 구별한다.문장의 끝에는 ;을 잊지말자.;와 :을 잘 구별한다.

서로 대응되는 중괄호들은같은 열에 놓는 편이 좋다.서로 대응되는 중괄호들은같은 열에 놓는 편이 좋다.

중괄호안에 들어가는 문장들은일반적으로 들여쓰기를 한다. 탭키를 이용하거나 스페이스키중괄호안에 들어가는 문장들은일반적으로 들여쓰기를 한다. 탭키를 이용하거나 스페이스키

컴퓨터프로그래밍기초

를 이용한다. 비주얼 C++에는자동적으로 들여쓰기를 해주는기능이 있다.

를 이용한다. 비주얼 C++에는자동적으로 들여쓰기를 해주는기능이 있다. 23

Page 24: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

컴파일하기

빌드(build)란 보통 컴파일과 링크를 수행하여 실행 파일을 작성하는 것을 의미한다.

컴퓨터프로그래밍기초 24

Page 25: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

컴파일결과

에러가 없다면 이런화면이 나타난다.

컴퓨터프로그래밍기초 25

Page 26: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

오브젝트파일과실행파일의생성

실행 파일이 생성된것을 확인 할 수 있다.

컴퓨터프로그래밍기초 26

Page 27: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

프로그램실행하기

컴퓨터프로그래밍기초 27

Page 28: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

실행결과화면

프로그램의 출력.

행프로그램 실행이 끝나면 나오는 메시지.

컴퓨터프로그래밍기초 28

Page 29: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

첫번째프로그램의설명

/* 첫번째프로그램*/#i l d tdi h#include <stdio.h>

int main(void){

printf("Hello World!");return 0;

}

Hello World!

컴퓨터프로그래밍기초 29

Page 30: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

주석

주석(comment): 프로그램에 대한 설명 주석은프로그램을

/* 한줄로된주석 */

프로그램을설명하는글입니다.

int main(void) /* 줄의일부분인주석 */

/* 여러/ 여러줄로된주석 */

컴퓨터프로그래밍기초 30

Page 31: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

헤더파일포함

#include <stdio.h>

#include는 소스 코드 안에 특정 파일을 현재의 위치에 포함

#include stdio.h

#include는 소스 코드 안에 특정 파일을 현재의 위치에 포함 헤더 파일(header file): 컴파일러가 필요로 하는 정보를 가지고 있는파일

stdio.h: standard input output header file 주의!: 전처리기 지시자 문장 끝에는 세미콜론을 붙이면 안 된다.

컴퓨터프로그래밍기초 31

Page 32: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

함수

int main(void)입력

함수(function): 특정한작업을수행하기위하여작성된독립적인코드

입력

(참고) 수학적인함수 프로그램 = 함수의집합

12 xy함수

main()은가장먼저수행되는함수

출력

컴퓨터프로그래밍기초 32

Page 33: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

문장

함수는여러개의문장으로이루어진다 함수는여러개의문장으로이루어진다. 문장들은순차적으로실행된다.

컴퓨터프로그래밍기초 33

Page 34: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

출력함수 printf()p ()

printf(“Hello World!”);

printf()는 컴파일러가 제공하는 함수로서 출력을 담당합니다. 큰따옴표 안의 문자열을 화면에 출력합니다.

Hello World!

컴퓨터프로그래밍기초 34

Page 35: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

함수 반환문함수 반환문return 0;

운영체제

return은 함수의 결과값을 외부로 반환합니다.

main()

운영체제

printf(“Hello World!”);return 0;

컴퓨터프로그래밍기초

운영체제

35

Page 36: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

응용 프로그램 #1응용 램

다음과 같은 출력을 가지는 프로그램을 제작하여 보자.

Hello world!Kim ChulSoo

컴퓨터프로그래밍기초 36

Page 37: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

첫번째 버전첫번 전

문장들은 순차적으로 실행된다는 사실 이용

/* 첫번째프로그램*/#include <stdio.h>

int main(void){

우리가원하는{

printf("Hello World!");printf(“Kim ChulSoo");return 0;

원하는결과가 아님!

return 0;}

Hello World!Kim ChulSoo

컴퓨터프로그래밍기초 37

Page 38: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

줄바꿈 문자 \n줄 꿈 문

줄바꿈 문자인 \n은 화면에서 커서는 다음줄로 이동하게 한다.

컴퓨터프로그래밍기초 38

Page 39: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

변경된 프로그램변경된 램

줄바꿈 문자를 포함하면 우리가 원하던 결과가 된다.

/* 첫번째프로그램*/#include <stdio.h>

int main(void){{

printf("Hello World!\n");printf(“Kim ChulSoo");return 0;return 0;

}

Hello World!Kim ChulSoo

컴퓨터프로그래밍기초 39

Page 40: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

응용 프로그램 #2응용 램

다음과 같은 출력을 가지는 프로그램을 제작하여 보자.

3X1=33X2=6

3X1=33X2 63X2=6

3X3=93X2=63X3=9

컴퓨터프로그래밍기초 40

Page 41: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

응용 프로그램응용 램

역시 문장들은 순차적으로 수행된다는 점을 이용한다.

/* 첫번째프로그램의응용*/#include <stdio.h>

int main(void){

f(" ")printf("3 X 1 = 3\n");printf("3 X 2 = 6\n");printf("3 X 3 = 9\n");

return 0;}}

컴퓨터프로그래밍기초 41

Page 42: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

오류 수정 및 디버깅류 수정 및 깅

컴파일이나 실행 시에 오류가 발생할 수 있다.

에러와 경고

에러(error): 심각한 오류경고( i ) 경미한 오류 경고(warning): 경미한 오류

오류의 종류 오류의 종류

컴파일 시간 오류: 대부분 문법적인 오류 실행 시간 오류: 실행 중에 0으로 나누는 연산 같은 오류 논리 오류: 논리적으로 잘못되어서 결과가 의도했던 대로 나오지않는 오류

컴퓨터프로그래밍기초 42

Page 43: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

오류메시지의분석

에러가 발견된 소스 파일명 return 앞에 ;를 빠뜨렸다는

Compiling

return 앞에 ;를 빠뜨렸다는의미이다.

Compiling... test.cc:\cprogram\test\test.c(7) : error C2143: syntax error : missing ';' before 'return' Error executing cl.exe.

에러가 발견된 라인의 번호 문법적인 오류(syntax error)가 있었음을 나타낸다.

컴퓨터프로그래밍기초 43

Page 44: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

오류 수정 과정류 수정 정

컴파일러(compiler)컴파일러(compiler)

링커(linker)링커(linker)

실행(execution)실행(execution)

ERROR!!소스파일 오브젝트파일

실행파일test.c

파일test.obj test.exe

실행 시간 오류실행 시간 오류컴파일 시간 오류컴파일 시간 오류논리 오류논리 오류

컴퓨터프로그래밍기초 44

Page 45: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

오류 #1류

/* 에러가발생하는프로그램 */#include <stdio.h>

int main(void)문장의

끝에 ;이int main(void){

printf("Hello World!\n")return 0;

없음!!

return 0;}

--------------------Configuration: test - Win32 Debug----------------------------------------Configuration: test - Win32 Debug--------------------Compiling...test.cC:\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

Page 46: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

오류 #2류

/* 에러가발생하는프로그램* /#i l d tdi h#include <stdio.h>

int main(void)

*과 /이떨어져 있음-> 전체가

{printf("Hello World!\n")return 0;

> 전체가주석처리됨

}

--------------------Configuration: test - Win32 Debug----------------------------------------Configuration: test - Win32 Debug--------------------Compiling...test.cc:\project\test\test.c(9) : fatal error C1071: unexpected end of file found in commentError executing cl.exe.

test exe - 1 error(s) 0 warning(s)

컴퓨터프로그래밍기초

test.exe - 1 error(s), 0 warning(s)

46

Page 47: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

오류 #3류

/* 첫번째프로그램*/#include <stdio h>#include <stdio,h>

int main(void){

stdio.h로적어주어야

됨{

print("Hello World!");return 0;

}}

--------------------Configuration: test - Win32 Debug----------------------------------------Configuration: test - Win32 Debug--------------------Compiling...test.cc:\project\test\test.c(2) : fatal error C1083: Cannot open include file: 'stdio,h': No such file or directory

컴퓨터프로그래밍기초 47

Page 48: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

오류 #4/* 첫번째프로그램*/#include <stdio h>#include <stdio.h>

int main(void){

print가아니라printf임

{print("Hello World!");return 0;

}

-------------------Configuration: test - Win32 Debug--------------------CompilingCompiling...test.cC:\CPROGRAM\test\test.c(6) : warning C4013: 'print' undefined; assuming extern returning intLinking...test.obj : error LNK2001: unresolved external symbol _printDebug/test.exe : fatal error LNK1120: 1 unresolved externalsError executing link exe

컴퓨터프로그래밍기초

Error executing link.exe.

test.exe - 2 error(s), 1 warning(s) 48

Page 49: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

논리 오류논 류

다음과 같은 출력을 가지는 프로그램을 작성하여 보자.

Hello World! Good Morning

컴퓨터프로그래밍기초 49

Page 50: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

논리 오류가 존재하는 프로그램논 류 존 는 램

/* 첫번째프로그램*/#include <stdio h>#include <stdio.h>

int main(void){

줄바꿈문자인

\n때문에{

printf("Hello World!\n"); // ①printf("Good Morning\n");

0

줄이바뀌었음.

return 0;}

Hello World!Good Morning

컴퓨터프로그래밍기초 50

Page 51: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

논리 오류가 수정된 프로그램논 류 수정된 램

/* 첫번째프로그램*/#include <stdio h>#include <stdio.h>

int main(void){

논리 오류수정!!

{printf("Hello World! "); // ①printf("Good Morning\n");

0return 0;}

Hello World! Good Morning

컴퓨터프로그래밍기초 51

Page 52: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

디버깅

디버깅: 논리 오류를 찾는 과정

컴퓨터프로그래밍기초 52

Page 53: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

디버거(debugger)( gg )

컴퓨터프로그래밍기초 53

Page 54: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

디버거의실행과정

컴퓨터프로그래밍기초 54

Page 55: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

디버거의실행과정

컴퓨터프로그래밍기초 55

Page 56: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

디버거의명령어정의

F5 (Go): 실행 F10 (Step Over): 한 문장씩 실행(함수도 하나의 문장 취급) F11 (Step Into): 한 문장씩 실행(함수 안으로 진입)

F9 (B k i t) 현재 문장에 중단점을 설정 F9 (Breakpoint): 현재 문장에 중단점을 설정

컴퓨터프로그래밍기초 56

Page 57: 제2장프로그램개발과정 - Kangwon · 프로그램작성과정 컴파일러 (compiler) 링커 (linker) 로더 (loader) 에디터 (editer) 소스파일 test.c 오브젝트 파일

Q & AQ

컴퓨터프로그래밍기초 57