C++ static

CJB_ny·2022년 6월 6일
0

C++ 정리

목록 보기
85/95
post-thumbnail

static

"정적"이라고 말해주는 키워드

_common은 func라는 헤더파일에 딱 붙어서 "정적"으로 있는 변수이다.

( 데이터 영역은 프로그램이 시작하면 존재하고 종료될때 까지 계속 유지함 )


C#은 객체 지향이라

객체 = 속성 + 기능

즉,

속성 = 데이터, 기능 = 메소드
객체 = 데이터 + 메소드

이기 때문에

C#에서의 메소드와 데이터는 class안에 반드시 선언되어야한다.? => 이부분 좀더 자세히


어쨋든 C++에서의 static은 "현재 해당 파일"에만 존재하고 붙어있는 녀석이다.

그린데 #inlcude라는 "전처리기"를 사용하면 어떻게 되냐?

=> 해당 파일을 "복사" 하겠다! 라는 말이다.

그러면 func.h에 있는 static 으로 선언된 녀석이 #include func.h 를 한 녀석들(파일들)에게 다 복사가되어

ex) main.cpp, func.cpp가 #include func.h를 한경우,

main.cpp만의 static int i;가 데이터 영역에 있는 것이고

func.cpp만의 static int i;가 데이터 영역에 있게되어

해당 프로젝트를 빌드 하여도 링킹 단계에서 에러가 발생하지 않는다.

실제로

func.h에 static int _common을 선언하고

cpp_study.cpp에서 해당 값과 주소값을 출력하는 부분 작성한뒤,

func.cpp에 선언되어있는 Add함수 호출하고 있는 상황


stastic int _common의 경우는 살펴보았는데 만약,

전역 변수를 func.h에 int iPint = 10; 이라 선언하고,

cppstudy.cpp, func.cpp에서 #include func.h를 하게되면

https://velog.io/@starkshn/CPP%EC%96%B4%EC%86%8C24%EB%B6%84%ED%95%A0-%EA%B5%AC%ED%98%84-%EB%AC%B8%EC%A0%9C%EC%A0%90

해당 링크 참조해서 읽어라


func.cpp에서는 include func.h를 한뒤 static int _common의 값을 cpp_study와 마찬가지로 주소값을 출력하고 값을 출력해보면

주소값이 다른 것을 알 수 있다.

이것은 해당 파일마다의 고유의 static int _common을 가진다.

왜? => #inlcude라는 전처리기를 사용하여 "복사" 만 했기 때문이다.

profile
https://cjbworld.tistory.com/ <- 이사중

0개의 댓글