※ C / C++을 이미 알고 있으나 개인적인 공부 및 복습을 위해 포스팅 하는 글이므로
C++에 대한 구체적인 정보를 담고 있지 않습니다.
▶ 하드코딩의 문제점 (상수때려박고 그런거) + const를 사용하는 이유
ㆍ 0b0000 [무적][변이][스턴][공중부양]
↓
ㆍ 0b0000 [무적][공포][변이][스턴][공중부양]
ㆍ 이렇게 사양이 변경되면 기존의 버전이 이상해질거다...
ㄴ 프로젝트가 클 수록 더 큰 문제가 발생할 것이다.. 따라서 리터럴상수를 저렇게 때려박는것은 좋지 않다.
↓
ㆍ 그래서 한번 정해지면 절대 바뀌지 않을 것을을 const키워드를 붙히자
ㆍ const를 사용하면 가독성도 좋아지고 다른 팀원이 값을 실수로 변경하는것도 방지할 수 있다.
#include <iostream>
using namespace std;
unsigned char flag;
const int AIR = 0;
const int STUN = 1;
const int POLYMORPH = 2;
const int INVINCIBLE = 3;//const를 붙힌 값은 반드시 초기화를 해줘야된다
int main()
{
//flag = (1 << 3);
//flag |= (1 << 2);
flag = (1 << INVINCIBLE);
flag |= (1 << POLYMORPH);
}
ㆍ 1,3 등 숫자를 박는거보다 알아보기 더 쉬워졌다.
ㆍ 이유야 더 많지만 추후 포스팅
▶ 데이터 영역
1. .data (초기값이 있는 경우)
int a = 2;
2. .bss (초기값이 없는 경우)
int b;
3. .rodata(읽기전용 데이터) -> const에 포인터
const char* msg = "Hello World"
▶ 스택 영역
int main()
{
//지역변수, stack에 할당
int c = 3;
}
※ 의문점 : const는 read only deta일까?
ㆍ 안나온다! 근데 저 전역변수 const값을 지역변수(스택영역) 으로 데려와서 주소찍으면 또 주소가 나온다.
ㄴ > 사실 C++표준에서 꼭 그렇게 하란 말은 없음컴파일러 마음이다(visual studio마음이다)
▶ enum, const, 전처리기
#include <iostream>
using namespace std;
const int A = 1;
const int B = 2;
const int C = 3;
enum ENUM_SRP
{
ENUM_A = 1,
ENUM_B,
ENUM_C
};
#define DEFINE_A 1
#define DEFINE_B 2
#define DEFINE_C 3
//디파인 키워드는 사실 사용을 권장히진 않는다
/*
코드가 많아지면 디버그 돌리기도 힘들다
ㄴ>디버깅 단계에선 이미 전처리기 단계가 지나와서 어셈블리로 데이터를 까봐도 define 매크로에 대한 정보가 나오지 않는다
ㄴ> 마우스를 올려봐도 아무것도 안나온다.
-> enum이나 const를 사용하자. 결과물은 셋 다 똑같지만, C++프로그래머라면 define 전처리기문은 지양하자
ㄴ> enum을 0순위로 두자 (const는 초기화해야되고..)
*/
// 전처리 -> 컴파일 -> 어셈블리 -> 링크
'C++프로그래밍 > C 와 C++ 기초실습' 카테고리의 다른 글
포인터 (0) | 2024.09.17 |
---|---|
스택 프레임과 호출스택 (디버그) (2) | 2024.09.16 |
비트연산과 비트플래그 (1) | 2024.09.16 |
비교연산과 논리연산 (디스어셈블리 디버그) (0) | 2024.09.15 |
산술 연산(디스어셈블리 디버그 테스트) (1) | 2024.09.15 |