코딩할 때 만날 수 있는 여러 오류들
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 |