디버깅은 코드를 단계별로 실행하여 이상 동작이 발생한 부분을 살펴볼 때 사용됩니다. 이번 시간에는 Visual Studio 2019 디버깅 과정에 대해 살펴보겠습니다. 

1. 디버깅 시작 지점 설정

 소스 파일 줄 표시하는 숫자 앞 회색부분을 클릭하면 빨간 원이 생기며, 빨간원은 여러개 지정할 수 있습니다.단, 프로그램 시작 시 먼저 만나는 빨간 원이 디버깅 시작지점이 됩니다.

2. 디버깅 시작 하기

 보통 코드를 실행할 때 디버깅하지않고 시작하기(단축키 Ctrl+F5)를 하는데 디버깅을 하려면 디버그 메뉴에 디버깅 시작(단축키 F5)을 누릅니다.

 디버깅이 시작되고 처음 만나는 빨간 원에 노란색 화살표가 생기면서 프로그램이 대기를 합니다.

 위의 화면을 설명하자면 처음 만나는 빨간 원이 있는 6줄에 노란 화살표가 생겼으며, 해당 지점에서 대기중인 상황입니다. 화면 하단에 로컬을 보면 6줄이 실행되기전을 기준으로 i,j는 값이 초기화 되어 있지 않아 -858993460(저는 쓰레기값이라고 부릅니다.)가 들어가 있는 것을 볼 수 있습니다. 그리고 row는 초기값이 5가 들어가 있는 것을 볼 수 있습니다.

3. 다음 단계 넘어가기

 현재 디버깅중인 줄을 기준으로 다음으로 넘어가는 방법은 다음과 같습니다.

 3.1 한 단계씩 코드 실행(단축키 F11)

 - 현재 라인에 함수가 있으면 해당 함수가 구현된 시작점으로, 반복문이나 조건문이면 괄호안으로 들어가 세부 내용을 살필 때 사용합니다.

 3.2 프로시저 단위 실행(딘축키 F10)

 - 함수 세부 내용을 살피지 않고 함수가 호출됐을 때 결과 단위로 실행할 때 사용합니다.

 3.3 프로시저 나가기(단축키 Shift + F11)

 - 함수 세부 내용을 살피지 않고 빠져 나갈 때 사용합니다.

 3.4 계속

 - 현재 줄에서 자동으로 진행되어 다음 빨간원을 만나면 멈출 때 사용합니다.

4. 디버깅 확인하기

 디버깅에서 확인해야 할 내용은 해당 단계에서 로컬에 나와있는 변수의 값이 맞는지 확인하고 진행 과정이 생각한 것과 같은지 확인하면서 다르면 왜 다른지 확인하면서 디버깅을 합니다.

5. 조사식 확인하기

 로컬에서 보여주는 값 이외에 식들을 입력하여 확인하고 싶을 때 조사식을 이용하면 됩니다. 메뉴에서 디버그 > 창 > 조사식 > 조사식 숫자를 클릭하면 됩니다.

 보통 하단에 조사식창이 생기며 클릭 후 원하는 식을 입력하여 값을 확인해볼 수 있습니다.

 이것으로 Visual Studio 2019 디버깅 사용하기를 마치도록 하겠습니다.

 도움이 되셨다면 광고 클릭!

 이번 시간에는 프로그래밍 입문자들이 어려워 하는 함수 생성하는 과정에 대해 살펴보겠습니다. 여기서는 함수 구현이 아닌 함수 선언부를 어떻게 작성하는가에 대해 살펴볼것입니다. 먼저 함수를 생성할 때 다음 질문들을 고려해야 합니다.

  • 함수명은 어떻게 지어야 하는가?
  • 매개변수(또는 인자)는 어떤 것으로 설정해야 하는가?
  • 리턴값은 어떤 것으로 설정해야 하는가?

 위 질문들의 답을 살펴보면서 함수 생성하는 과정에 대해 살펴보겠습니다.

1. 함수명은 어떻게 지어야 하는가?

 함수명은 해당 함수명을 보고 기능이 유추가능하도록 의미있게 짓는 것이 좋습니다. 우리가 자주 쓰는 printf()함수를 보면 출력과 관련된 기능이라는 것을 유추할 수 있습니다. 만약 기능은 콘솔화면에 문자열을 출력하는 기능인데 함수 명을 scanf()로 짓는다면 해당 함수를 사용하는 입장에서는 황당할 수 있습니다.

