-
C++) 전역 변수, 정적 변수, 내부 연결, 외부 연결C++ 2022. 11. 18. 22:14
https://www.inflearn.com/course/following-c-plus/dashboard
홍정모의 따라하며 배우는 C++ - 인프런 | 강의
만약 C++를 쉽게 배울 수 있다면 배우지 않을 이유가 있을까요? 성공한 프로그래머로써의 경력을 꿈꾸지만 지금은 당장 하루하루 마음이 초조할 뿐인 입문자 분들을 돕기 위해 친절하고 자세하
www.inflearn.com
전역 변수
전역 변수는 어디서 값을 실수로 변경할지 모르므로 최소한으로 사용하는 것이 좋다.
#include <iostream> using namespace std; int value = 123; // 전역변수 int main() { cout << value << endl; // 123 int value = 1; // name hiding cout << ::value << endl; // 123 전역변수에 접근 cout << value << endl; // 1 return 0; }
정적 변수
static이란 무엇인가 ?
변수 식별자가 메모리로부터 받은게 static, 정적으로 선언
초기화를 한번만 한다.#include <iostream> using namespace std; void doSomething() { // 메모리 공간을 정적으로 할당받는다. static int a = 1; ++a; cout << a << " " << &a << endl; } int main() { doSomething(); doSomething(); doSomething(); doSomething(); return 0; }
출력 결과 내부 연결 internal linkage
개별 ccp 파일 안에서만 전역으로 작동하는 전역 변수를 의미
전역 변수에 static을 붙이면 다른 파일에서는 참조할 수 없다.
#include <iostream> using namespace std; static int g_a = 1; int main() { int a = 10; cout << g_a << endl; // 1 return 0; }
외부 연결 external linkage
다른 파일에 존재하는 함수 또는 변수를 전방 선언을 한 후 참조 할 수 있다.
변수는 반드시 한 곳에서만 초기화 되어야 한다. 두 곳 이상에서 초기화 될 경우 링킹과정에서 충돌 일어남
링킹 과정에서 연결된다.
extern은 생략 가능
#include <iostream> using namespace std; extern int a = 1; void doSomething() { cout << "Hello" << endl; } // test.cpp
#include <iostream> using namespace std; // forward declaration extern void doSomething(); extern int a; int main() { doSomething(); cout << a << endl; return 0; }
메모리 공간 최적화 하기
namespace 안에서 extern으로 링킹된 전역 변수는 참조시 같은 메모리 주소를 가진다.
#pragma once namespace Constants { extern const double pi; extern const double gravity; // ... } // My_Constants.h
namespace Constants { extern const double pi(3.141592); extern const double gravity(9.8); // ... } // My_Constants.cpp
#include <iostream> #include "My_Constants.h" using namespace std; extern int a = 1; void doSomething() { cout << "In test.cpp " << Constants::pi << " " << &Constants::pi << endl; } // test.cpp
#include <iostream> #include "My_Constants.h" using namespace std; extern void doSomething(); int main() { cout << "In main.cpp file " << Constants::pi << " " << &Constants::pi << endl; doSomething(); return 0; } // main.cpp
출력 결과 'C++' 카테고리의 다른 글
C++) 난수(Random number) 만들기 (0) 2022.11.19 C++) std string (0) 2022.11.19 C++) 비트플래그와 비트마스크 (0) 2022.11.18 C++) 비트단위 연산자 Bitwise operators (0) 2022.11.18 C++) 연산자 (0) 2022.11.18