제2장프로그램개발과정 - kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... ·...

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

Upload: others

Post on 06-Jul-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

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

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

컴퓨터프로그래밍기초

Page 2: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

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

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

링커(linker)링커(linker)

로더(loader)로더(loader)

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

소스파일

test.c

오브젝트파일

test.obj

실행파일

test.exe

통합 개발 환경(IDE)

컴퓨터프로그래밍기초 2

Page 3: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

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

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

(예) test.c

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

(예) test.obj

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

실행파일 (executable file): 실행이가능한파일 (예) test.exe

컴퓨터프로그래밍기초 3

Page 4: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

컴퓨터프로그래밍기초 4

Page 5: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

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

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

컴퓨터프로그래밍기초 5

Page 6: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

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

에디터 + 컴파일러 + 디버거 에디터 + 컴파일러 + 디버거

컴퓨터프로그래밍기초 6

Page 7: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

통합개발환경의종류

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

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

컴퓨터프로그래밍기초 7

Page 8: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

통합개발환경의종류

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

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

컴퓨터프로그래밍기초 8

Page 9: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

비주얼 C++ 실행

개발 도구를 사용할때의 유용한 정보를말해준다.

개발 도구를 사용할때의 유용한 정보를말해준다.

다음 팁을 계속보려면 우른다.다음 팁을 계속보려면 우른다.면 우면 우

체크되어 있으면 다음번 시작때도 팁을보여준다.

체크되어 있으면 다음번 시작때도 팁을보여준다.

컴퓨터프로그래밍기초 9

Page 10: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

워크스페이스와프로젝트

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

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

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

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

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

컴퓨터프로그래밍기초 10

Page 11: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

비주얼 C++ 시작하기

컴퓨터프로그래밍기초 11

Page 12: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

프로젝트생성하기

컴퓨터프로그래밍기초 12

Page 13: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

프로젝트생성하기

①프로젝트 이름을 적어준다.프로젝트 이름을 적어준다.

②⑤

프로젝트가 저장되는 폴더를 지정한다. 프로젝트가 저장되는 폴더를 지정한다.

Win32 콘솔 애플리케이션을 선택한다.Win32 콘솔 애플리케이션을 선택한다.

컴퓨터프로그래밍기초 13

Page 14: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

프로젝트생성하기

① 비어있는 프로젝트를 만든다. 비어있는 프로젝트를 만든다.

simple application을 선택하면 간단한 c++

simple application을 선택하면 간단한 c++택하면 간단한 c++ 프로그램이 작성되니 주의!

택하면 간단한 c++ 프로그램이 작성되니 주의!

컴퓨터프로그래밍기초 14

Page 15: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

소스파일생성하기

소스 을 든 는소스 을 든 는②

소스파일을 만든다는 의미이다. 소스파일을 만든다는 의미이다.

반드시 확장자를 .c로 하여야한다. 만약 파일 이름만 쓰게되면 .cpp라는 C++확장자가붙는다.

반드시 확장자를 .c로 하여야한다. 만약 파일 이름만 쓰게되면 .cpp라는 C++확장자가붙는다.

컴퓨터프로그래밍기초

15

Page 16: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

소스파일에프로그램작성

② ③② ③

t t 의 용t t 의 용

test.c를 더블클릭한다.test.c를 더블클릭한다.

test.c의 내용이 여기에 표시된다.test.c의 내용이 여기에 표시된다.

..

①파일들을 보는 탭이다.파일들을 보는 탭이다.

컴퓨터프로그래밍기초 16

Page 17: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

비주얼 C++의전체구조

워크스페이스와프로젝트에

속 는 을

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

속하는 파일을보여준다.

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

컴퓨터프로그래밍기초

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

17

Page 18: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

프로그램입력

철자가 틀리지 않도록 조심하면서예제 소스 파일을입력합니다

컴퓨터프로그래밍기초 18

Page 19: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

프로그램입력시주의사항

/* 첫번째 프로그램 */

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

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++에는자동적으로 들여쓰기를 해주는기능이 있다. 19

Page 20: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

컴파일하기

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

컴파일과 링크를 수행하여 실행 파일을작성하는 것을 의미한다.

컴퓨터프로그래밍기초 20

Page 21: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

컴파일결과

에러가 없다면 이런화면이 나온다.

컴퓨터프로그래밍기초 21

Page 22: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

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