2. 매개변수는 어떤 것으로 설정해야 하는가?

 매개변수는 함수를 실행하기 위해 필요한 정보인 입력에 해당합니다. 그리고 필수적이인 정보들을 매개변수로 설정해야합니다. 아래 예시를 보면서 매개변수를 어떻게 설정해야 하는지 생각해봅시다.

 상황1

  • 선생님 : A학생 두 수를 더해보세요.
  • A학생 : 더해야 하는 두 수가 뭐죠?

 상황2

  • 선생님 : A학생 두 수 1과 2를 더해보세요.
  • A학생 : 3입니다.

 상황3

  • 선생님 : A학생 두 수 1과 2와 3을 더해보세요.
  • A학생 : 두 수가 아니라 세 수인데요?

 위의 상황들을 살펴보면 선생님의 질문으로 가장 옳은 상황은 상황 2라는 것을 알 수 있습니다. 상황 1은 정보가 적어서 문제가 발생하고 상황 3은 정보가 너무 많아서 문제가 발생합니다. 매개변수도 마찬가지입니다. 상황 1과 같이 정보가 적으면 동작을 실행할 수 없고 상황 3처럼 많으면 동작은 실행되지만 불필요한 정보를 전달하게 됩니다.

 하지만 함수의 재사용성을 위해 상황에 따라서는 매개변수가 늘어 날수 있습니다. 아래 예시를 통해 함수의 재사용성을 위해 매개변수가 추가된 상황을 살펴봅시다.

  • void printStar1() : *을 5개 찍어주는 함수
  • void printStar2(char star) : star문자열을 5개 찍어주는 함수
  • void printStar3(char star, int count) : star문자열을 count개 찍어주는 함수

 위 함수들중에서 문제점은 다음과 같습니다.

  • printStar1()에서 출력하는 모양이 *이 아닌 ☆을 출력하고 싶다면 새로운 함수를 만들어야 한다.
  • printStar2()에서 찍어주는 갯수를 5개가 아닌 6개를 하고 싶다면 새로운 함수를 만들어야 한다.

 따라서 printStar3()처럼 재사용성을 위해 매개변수가 늘어날 수 있습니다.

3. 리턴값은 어떤것으로 설정해야 하는가?

 리턴값은 해당 함수를 호출한 함수가 원하는 값으로 설정해야합니다. 예를 들면 두 정수를 더해서 콘솔에 출력하는 함수가 있다면 해당 함수는 콘솔에 출력하고 끝내면 되기 때문에 리턴값이 void입니다. 하지만 두 정수를 더해서 해당 결과를 알려주는 함수가 있다면 리턴값은 두 정수의 합인 int가 됩니다.

4. 함수를 만드는 과정

  1. 생성하려는 함수의 기능을 최대한 자세히 풀어씁니다.
  2. 풀어쓴 기능에서 매개변수, 리턴값을 설정합니다.
  3. 함수명을 설정합니다.
  4. 함수 선언부를 작성하고 구현합니다.
  5. 생성한 함수를 main함수에서 테스트합니다.

 아래 예시는 위 과정을 토대로 만들어진 두 정수의 합을 구하는 함수입니다.

1
2
3
4
5
6
7
8
9
10
11
12
/*
기능 : 두 정수 num1과 num2가 주어지면 두 정수의 합을 알려주는 함수
매개변수 : 두 정수 num1,num2 => int num1, int num2
리턴타입 : 두 정수의 합 => int
함수이름 : sum
함수선언 
리턴타입 함수이름(매개변수)
*/
int sum(int num1, int num2){
  return num1 + num2;
}
 
 
 

 이상으로 함수 생성 과정에 대해 마치도록 하겠습니다. 질문이 있으시면 댓글에 남겨주세요. 긴 글을 읽어주셔서 감사합니다.

 변수는 값(자료형에 맞는)을 저장하고, 포인터 변수는 주소를 저장하는 변수이다. 

 포인터 변수는 주소를 저장하기 때문에 상수값을 저장할 수 없고 NULL이나 다른 변수의 주소를 저장해야 한다. 상수값을 저장할 수 없는 이유는 해당하는 상수번지에 어떤 데이터가 있는지 알 수 없고, 해당 데이터를 다른 중요한 프로그램이 사용한다면 수정해서는 안되기 때문이다.

 포인터 변수를 선언하는 방법은 다음과 같고 변수의 주소는 &를 통해 알 수 있다.

	자료형 *변수명;
	자료형 *변수명 = 초기값;
