int a = 123;

auto a = 123; <- 형추론 


auto a; <- auto 사용 X


정수 + 실수 = 실수 


//template을 사용하면 parameter타입에 뭐든지 넣을 수 있는 것을 만든다. 


 꼬리달기 

auto add(int x, int y) -> int; //보기 편리해서 사용 

Posted by 도이(doi)
,

using namespace std;

using namespace a;


1. 

cout << a::my_var << endl;


2. 

{

using namespace a;

cout << my_var << endl;

}


using namespace를 header 혹은 전역에서 사용하는 것은 위험하다. 

Posted by 도이(doi)
,

전역 변수 (global variable)

정적 변수 (static variable)

내부 연결 (internal linkage)
파일 안에서 변수를 어디서든 사용할 수 있으면 내부연결

외부 연결 (external linkage)
한 cpp파일에서 정의한 변수를 다른 cpp파일에서 사용할 수 있는 것


전역변수는 가급적 사용하지 말아야 된다. 
이 파일 저 파일 이동하면서 변수 사용하는 것은 좋지않다. 


내부에서만 사용할 것인지 아니면 외부에서만 사용할 것인지를
결정하는 것이 
내부 연결, 외부 연결이다. 


지역변수와 전역 변수의 이름이 같을 때 지역 변수 대신
전역 변수를 사용하고 싶으면 변수명 앞에 :: 을 붙이면 된다.  


정적 변수(static) 사용 
프로그램 짤 때는 별로 사용하지 않지만, 
디버깅할 때는 종종 사용함. 
함수가 몇 번 호출하는지 알고 싶을 때 사용. 


전역변수(global) 사용

 

정적 변수 vs 전역 변수
static 은 초기값을 반복하지 않는다. 
static을 선언할 때는 반드시 초기값이 있어야 한다. 
함수가 여러번 실행 될 때 두번째 실행시 첫번째에 저장된 값을 쓴다. 
정적으로 같은 주소 메모리를 재사용한다. 

같은 기능을 전역변수를 이용해서도 사용할 수 있음. 
전역으로 선언되어있는 변수가 있고 그 이후 함수를 호출하면 
다시 초기값을 선언하지 않기 때문에 static과 유사해 보인다. 


전역변수는 위험해서 잘 사용하지 않음. 
어디서든 변수 값을 바꿀 수 있기 때문에
관리가 안되고 추적하기 힘들어서 잘 사용하지 않게 된다. 
제일 좋은 방식은 객체지향을 사용하여서 전역변수를 사용하지 않는 것이다. 


linking 연결시킨다. 
linkage 연결, 그 자체를 의미함 


외부 연결(external linkage)
전역변수를 다른 파일에서도 사용할 수 있다. 

extern  여러 cpp파일에 거쳐서 사용할 수 있는 전역변수 
extern은 표기하지 않아도 됨. 

main cpp 파일

extern void doSomething(); //어딘가에 doSomething의 몸체가 존재함을 표시. 

링크 cpp 파일


전체적으로 사용되는 상수를 전역변수로 많이 사용함. 
ex) 물리 값, 수치 값


*메모리를 덜 차지하게 하기위해서 주소값을 그대로 사용하는 const 정적 변수를 사용하고, 외부연결(extern)로 접근할 수 있도록 연결해 둔다. 


주소 찍는 방법 

&(함수명) :: (변수명)
ex) &doSomething :: a


전역변수가 internal linkage인 경우, 영역범위가 넓은 지역변수처럼 사용됨. 
프로젝트가 커질 경우, 전역변수가 어디서 사용됐는지
알기 힘들기 때문에 단점이 많다. 

여러개의 cpp파일이 공통적으로 사용할 수 있는 전역변수 external linkage
빌드할 때 obj파일이 생성되고 묶여지는 것과 연관됨. 



'programming > c++' 카테고리의 다른 글

4.4 auto 키워드와 자료형 추론  (0) 2019.04.25
4.3 using문과 모호성  (0) 2019.04.25
4.1 지역 변수, 범위, 지속기간  (0) 2019.04.23
3.9 비트 플래그, 비트 마스크  (0) 2019.04.22
3.8 비트단위 연산자  (0) 2019.04.22
Posted by 도이(doi)
,

범위(scope)
변수를 눈으로 볼 수 있는 범위를 의미함 

어디서 사용할 수 있고 어디서 사용할 수 없는지

지속기간(duration)
메모리를 차지하는 시간 


변수명이 같은 것은 영역(block)에 하나만 있어야 한다. 

이름은 같은데 parameter가 다르면 다른 함수로 취급한다. 


namespace

이름이 같을 경우 namespace를 나누어준다. 
이름으로 충돌하는 것을 방지하기 위해서 


:: 영역 혹은 범위 결정 연산자


cpp17 version부터 

namespace 안에 namespace를 쓸 수 있다. 

namespace work1 ::work11:: work111

{

}

접근

 work1 ::work11:: work111( );

'programming > c++' 카테고리의 다른 글

4.3 using문과 모호성  (0) 2019.04.25
*4.2 전역 변수, 정적 변수, 내부 연결, 외부 연결  (0) 2019.04.23
3.9 비트 플래그, 비트 마스크  (0) 2019.04.22
3.8 비트단위 연산자  (0) 2019.04.22
3.7 이진수  (0) 2019.04.22
Posted by 도이(doi)
,