visual studio 6.0 실행, 디버깅, Execute Program, Breakpoint, run-time error
Visual studio 6.0 사용.
Win32 Application → 차후 수업
Win32 console Application → 금일 수업할 내용(Dos 창으로 실행)
Win32 Dynamic-Link Library → DLL
프로젝트 파일 생성 과정.
1. Win32 console Application를 클릭하고 디렉토리 이름을 지정해 준다.
(→Visual studio에서 workspace는 project와 같은 의미)
2. An empty projec. 체크 후 Finish.
3. FileView 탭에서 제작한 프로젝트 경로와 이름 확인.
4. File에서 New를 실행시키고 Files탭에 있는 C++ Source File을 지정한 다음, Add to project:를 체크한다. 그리고 파일이름을 지정해 주는데 C 소스를 사용해야 하므로 확장자에 .c를 붙여준다.(확장자를 지정해 주지 않으면 cpp로 자동 확장자가 결정되며 이것은 C++용이다.)
참고. 파일이름 옆에 *마크가 뜬다면 현재의 소스가 저장 후에 바뀌었다는 뜻이다.
(ex. 파일명이 p3_13.c라면 저장 후에 소스를 수정했을시 p3_13.c *로 파일명이 표시된다.)
컴파일 관련 메뉴 확인
comfile (Ctrl + F7)
→ 컴파일 5단계 중 object 파일 생성까지의 과정을 수행한다.(이것을 이용해 프로그램을 실행하지 않고 컴파일 시켜 에러를 확인해 볼 수 있다.)
Build (F7)
→ 컴파일 + 실행파일 생성
Execute Program (Ctrl + F5)
→ 프로그램 실행까지 해준다.
Breakpoint (F9) (※토글 - 단순하게 두 개만 반복하는 것)
→ 디버깅 기능에 쓰인다. Breakpoint를 소스의 지점에 찍고 F5(디버깅)을 실행시키면 Breaakpoint의 모양이 바뀌며 프로그램 오류 지점을 표시해 주고, dos창이 뜬다.
→ Shift + F5를 누르면 디버깅 전으로 돌아간다.
Start Debug (F5)
→ 디버깅을 실시한다.
⇒ 디버깅: 컴파일 단계가 아니라 실행과정에서 오류를 찾아내는 것.
몇가지 에러발생 확인.
→ 기본적인 소스에 int iNum; 이라고 변수 지정 후 다른 명령을 입력하지 않고 실행시키면,
⇒ warning C4101: 'iNum' : unreferenced local variable 라는 에러가 발생한다. 이것은 iNum이라는 변수를 선언하고는 사용하지 않았다는 뜻이다.
→ 기본적인 소스에 int iNum;
iNum = iNum+1; 이라고 지정해준 다음 실행시키면,
⇒ warning C4700: local variable 'iNum' used without having been initialized 라는 에러가 발생한다. 이것은 iNum이라는 변수의 값을 초기화 시키지 않고 사용하려했다는 뜻이다. 즉, 현재 초기화 시키지 않은 iNum에는 쓰레기값이 들어 있으므로 그것을 알려준다.
//getchar()/putchar() 함수를 이용하여 키보드로부터 한 문자를 입력받아 화면에 출력
#include<stdio.h>
int main()
{
char ch;
printf("Please enter any character: ");
ch = getchar(); //getchar()는 키보드에서 문자를 하나 읽어온다.(블록된다.)
putchar (ch); // 문자 하나를 출력한다.
printf(" is a letter you typed.\n");
fflush (stdin); //getchar() 함수로 문자를 읽은 후 버퍼에 <엔터키>가 남아있기 때문에, 입력 버퍼를 비우기 위해 출력한다.
printf("Please enter any character: ");
scanf("%c", &ch);
printf("%c is a letter you typed.\n", ch);
return 0;
}
※ getchar와 putchar의 경우 scanf, printf와는 달리 글자하나를 입력받고 출력한다.
※ putchar는 개행문자를 붙여 쓸 수 없다. 따라서 따로 putchar(‘\n’); 을 써줘야 한다.
※ getchar는 putchar는 한문자만 입력되거나 출력되는 단점이 있다. 용도에 따른 쓰임이 있다.
※ fflush(stdin) → 버퍼에 남아있는 앞에서 들어간 것의 입력찌꺼기(엔터키) 등을 제거해준다.
flush: 씻겨 내려간다, 변기 물내리는 것. fflush는 file flush의 뜻.
반복문
- while
// while 문을 이용하여 화면에 0부터 5까지 출력하는 프로그램
#include<stdio.h>
int main()
{
int num; //변수 num 선언
num=0; // num을 0으로 초기화
while(num<=5) // 반복여부를 결정하는 논리 식(num이 5보다 같거나 작을 때까지 반복해서 실행한다.)
{
printf("%d\t",num);
num=num+1;
}
printf("\n");
return 0;
}
⇒\t 는 tap의 기능을 한다.(글자사이의 간격을 벌린다.)
흐름도(flow chart)
//키보드로부터 입력받은 문자의 개수를 출력하는 프로그램, 'q'를 입력받으면 종료
#include<stdio.h>
int main()
{
char ch;
int count = 0;
printf("Please enter characters <q for quit> :");
ch= getchar(); // 변수 ch 값을 입력을 준비를 한다.
while(ch!='q') // ch가 'q'가 아닐때 까지 반복한다.(q가 입력되면 반복을 멈춘다.)
{
count++; // q 이외의 문자가 입력된 횟수가 계속 더해진다.
ch=getchar(); // 다시 변수 ch 값을 입력받을 준비를 한다.
}
printf("the number of character is %d\n",count);
printf("This is end of program.\n");
return 0;
}
⇒ 만약에 while(ch!='q')뒤에 ;(세미콜론)을 붙이면 컴파일에서 에러가 나지 않는다. 즉 디버그를 해봐야만 에러가 발생했다는 것을 알 수 있다. 이것을 run-time error 라고 한다. 문법적으로 while();은 에러가 아니기 때문에 컴파일 에러로 검출 되지 않지만 실행하면 run-time error가 되어 제대로 동작하지 않는다.
⇒ 반복문은을 가져야 한다.
1. 시작조건(변수 초기값. int count=0;, char ch;, ch=키보드 입력;)
2. 종료값(‘q')
3. 종료조건(ch!='q')
// 키보드로부터 0을 입력받을 때까지 정수를 읽고 그 합을 구하는 프로그램.
#include<stdio.h>
int main()
{
int number;
long sum =0;
while(number!=0) // number 값이 초기화가 되어 있지 않다.
{
sum += number; // sum이 0으로 초기화 되어 있지만 초기화 되지 않은 number 값이 들어갔으므로, sum도 쓰레기 값이 저장되어 버렸다.
printf("Please enter an integer <0 to quit>: ");
scanf("%d", &number);
}
printf("The sum of numbers is %ld.\n",sum); // 쓰레기 값이 출력된다.
return 0;
}
'내장형 하드웨어 > C언어' 카테고리의 다른 글
for 문 - 초기식, 조건식, 증감식, volatile, 최적화 (0) | 2011.04.11 |
---|---|
심블 테이블 (symbol table), while문, 디버깅, (0) | 2011.04.07 |
BricxCC를 이용한 마인드 스톰 구동 첫시간 (0) | 2011.04.05 |
반복문 연습, getchar, putchar (0) | 2011.04.05 |
if문, 다중 if문, switch 문, 흐름도 (flow chart) (1) | 2011.04.04 |