C/C++ 프로그래밍작성과정, Visual...
Transcript of C/C++ 프로그래밍작성과정, Visual...
C/C++ 프로그래밍 작성과정, Visual Studio
2014-1 Programming Language
2014. 3. 5.
교수김영탁영남대학교 공과대학
정보통신공학과(Tel : +82-53-810-2497; Fax : +82-53-810-4742http://antl.yu.ac.kr/; E-mail : [email protected])
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 2
Outline
통합개발환경Visual C++를 이용한 프로그램 작성예제 프로그램예제 프로그램의 응용오류 수정 및 Debugging
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 3
Cycles in System design and implementation
Source codes.c, .cc
Object codes.o
Program Executionoutput
Compile
LinkExecutable codes
.exe
Load
Execute
Correct Output ?
MissionCompleted !!
Edit program source code
Analysis of the requirementEvaluate Feasibility
Algorithm design
Software system designSubsystem design
Block designModule design
Class / Function design
Design Implementation
Problem Specifications(Requirements,
Objectives)
Syntax Error
LogicalError
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 4
통합 개발 환경
통합 개발 환경(IDE: integrated development environment)Editor + Compiler + Debugger
Visual C++: 마이크로소프트 제품이클립스(eclipse): 오픈 소스 프로젝트Dev-C++: 오픈 소스 프로젝트
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 5
통합 개발 환경의 종류
Visual C++마이크로소프트사의 제품윈도우 기반의 거의 모든 형태의 응용 프로그램 제작 가능최신 버전: Visual C++ 2010우리가 사용할 버전: Visual C++ 2010 또는 Visual C++2008
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 6
워크스페이스와 프로젝트솔루션(solution); 문제 해결에 필요한 프로젝트가 들어있는 컨테이너프로젝트(project): 하나의 실행 파일을 만드는데필요한 여러 가지 항목들이 들어 있는 컨테이너
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 7
프로젝트 생성하기
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 8
프로젝트 생성하기
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 9
프로젝트 생성하기
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 10
소스 파일 생성하기
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 11
소스 파일 생성하기
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 12
프로그램 입력
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 13
프로그램 입력
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 14
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* ========================================================*/
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 15
전문가 설정
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 16
컴파일하기
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 17
프로그램 실행 하기
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 18
중간 점검에디터, 컴파일러, 링커, 실행, 디버깅 등의 기능이하나의 프로그램 안에 들어 있는 것을 무엇이라고하는가?Visual C++에서 새로운 프로젝트를 생성하는 메뉴는무엇인가?Visual C++에서 프로젝트에 속하는 소스 파일을컴파일하여 실행 파일을 생성하는 메뉴는?C 언어에서는 대문자와 소문자를 구별하는가?Visual C++를 이용하여서 sample.c라는 소스 파일을컴파일하였을 때 생성되는 파일들은 무엇인가?Visual C++를 사용하여 소스 프로그램을 편집하는경우, 메모장같은 다른 텍스트 에디터를 사용하여도되는가?
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 19
첫번째 프로그램의 설명
#include <stdio.h>
int main(void){
printf("Hello World!");return 0;
}
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 20
프로그램 == 작업 지시서
#include <stdio.h>
int main(void){
printf("Hello World!");return 0;
}
*화면에 “Hello World!”를표시한다.
작업 지시서 프로그램
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 21
작업을 적어주는 위치
#include <stdio.h>
int main(void){
return 0;}
프로그램
여기다가 원하는 작업을 수행하는 문장을 적어준다.
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 22
간략한 소스 설명
프로그램
#include <stdio.h>
int main(void){
printf("Hello World!");return 0;
}
헤더파일을 포함한다.
메인 함수 시작
메인 함수 종료
화면에 “Hello World!”를 출력
외부로 0값을 반환
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 23
#include <stdio.h>
#include는 소스 코드 안에 특정 파일을 현재의 위치에 포함헤더 파일(header file): 컴파일러가 필요로 하는 정보를가지고 있는 파일stdio.h: standard input output header file주의!: 전처리기 지시자 문장 끝에는 세미콜론(;)을 붙이면 안된다.
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 24
int main(void)
12 += xy
함수를 정의하는 문장
함수(function): 특정한 작업을 수행하기 위하여 작성된 독립적인코드(참고) 수학적인 함수
프로그램 = 함수의 집합main()은 가장 먼저 수행되는 함수
함수
입력
출력
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 25
함수의 간략한 설명
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 26
문장 (statement)
함수는 여러 개의 문장으로 이루어진다.문장들은 순차적으로 실행된다. 문장의 끝에는 반드시 ;이 있어야 한다.
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 27
printf("Hello World!");
printf()는 컴파일러가 제공하는 함수로서 출력을 담당큰따옴표 안의 문자열을 화면에 출력
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 28
return 0;
main()
printf(“Hello World!”);return 0;
운영 체제
운영 체제
return은 함수의 결과값을 외부 (함수를 호출한프로그램)로 반환
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 29
중간 점검문장의 끝에 추가하여야 하는 기호는?printf()가 하는 기능은 무엇인가?
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 30
응용 프로그램 #1
다음과 같은 형식으로 본인의 이름을 출력을 가지는프로그램을 제작하여 보자.
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 31
첫번째 버전
문장들은 순차적으로 실행된다는 사실 이용
#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);
return 0;}
4개의 문장은 순차적으로 실행된다.
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 32
줄바꿈 문자 \n
줄바꿈 문자인 ₩n은 화면에서 커서는 다음줄로이동하게 한다.
Hello World!
Hello World!
printf(“Hello World!”);printf(“Hello World!”);
printf(“Hello World!\n”);printf(“Hello World!\n”);
현재 커서의 위치. 다음 문자를 표시할 때는이곳부터 시작한다.
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 33
응용 프로그램 #2
다음과 같은 출력을 가지는 프로그램을 제작하여 보자.
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 34
응용 프로그램
역시 문장들은 순차적으로 수행된다는 점을 이용한다.
#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;}
3개의 문장은 순차적으로 실행된다.
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 35
반복문을 사용하는 예제
구구단 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;}
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 36
다른 함수를 호출하는 예제
구구단표
#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);}
}
. . . .
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 37
C++ 프로그래밍
C 프로그래밍과 C++ 프로그래밍의 차이점Visual Studio의 C++ 프로그래밍 통합 개발 환경에서는 C와C++를 함께 지원C 프로그래밍
#include <stdio.h> // include standard input/output header fileprintf()와 scanf()를 사용
C++ 프로그래밍#include <iostream> // include input / output stream libraryusing namespace std; // standard name space를 사용cin과 cout을 주로 사용
for, while, do-while 등은 동일하게 사용
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 38
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;
}
실행결과
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 39
오류 수정 및 디버깅
컴파일이나 실행 시에 오류가 발생할 수 있다.에러와 경고
에러(error): 심각한 오류경고(warning): 경미한 오류
오류의 종류컴파일 시간 오류: 대부분 문법적인 오류실행 시간 오류: 실행 중에 0으로 나누는 연산 같은 오류논리 오류: 논리적으로 잘못되어서 결과가 의도했던 대로 나오지않는 오류
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 40
오류 수정 과정
ERROR!!소스파일test.c
오브젝트파일
test.obj실행파일test.exe
컴파일러(compiler)컴파일러(compiler)
링커(linker)링커
(linker)실행
(execution)실행
(execution)
실행 시간 오류실행 시간 오류논리 오류논리 오류
컴파일 시간 오류컴파일 시간 오류
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 41
오류 #1
#include <stdio.h>
int main(void){
printf("Hello World!\n")return 0;
}
문장의 끝에 ;이 없음!!
1>------ 모두다시빌드시작: 프로젝트: hello, 구성: Debug Win32 ------1> hello.c1>c:\users\chun\documents\visual studio 2010\projects\hello\hello\hello.c(7): error C2143: 구문오류 : ';'이(가) 'return' 앞에없습니다.========== 모두다시빌드: 성공 0, 실패 1, 생략 0 ==========
오류가 발견된소스파일
return 앞에 ;을 빠뜨렸다는 의미이다.
오류가 발견된 줄 번호
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 42
오류 #2
/* 에러가발생하는프로그램* /#include <stdio.h>
int main(void){
printf("Hello World!\n")return 0;
}
1>------ 빌드 시작: 프로젝트: hello, 구성: Debug Win32 ------1> hello.c1>c:₩users₩chun₩documents₩visual studio 2010₩projects₩hello₩hello₩hello.c(9): fatal error C1071: 주석에서 예기치 않은파일의 끝이 나타났습니다.========== 빌드: 성공 0, 실패 1, 최신 0, 생략 0 ==========
*과 /이 떨어져있음
-> 전체가 주석처리됨
주석은 프로그램에 대한 설명글로서 /* */ 안에 표시한다.
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 43
오류 #3#include <stdio.h>
int main(void){
print("Hello World!");return 0;
}
1>------ 빌드 시작: 프로젝트: hello, 구성: Debug Win32 ------1> hello.c1>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 ==========
print가 아니라printf임
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 44
논리 오류
다음과 같은 출력을 가지는 프로그램을 작성하여 보자.
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 45
논리 오류가 존재하는 프로그램
#include <stdio.h>
int main(void){
printf("Hey!"); printf("GoodMorning"); return 0;}
줄이 바뀌지 않았음!
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 46
논리 오류가 수정된 프로그램
#include <stdio.h>
int main(void){
printf("Hey! \n"); printf("GoodMorning \n"); return 0;}
논리 오류 수정!!
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 47
Debugging디버깅: 논리 오류를 찾는 과정
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 48
디버거(debugger)
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 49
디버거의 실행 과정
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 50
디버거의 명령어 정의F5 (Go): 실행F10 (Step Over): 한 문장씩 실행(함수도 하나의 문장취급)F11 (Step Into): 한 문장씩 실행(함수 안으로 진입)F9 (Breakpoint): 현재 문장에 중단점을 설정
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 51
중간 점검프로그램을 편집하여 컴파일, 링크를 한 다음, 실행시켰는데 자신이 기대한 대로 결과가 나오지 않았다. 이때는 어떻게 하여야 하는가?비교적 경미한 오류를 무엇이라고 하는가?
Advanced Networking Tech. Lab.Yeungnam University (YU-ANTL)
Programming LanguageProf. Young-Tak KimLab 1 - 52
Lab 1
1.1 프로그램의 첫 부분에 표준 주석 (slide 14)내용을포함시키고, 자신의 이름, 학과, 학번, 주소, 연락처를5줄에 걸쳐 출력하는 프로그램을 작성하라.
1.2 Visual Studio의 debugging 기능을 사용하여, 위 1.1 프로그램이 실행될 때, 각 source line에서 어떤 결과가나타나는지를 F10 (step over) 기능을 사용하여 각각확인하고, 화면을 capture하라.