F5 : 디버깅 시작/재시작
쉬프트 + F5 : 디버깅 종료
F9 : 중단점 설정/해제
F10 : 다음 코드 라인으로 이동
F11 : 다음 수행 라인으로 이동
컨트롤 + 쉬프트 + F9 : 모든 중단점 삭제

 

#1. 조건식을 통해서 디버깅을 하는 방법

 

#2. 마우스로 변수를 더블클릭 한 후 끌어다가 조사식에 올려서 값을 확인하는 방법

모든 컴파일러 경고는 반드시 고치는 것이 좋다.

'Programming > C++ Basic' 카테고리의 다른 글

C++ 메모리 함수  (0) 2020.09.13
C++ 클래스, 클래스의 4대 속성  (1) 2020.09.10
C++ string  (0) 2020.09.08
C++ 레퍼런스 자료형  (0) 2020.09.08
C++ 파일 분할(.cpp, .h)  (0) 2020.09.08

string

-> 클래스 문법으로 만들어진 것

-> 문자를 다루는데 있어 편리하게 사용할 수 있도록 도와줌

-> string을 사용하기 위해서는 #include <string>을 명시해줘야한다.

string	str1;
string	str2 = "Hello";
string	str3("World");


char*	pStr = str2;	           // 불가능
const char* pStr = str2.c_str();   // 가능

 

string의 길이 확인

cout << str2.length() << endl;

 

sizeof를 통해 string의 크기를 확인하면 다음과 같이 28이란 값이 나온다.

하지만 string은 문자열에 저장된 포인터 일 뿐이며 string의 길이는 sizeof (string)에 영향을주지 않는다고 한다.

 

string 끼리 비교

str2 = str3; 
cout << (str2 == str3) << endl; 
cout << (str2 != str3) << endl;

 

문자열 결합

str1 = str2 + str3; 
str2 += str3; 
str1 = str2 + "World";

 

문자열 복사

str1 = str2;

 

 

'Programming > C++ Basic' 카테고리의 다른 글

