변수
[C++] 디버그 모드에서 변수의 메모리 차지 공간
int64의 크기는 8바이트이고 로컬변수 선언시 스택 메모리에 8바이트씩 차지하게 된다. 8바이트 크기의 변수 3개를 선언 후 메모리 주소를 확인해보자. int64 n1 = 1; int64 n2 = 2; int64 n3 = 3; cout
[C] 정적변수, 지역변수, 전역변수 비교 (static, local, global)
☑️ 지역변수(local variable, 자동변수)는 중괄호 내부, 함수의 매개변수(Parameter)에서 사용되는 변수를 의미한다. 지역변수의 지역은 함수의 내부, 중괄호 내부를 의미한다. 따라서 함수 안에서만 접근 가능하며, 함수를 벗어나면 사라진다 (= 변수의 메모리 공간이 소멸된다). 지역변수는 초기화하지 않으면 컴파일 에러가 나거나 쓰레기값이 저장된다. 지역변수(local variable)는 자동변수(auto variable)와 같다. 자동변수는 흔히 블록(중괄호) 안에서 사용하는 변수로서, 변수가 생성된 뒤에 자동으로 사라진다고 하여 자동변수라고 부른다. 매우 흔히 사용하기 때문에 auto 키워드를 생략하고 사용한다. ☑️ 전역 변수(global variable)는 지역변수와 반대로 중괄호 ..
C++ 변수와 함수에서의 const
Const 의미 컴파일러 상수(*상수 : 정적인 data. 초기화를 한번밖에 못하는 data. 메모리 변경이 불가하다). 변수를 상수화하여, 한번 할당된 상수로 할당된 메모리의 모든 비트를 변경하지 못한다. Const의 장점 const키워드가 붙은 객체는 외부 변경을 불가능하게 한다. class 바깥에서는 전역 / namespace 유효범위의 상수를 정의하는데 씀. static 선언한 객체에도 const를 붙이는 것이 가능하다. 정적 / 비정적 data 멤버 모두를 상수로 선언할 수 있다. 변수에서의 Const int a = 10; int const *pn const int* pn = &n; -> 포인터가 가리키는 대상(값)이 상수. pn(주소)은 변경 가능하다, *pn(값)은 변경이 불가하다. int ..
C extern (변수 / 함수 외부 선언)
const와 typedef는 기본적으로 내부 링크로 처리되고 여기서 extern을 붙이면 외부 링크가 적용된다. 어떤 이름을 extern으로 지정하면 컴파일러는 이를 정의가 아닌 선언문으로 처리한다. 변수를 extern으로 지정하면 컴파일러는 그 변수에 대해 메모리를 할당하지 않는다 따라서 그 변수를 정의하는 문장을 따로 작성해야 한다. /* AnotherFile.cpp */ extern int x; int x{ 3 }; extern으로 선언하는 동시에 초기화가 가능하다. /* AnotherFile.cpp */ extern int x = { 3 }; extern을 붙이지 않아도 x는 기본적으로 외부 링크로 처리되기 때문에 생략 해도 된다. extern이 반드시 필요한 경우는 다른 소스 파일에서 x에 접근..
C/C++ 전처리기의 모든 것 (예외, 매크로, 토큰)
전처리기 컴파일러는 사용자가 작성한 코드를 컴파일하기 전에 전처리문에서 정의해 놓은 작업들을 먼저 수행한다. 첫 문자는 항상 ‘#’으로 시작한다. ANSI 표준에 따른 C의 전처리문의 종류가 아래에 나와 있다. 파일 처리를 위한 전처리문 : #include 형태 정의를 위한 전처리문: #define, #undef 조건 처리를 위한 전처리문: #if, #ifdef, #ifndef, #else, #elif, #endif 에러 처리를 위한 전처리문: #error 디버깅을 위한 전처리문: #line 컴파일 옵션 처리를 위한 전처리문: #pragma #include 꺽쇠 괄호 솔루션 파일이 위치한 폴더가 아닌 타 폴더에 있을 시, 쌍 따옴표는 " " 같은 폴더에 있을 시 // 타 폴더 #include #inclu..