오브젝트 파일과 실행오브젝트 파일과 실행오브젝트 파일과 실행파일이 생성된 것을확인할 수 있다.

오브젝트 파일과 실행파일이 생성된 것을확인할 수 있다.

컴퓨터프로그래밍기초 22

Page 23: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

프로그램실행하기

작성된 프로그램을실행시킨다.작성된 프로그램을실행시킨다.실행시킨다.실행시킨다.

컴퓨터프로그래밍기초 23

Page 24: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

실행결과화면

프로그램의 출력프로그램의 출력램 출력램 출력

프로그램 실행이 끝면 항상 오는 메

프로그램 실행이 끝면 항상 오는 메나면 항상 나오는 메

시지이다. 나면 항상 나오는 메시지이다.

컴퓨터프로그래밍기초 24

Page 25: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

첫번째프로그램의설명

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

int main(void){

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

}

Hello World!

컴퓨터프로그래밍기초 25

Page 26: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

주석

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

/* 한줄로된주석 */

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

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

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

컴퓨터프로그래밍기초 26

Page 27: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

헤더파일포함

#include <stdio.h>

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

#include stdio.h

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

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

컴퓨터프로그래밍기초 27

Page 28: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

함수

int main(void)입력

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

입력

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

12 xy함수

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

출력

컴퓨터프로그래밍기초 28

Page 29: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

문장

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

컴퓨터프로그래밍기초 29

Page 30: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

출력함수 printf()p ()

printf(“Hello World!”);

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

Hello World!

컴퓨터프로그래밍기초 30

Page 31: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

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

운영체제

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

main()

운영체제

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

컴퓨터프로그래밍기초

운영체제

31

Page 32: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

응용 프로그램 #1응용 램

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

Hello World!Ki Ch lSKim ChulSoo

컴퓨터프로그래밍기초 32

Page 33: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

첫번째 버전첫번 전

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

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

int main(void){

우리가원하는{

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

원하는결과가 아님!

return 0;}

Hello World!Kim ChulSoo

컴퓨터프로그래밍기초 33

Page 34: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

줄바꿈 문자 \n줄 꿈 문

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

컴퓨터프로그래밍기초 34

Page 35: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

변경된 프로그램변경된 램

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

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

int main(void){{

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

}

Hello World!Kim ChulSoo

컴퓨터프로그래밍기초 35

Page 36: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

응용 프로그램 #2응용 램

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

3X1=33X2=63X3=9

컴퓨터프로그래밍기초 36

Page 37: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

응용 프로그램응용 램

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

/* 첫번째프로그램의응용*/#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;}}

컴퓨터프로그래밍기초 37

Page 38: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

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

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

에러와 경고

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

오류의 종류 오류의 종류

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

컴퓨터프로그래밍기초 38

Page 39: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

오류메시지의분석

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

Compiling

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

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

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

컴퓨터프로그래밍기초 39

Page 40: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

오류 수정 과정류 수정 정

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

링커(linker)링커(linker)

실행(execution)실행(execution)

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

실행파일test.c

파일test.obj test.exe

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

컴퓨터프로그래밍기초 40

Page 41: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

오류 #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)

컴퓨터프로그래밍기초 41

Page 42: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

오류 #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)

42

Page 43: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

오류 #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

컴퓨터프로그래밍기초 43

Page 44: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

오류 #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) 44

Page 45: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

논리 오류논 류

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

Hello World! Good Morning

컴퓨터프로그래밍기초 45

Page 46: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

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

/* 첫번째프로그램*/#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

컴퓨터프로그래밍기초 46

Page 47: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

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

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

int main(void){

논리 오류수정!!

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

0return 0;}

Hello World! Good Morning

컴퓨터프로그래밍기초 47

Page 48: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

디버깅

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

컴퓨터프로그래밍기초 48

Page 49: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

디버거(debugger)( gg )

컴퓨터프로그래밍기초 49

Page 50: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

디버거의실행과정

컴퓨터프로그래밍기초 50

Page 51: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

디버거의실행과정

컴퓨터프로그래밍기초 51

Page 52: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

디버거의명령어정의

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

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

컴퓨터프로그래밍기초 52

Page 53: 제2장프로그램개발과정 - Kangwon › ~ysmoon › courses › 2010_2.5 › clang › ... · 2016-06-02 · 프로그램작성과정 컴파일러 (compiler) 링커 (linker)

Q & AQ

컴퓨터프로그래밍기초 53