2014-1 C/C++ 프로그래밍작성과정, Visual Studio 2014. 3. 5. 교수김영탁 영남대학교공과대학 정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr)
Outline 통합개발환경 Visual C++ 를이용한프로그램작성 예제프로그램 예제프로그램의응용 오류수정및 Debugging Lab 1-2
Cycles in System design and implementation Design Implementation Problem Specifications (Requirements, Objectives) Analysis of the requirement Evaluate Feasibility Syntax Error Edit program source code Compile Source codes.c,.cc Object codes.o Algorithm design Link Executable codes.exe Software system design Subsystem design Block design Module design Class / Function design Load Execute Program Execution output Logical Error Correct Output? Lab 1-3 Mission Completed!!
통합개발환경 통합개발환경 (IDE: integrated development environment) Editor + Compiler + Debugger Visual C++: 마이크로소프트제품 이클립스 (eclipse): 오픈소스프로젝트 Dev-C++: 오픈소스프로젝트 Lab 1-4
통합개발환경의종류 Visual C++ 마이크로소프트사의제품 윈도우기반의거의모든형태의응용프로그램제작가능 최신버전 : Visual C++ 2010 우리가사용할버전 : Visual C++ 2010 또는 Visual C++2008 Lab 1-5
워크스페이스와프로젝트 솔루션 (solution); 문제해결에필요한프로젝트가들어있는컨테이너 프로젝트 (project): 하나의실행파일을만드는데필요한여러가지항목들이들어있는컨테이너 Lab 1-6
프로젝트생성하기 Lab 1-7
프로젝트생성하기 Lab 1-8
프로젝트생성하기 Lab 1-9
소스파일생성하기 Lab 1-10
소스파일생성하기 Lab 1-11
프로그램입력 Lab 1-12
프로그램입력 Lab 1-13
Source code documentations Standard comment at each source code file produced in this course /** * File Name: "???.c" or "xxx.h", or "yyy.cpp" * Description: * - This program is...... * * Programmed by Gil-Dong Hong (November 15, 2009), * Last updated: Version 2.0, September 1, 2012 (by Young-Chul Kim). * * ======================================================== * Version Control (Explain updates in detail) * ======================================================== * Name YYYY/MM/DD Version Remarks * Gil-Dong Hong 2009/11/15 v1.0 1:1 Chatting on UDP socket, 2 threads * John Doe 2010/05/01 v1.1 User interface has been updated with GUI * Young-Chul Kim 2012/09/01 v2.0 Major change in the program structure * ======================================================== */ Lab 1-14
전문가설정 Lab 1-15
컴파일하기 Lab 1-16
프로그램실행하기 Lab 1-17
중간점검 에디터, 컴파일러, 링커, 실행, 디버깅등의기능이하나의프로그램안에들어있는것을무엇이라고하는가? Visual C++ 에서새로운프로젝트를생성하는메뉴는무엇인가? Visual C++ 에서프로젝트에속하는소스파일을컴파일하여실행파일을생성하는메뉴는? C 언어에서는대문자와소문자를구별하는가? Visual C++ 를이용하여서 sample.c 라는소스파일을컴파일하였을때생성되는파일들은무엇인가? Visual C++ 를사용하여소스프로그램을편집하는경우, 메모장같은다른텍스트에디터를사용하여도되는가? Lab 1-18
첫번째프로그램의설명 #include <stdio.h> int main(void) { printf("hello World!"); return 0; } Lab 1-19
프로그램 == 작업지시서 #include <stdio.h> * 화면에 Hello World! 를표시한다. int main(void) { printf("hello World!"); return 0; } 작업지시서 프로그램 Lab 1-20
작업을적어주는위치 #include <stdio.h> int main(void) { 여기다가원하는작업을수행하는문장을적어준다. return 0; } 프로그램 Lab 1-21
간략한소스설명 #include <stdio.h> int main(void) { } printf("hello World!"); return 0; 헤더파일을포함한다. 메인함수시작화면에 Hello World! 를출력외부로 0값을반환 메인함수종료 프로그램 Lab 1-22
#include <stdio.h> #include 는소스코드안에특정파일을현재의위치에포함 헤더파일 (header file): 컴파일러가필요로하는정보를가지고있는파일 stdio.h: standard input output header file 주의!: 전처리기지시자문장끝에는세미콜론 (;) 을붙이면안된다. Lab 1-23
int main(void) 함수를정의하는문장 입력 함수 (function): 특정한작업을수행하기위하여작성된독립적인코드 ( 참고 ) 수학적인함수 y = x 2 +1 함수 프로그램 = 함수의집합 main() 은가장먼저수행되는함수 출력 Lab 1-24
함수의간략한설명 Lab 1-25
문장 (statement) 함수는여러개의문장으로이루어진다. 문장들은순차적으로실행된다. 문장의끝에는반드시 ; 이있어야한다. Lab 1-26
printf("hello World!"); printf() 는컴파일러가제공하는함수로서출력을담당 큰따옴표안의문자열을화면에출력 Lab 1-27
return 0; return 은함수의결과값을외부 ( 함수를호출한프로그램 ) 로반환 운영체제 main() printf( Hello World! ); return 0; 운영체제 Lab 1-28
중간점검 문장의끝에추가하여야하는기호는? printf() 가하는기능은무엇인가? Lab 1-29
응용프로그램 #1 다음과같은형식으로본인의이름을출력을가지는프로그램을제작하여보자. Lab 1-30
첫번째버전 문장들은순차적으로실행된다는사실이용 #include <stdio.h> int main(void) { printf("simple C-style program on Visual C++ n"); printf("hello world! n"); printf("my name is 홍길동 n"); printf("my student ID is %10d n",21312014); 4 개의문장은순차적으로실행된다. } return 0; Lab 1-31
줄바꿈문자 \n 줄바꿈문자인 n 은화면에서커서는다음줄로이동하게한다. Hello World! printf( Hello World! ); Hello World! 현재커서의위치. 다음문자를표시할때는이곳부터시작한다. printf( Hello World!\n ); Lab 1-32
응용프로그램 #2 다음과같은출력을가지는프로그램을제작하여보자. Lab 1-33
응용프로그램 역시문장들은순차적으로수행된다는점을이용한다. #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; Lab 1-34
반복문을사용하는예제 구구단 3 단 #include <stdio.h> int main(void) { printf(" 구구단 3 단 : n"); for (int i=1; i<=10; i++) { printf("3 x %2d = %2d n", i, 3*i); } } return 0; Lab 1-35
다른함수를호출하는예제 구구단표 #include <stdio.h> void multiplicationtable(int x); // proto-type 선언 int main(void) { printf(" 구구단표 : n"); for (int i=1; i<=10; i++) { printf(" n 구구단 (%d 단 ) : n", i); multiplicationtable(i); }.... } return 0; void multiplicationtable(int x) { for (int i=1; i<=10; i++) { printf("%2d x %2d = %2d n", x, i, x*i); } } Lab 1-36
C++ 프로그래밍 C 프로그래밍과 C++ 프로그래밍의차이점 Visual Studio의 C++ 프로그래밍통합개발환경에서는 C와 C++ 를함께지원 C 프로그래밍 #include <stdio.h> // include standard input/output header file printf() 와 scanf() 를사용 C++ 프로그래밍 #include <iostream> // include input / output stream library using namespace std; // standard name space를사용 cin과 cout을주로사용 for, while, do-while 등은동일하게사용 Lab 1-37
C++ Programming 예제 Sum and average of 10 scores #include <iostream> using namespace std; 실행결과 #define NUM_STUDENTS 10 void main() { int score[num_students] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int sum; double avg; } sum = 0; for (int i=0; i< NUM_STUDENTS; i++) { sum = sum + score[i]; } avg = sum / (double) NUM_STUDENTS; cout << " sum of " << NUM_STUDENTS << " students' scores = " << sum << endl; cout << " average = " << avg << endl; Lab 1-38
오류수정및디버깅 컴파일이나실행시에오류가발생할수있다. 에러와경고 에러 (error): 심각한오류 경고 (warning): 경미한오류 오류의종류 컴파일시간오류 : 대부분문법적인오류 실행시간오류 : 실행중에 0으로나누는연산같은오류 논리오류 : 논리적으로잘못되어서결과가의도했던대로나오지않는오류 Lab 1-39
오류수정과정 컴파일러 (compiler) 링커 (linker) 실행 (execution) 소스파일 test.c 오브젝트파일 test.obj 실행파일 test.exe ERROR!! 컴파일시간오류 실행시간오류논리오류 Lab 1-40
오류 #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 ========== Lab 1-41
오류 #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 ========== 주석은프로그램에대한설명글로서 /* */ 안에표시한다. Lab 1-42
오류 #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 ========== Lab 1-43
논리오류 다음과같은출력을가지는프로그램을작성하여보자. Lab 1-44
논리오류가존재하는프로그램 #include <stdio.h> int main(void) { printf("hey!"); Morning"); return 0; } printf("good 줄이바뀌지않았음! Lab 1-45
논리오류가수정된프로그램 #include <stdio.h> int main(void) { printf("hey! \n"); Morning \n"); return 0; } printf("good 논리오류수정!! Lab 1-46
Debugging 디버깅 : 논리오류를찾는과정 Lab 1-47
디버거 (debugger) Lab 1-48
디버거의실행과정 Lab 1-49
디버거의명령어정의 F5 (Go): 실행 F10 (Step Over): 한문장씩실행 ( 함수도하나의문장취급 ) F11 (Step Into): 한문장씩실행 ( 함수안으로진입 ) F9 (Breakpoint): 현재문장에중단점을설정 Lab 1-50
중간점검 프로그램을편집하여컴파일, 링크를한다음, 실행시켰는데자신이기대한대로결과가나오지않았다. 이때는어떻게하여야하는가? 비교적경미한오류를무엇이라고하는가? Lab 1-51
Lab 1 1.1 프로그램의첫부분에표준주석 (slide 14) 내용을포함시키고, 자신의이름, 학과, 학번, 주소, 연락처를 5줄에걸쳐출력하는프로그램을작성하라. 1.2 Visual Studio의 debugging 기능을사용하여, 위 1.1 프로그램이실행될때, 각 source line에서어떤결과가나타나는지를 F10 (step over) 기능을사용하여각각확인하고, 화면을 capture하라. Lab 1-52