1
2
3
4
int *pt1;                    //포인터 수 
int *pt2 = NULL;    //포인터 변수 선언 및 NULL로 초기화
int num = 10;    
int *pt3 = #    //포인터 변수 선언 및 다른 변수의 주소를 저장
cs

 4번째 줄에 int *pt3 = &num3;를 그림으로 표현하면 아래와 같이 표현할 수 있다. 주소는 매 실행마다 달라지므로 예로 pt3의 주소를 200번지, num의 주소를 100번지로 나타냈으며 pt3는 num의 주소인 100번지를 저장하고 있다.

포인터 변수와 일반변수의 연결

 포인터 변수는 저장된 주소에 있는 변수의 값을 포인터 연산자(*)를 통해 가져오거나 수정할 수 있다. 다음 코드는 pt3를 통해 num의 값을 가져오고 수정하는 예제 및 출력 결과이다.

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
 
int main(void) {
    int num = 10;
    int *pt3 = &num;
    //포인터 연산자(*)를 통해 num의 값을 가져옴
    printf("*pt3 = %d\n"*pt3);
    //포인터 연산자(*)를 통해 num의 값을 수정
    *pt3 = 20;
    printf("num = %d\n", num);
    return 0;
}
cs
	*pt3 = 10
	num = 20

 

 

 Visual Studio는 버전별로 콘솔 프로젝트 생성에 약간씩 차이가 있습니다. 이번 시간에는 현재 최신 버전인 2019 버전 설치 및 콘솔 프로젝트 생성 방법에 대해 알아보겠습니다. 

 우선 공식 홈페이지에서 설치 파일을 다운로드합니다. 무료 버전인 Community 2019를 선택하시면 됩니다.

 설치 파일을 실행하면 다음 화면이 나오는데 계속을 누르면 설치 준비가 진행됩니다.

 완료가 되면 설치할 요소들을 선택하는 창이 나오는데 컴퓨터 용량이 넉넉하고 귀찮으시면 전체를 체크하고 설치하면 됩니다. 전체 설치가 싫다면 C/C++ 학습을 위한 최소 설치 항목인 C++를 사용한 데스트콥 개발을 체크하고 설치를 눌러 진행하면 됩니다.

 설치 진행이 완료되면 컴퓨터를 재시작해야합니다.

 재시작 후 Visual Studio 2019를 실행하면 로그인 화면이 나오는데 (캡처를 못했습니다.) Microsoft 회원이 아니라면 가입하셔서 로그인해주는 것이 좋습니다. 어차피 일정 기간 후에는 Visual Studio를 사용하려면 로그인해야 되기 때문입니다.

 로그인 후 테마 선택하는 화면이 나오는데 개인 취향에 맞는 테마를 선택하면 됩니다.  

 드디어 VisualStudio 2019 첫 화면입니다.

 여기까지가 설치 과정이 입니다.

 이제부터 콘솔 프로젝트 생성 과정을 진행하겠습니다. Visual Studio 2017과 약간 다릅니다. 우선 위 첫 화면에서 새 프로젝트 만들기를 선택합니다.

 그리고 콘솔 앱을 선택 후 프로젝트 이름과 위치, 솔루션 이름을 확인하고 만들기를 클릭합니다.

 솔루션과 프로젝트 및 기본 cpp파일이 생성이 됩니다. Visual Studio 2019에는 기본 코드에 주석으로 실행하는 방법이 있어서 실행하는 방법을 잊었다면 참고하면 됩니다. Ctrl + F5를 눌러 실행시킨 결과 화면입니다.

 여기까지 Visual Studio 2019 설치 및 콘솔 프로젝트 생성하는 방법이었습니다. 수고하셨습니다.

+ Recent posts