코딩할 때 만날 수 있는 여러 오류들

1. 변수의 유효범위

전역 변수는 어디에서든 꺼내어 쓸 수 있다.

단, 함수 내에서 변수를 만들어 쓸 때 유효범위가 복잡해진다.

 

- 스택 내에 들어간 변수(지역 변수)

중괄호의 범위가 변수의 생존 범위가 된다 => 그 변수 내에서만 쓸 수 있다

같은 이름을 두 번 사용할 때 오류가 발생하게 됨.

int main()
{
	int hp = 12;

	int hp = 100;
}
// 사용 불가!!
-----------------------------------
int main()
{
	{
    	int hp = 12;
	}
    //~~
	{
	int hp = 100;
	}
}

 

2. 연산의 우선 순위

(1) 사칙 연산

괄호 > 곱셈, 나눗셈 > 덧셈, 뺄셈

 

(2) 짝수 여부 판단

bool isEven = (hp % 2 == 0) // hp를 2로 나눈 값이 0이면(짝수이면) 1을 반환

나머지 '%'가 일치 '=='보다 우선 순위가 앞에 있음, 따라서 나머지를 먼저 구함.

소괄호를 이용하면 우선 순위를 앞당길 수 있다.

bool isEven = ((hp % 2) == 0)

(3) 두 가지 이상의 판단

bool isEvenOrDivBy3 = ((hp % 2) == 0) || ((hp % 3) == 0); // 짝수이거나 3으로 나뉘어 지는 값인가

 

3. 타입 변환

int hp = 20; // 4바이트

// 형식을 바꿈

short hp2 = hp;
float hp3 = hp;
unsigned int hp4 = hp;

(1) 정보 손실

큰 값을 가진 함수의 타입을 더 작은 타입으로 바꾸면 정보가 손실됨.

 

(2) 정수를 부동 소수점(실수) 형태로 변환

정밀도 차이로 인한 정보 손실이 발생함.

 

(3) unsigned int로 변환

분석하는 정보가(비트 플래그에서) 달라질 수 있음.

 

4. 오버 플로우

곱셈을 연산할 때 큰 수가 발생 => 변수의 한도를 초과할 수 있음

 

5. 나눗셈 문제

(1) 0으로 나눔 (Divided by Zero)

나눗셈을 연산할 때 0으로 나누지 않도록 해야 함.

 

(2) 정수 나눗셈

정수끼리 나눌 때 연산 값 또한 정수로 결정 함.

float ratio = hp / (float)maxHP;

둘 중 하나를 실수로 만들어 계산하면 오류를 해결할 수 있음.

'기초 C++ 스터디' 카테고리의 다른 글

2-2. 반복문(For, While)  (0) 2023.05.04
2-1. 분기문(If)  (0) 2023.05.04
1-7. const와 메모리 구조  (0) 2023.05.02
1-6. 비트 연산과 비트 플래그  (0) 2023.05.02
1-5. 비교 연산과 논리 연산  (0) 2023.05.02