C++ 클래스, 클래스의 4대 속성  (1) 2020.09.10
C++ Debug, 조건식 Debug  (0) 2020.09.08
C++ 레퍼런스 자료형  (0) 2020.09.08
C++ 파일 분할(.cpp, .h)  (0) 2020.09.08
C++ 조건부 컴파일(#if, #ifdef, #ifndef 등)  (0) 2020.09.07

레퍼런스 자료형

-> C++부터 등장한 자료형

-> 원본 데이터에 접근하는 두 번째 방법이다.

-> 첫 번째 방법으로는 포인터를 통한 간접 참조를 이용하고,

-> 두 번째 방법으로는 레퍼런스를 통한 직접 참조를 이용한다.

 

레퍼런스의 형태

레퍼런스로  한번 참조한 메모리는 변경이 불가능하다.

-> 선언과 동시에 초기화를 진행해야만 한다.

자료형& 변수명
int a = 10;
int& r = a;

 

레퍼런스를 이용한 swap

void Swap(int& _a, int& _b)
{
	int itemp = 0;
	itemp = _a;
	_a = _b;
	_b = itemp;	
}

void main()
{
	int a = 10, b = 20;
	Swap(a, b);
	cout << a << " , " << b << endl;
}

 

const와 레퍼런스

-> 컴퓨터가 변수를 다룰 때는 단순히 자료형만 보고 판단한다.

const int a = 10;

 

const int   a = 10;
int&	    r = a;

 

r의 자료형은 일반 레퍼런스이다.

-> r을 통해서 값 변경을 한다.

-> 하지만, 참조하고 있는 공간은 값 변경이 불가능한 const 변수이다.

int& r = 20; // 불가능

 

20은 리터럴 상수이므로 임시 메모리 영역이 등록이 된다.

(코드라인을 벗어나면 소멸하는 공간)

 

문법 이론상 성립하지 않는다.

하지만, C++에서는 성립할 수 있도록 "임시 변수"를 생성해준다.

 

임시 변수란 "이름 없이 메모리 공간에 등록되는 변수"이다.

const int& r = 20;	// 가능

이것을 통해서 값 변경을 시도해보자.

void Add(const int& _a, const int& _b)
{
	int iRes = _a + _b;

	cout << iRes << endl;

}

void main()
{
	Add(10, 20);
}

 

레퍼런스의 크기

-> 레퍼런스 변수를 만들기 위해 공간을 할당하지 않는다.

-> 즉, 레퍼런스의 크기는 존재하지 않는다.

'Programming > C++ Basic' 카테고리의 다른 글

C++ Debug, 조건식 Debug  (0) 2020.09.08
C++ string  (0) 2020.09.08
C++ 파일 분할(.cpp, .h)  (0) 2020.09.08
C++ 조건부 컴파일(#if, #ifdef, #ifndef 등)  (0) 2020.09.07
C++ 매크로(#define)  (0) 2020.09.07

파일 분할

-> 구현한 기능이 많아지고 코드라인이 길어지면 프로젝트 관리가 힘들어진다.

-> 관리하기 편하게 하기 위하여 파일을 분리하여 관리하는 것이 좋다.

-> 파일 이름은 대소문자까지 포함해서 반드시 클래스 이름과 일치해야 한다.

-> 여러 파일이 하나의 클래스를 이룰 때, 파일 이름은 클래스 이름으로 시작하고,

-> 그 뒤에 밑줄과 세부 항목 이름을 붙인다.

 

class TextRPG;

TextRPG_Load.cpp
TextRPG_Save.cpp

 

#1. 헤더 파일

-> 어떤 종류의 기능들이 있는지 알려주는 역할.

-> 함수의 선언부, 구조체, 열거체 등을 모아 놓는 곳

 

#2. 소스 파일

-> 헤더 파일에 선언한 것들의 정의부를 모아 놓은 곳

 

컴파일은 파일 단위로 진행하기 때문에 해당 파일에서 필요한 정보들은 모두 include를 해줘야한다.

예)

#include "xxxx.h"

외부 헤더 파일을 인클루드 할 때는 #include<> 을 사용.

자체적으로 만든 헤더 파일을 인클루드 할 때는 위에 처럼  #include "" 를 사용한다.

 

외부 헤더 파일(표준 템플릿)을 먼저 인클루드한 뒤,

자체적으로 만든 헤더 파일을 인클루드 한다.

include를 할 때는, 가능하다면 알파벳 순서를 따르는 것이 좋다.(a -> b -> c 순)

 

파일 분할 시 문제점

-> 다양한 파일들을 만들고 엮는 과정에서 무한 참조 현상이 발생할 수 있다.

-> 이를 해결하기 위해서는 include를 1회만 할 수 있도록 조절해야 한다.

 

문제해결 방법

 

#1. #pragma once

-> 한번 읽어가면 추가적으로 읽지 않도록하는 기능

-> 헤더 파일 최상단에 #pragma once를 명시하면 해결된다.

-> 표준이 아니므로 작동하지 않을 수 있다.

 

#2. 조건부 컴파일

-> #ifndef ~ #endif + #define

예)

#ifndef ABCD
#define ABCD

// 헤더파일의 기능 작성

#endif

 

파일 분할 시 주의 사항

#1. 컴파일은 파일 단위로 진행하기 때문에 필요한 헤더들은 모두 포함해주어야 한다.

#2. 헤더 파일에 전역 변수를 선언할 수 없다.

#3. 헤더 파일에는 특정한 경우를 제외한 함수의 정의부를 두어선 안된다.

'Programming > C++ Basic' 카테고리의 다른 글

C++ string  (0) 2020.09.08
C++ 레퍼런스 자료형  (0) 2020.09.08
C++ 조건부 컴파일(#if, #ifdef, #ifndef 등)  (0) 2020.09.07
C++ 매크로(#define)  (0) 2020.09.07
C++ 함수 포인터  (0) 2020.09.07

+ Recent posts