F.R.I.D.A.Y.

변수(variables) 본문

DEV/C C++

변수(variables)

F.R.I.D.A.Y. 2019. 1. 25. 14:01
반응형

 우리가 물건을 보관할 때는 주로 어떤 공간을 나누어서 물건을 보관한다. 필기구를 보관할 때는 필통, 책을 보관할 때는 책장 등 담을 물건의 용도와 특징에 맞게 비슷한 내용들을 보관한다.

 프로그래밍은 사람이 해결할 것들을 컴퓨터가 수행하도록 명령을 내리는 작업들인데, 명령을 내리기 위해서는 데이터가 필요하다. 무엇을 어떻게 할지 말이다.

 C언어를 포함한 대부분의(혹은 모든) 프로그래밍 언어에서는 변수라는 개념을 도입해 데이터를 저장할 수 있도록 했는데, 변수는 어떤 프로그램을 만들던(심지어 운영체제) 필수 불가결하게 사용해야하는 대상이다.



1. 자료형

 변수를 알기 전에, 먼저 자료형이란 것을 알아야 할 필요가 있다. 택배를 생각해보자, 중고 장터에서 마우스나 휴대폰같이 작은 물건을 구매했다고 하자. 그럼 판매하는 사람이 물건을 보낼 때는 해당 물건 크기에 맞는 상자에 담아 물건을 부칠 것이다. 마우스나 휴대폰이 커봐야 성인 남성 손바닥 정도 하니 상자도 그정도면 될텐데, 판매측에서 상자를 TV, 냉장고 등 커다란 가전제품을 담을 때 사용하는 커다란 상자에 담아서 보냈다고 생각해보자. 배송상에서도 크기 때문에 문제가 있을 것이고, 안전히 도착을 했다 하더라도 우리가 그 상자를 처리함에 있어 불편을 겪을 것이다.

 자료형물건을 담는 상자의 크기정도로 생각하면 편할 것이다[각주:1]. 자료형은 -1, 0, 1 등을 담을 수 있는 정수 자료형과 과 3.14, 2.71 등 실수를 담을 수 있는 실수 자료형, 그리고 그 외에 다른 데이터를 담을 수 있는 자료형이 있다.


char 

short 

int 

long 

long long 

float 

double 

long double 


 위 표에서 하얀 배경으로 된 것이 정수 자료형, 보라색으로 칠해진 것들이 실수 자료형이다.

 크기 면으로는 char가 1바이트, short가 2바이트, int와 long이 4바이트, long long이 8바이트이다. 실수 자료형은 float가 4바이트, double은 8바이트, long double 8바이트이다.

Q. long double이 어떤 곳에선 12바이트라고 하고 어떤 곳은 16바이트라는데요?

 결론적으로 말하면 포스트에 있는 말을 포함해 모두 맞는 말이다. long double을  포함하여 int와 long 자료형은 시스템에 따라 그 크기가 다르다. 필자가 주로 사용하는 비주얼 스튜디오에서는 운영체제 비트에 상관 없이 8바이트, 리눅스는 12, 16바이트이고 애플의 OS X[각주:2]는 16바이트를 먹는다고 한다.

 위 글에서 작성한 부분은 우리가 주로 사용하는 시스템에서의 크기를 가리키니 32비트 윈도우 프로그램을 만들지 않고 다른 플랫폼의 프로그램을 만든다면 자료형 크기를 먼저 확인해보자.


 정수 자료형은 접두어로 signed와 unsigned가 붙는데, 접두어를 작성하지 않으면 기본적으로 signed가 붙는다. signed와 unsigned는 각각 다음을 의미한다.

signed

부호

unsigned

부호

 부호가 있고 없고의 차이가 뭐가 중요하느냐 할 수 있지만, 표현 범위가 달라진다. 표현 범위는 2^(비트 수)이기 때문에, 첫 비트를 부호로 사용하는[각주:3] signed에서는 최대 값이 unsigned 자료형의 1/2배로 줄어든다. 대신, 줄어든 1/2의 범위를 마이너스를 표현할 때 사용한다.


2. 변수

이제 변수를 알아보자. 변수의 기본 구조는 다음과 같다.


(자료형) (변수 이름);

(자료형) (변수 이름1), (변수 이름 2), ....; // 변수 선언의 변형 형태

 위에서 배운 자료형이 먼저 작성되고 변수 이름을 작성한 후 세미콜론( ; )을 작성함으로써 변수를 만든다. 이렇게 변수나 이후에 배울 함수를 만드는 과정을 프로그래밍에서는 선언이라고 한다. 주석[각주:4]으로 설명한 것과 같이 ,(반점) 연산자를 통해 한번에 여러 개의 변수를 선언할 수도 있다. 이전의 C 표준에서는 변수를 코드 중간에 선언할 수가 없었는데 1999년에 제정된 C99 표준부터는 코드 중간에도 선언이 가능하다. 요즘 컴파일러는 대부분 C99를 넘어 이후에 나온 표준들도 지원하니 큰 걱정 없이 사용해도 된다[각주:5].


 참고

>> https://dojang.io/mod/page/view.php?id=45

  1. 프로그래밍의 최종 결과인 어셈블리어/기계어로 번역되었을 때, 자료형은 크기라고 보기에는 제대로 된 의미를 담지 못한다. 그러나 이제 막 프로그래밍을 알고 C를 처음 도전하는 사람들에게는 이정도로 생각하는 것도 나쁘지 않다. 나중에 관심이 있다면 본래 의미를 찾아보는 것도 괜찮다. [본문으로]
  2. 맥북을 사용하지도 않고, 해킨토시도 이용하지 않기 때문에 외부 글을 참고했다. [본문으로]
  3. 첫 비트가 1이면 -, 0이면 +이다. [본문으로]
  4. 개발자들이 코드의 기능을 설명하거나 기타 필기를 위해 만든 부분으로, 주석 처리된 부분은 얼마나 작성이 되어있던 프로그램에 영향을 주지 않는다. [본문으로]
  5. 다만, Visual Studio 2010에서는 지원하지 않았다. 만 8년이 지난 프로그램인데 2010을 사용하는 중이라면 웬만하면 최근 프로그램으로 바꾸는 것이 어떨런지..? [본문으로]
728x90
반응형

'DEV > C C++' 카테고리의 다른 글

시프트 연산자  (2) 2019.01.29
클래스의 초기화 순서  (2) 2019.01.28
클래스(class)  (0) 2019.01.25
Q strlen 구현하기  (0) 2019.01.25
NULL 널문자 0  (0) 2019.01.24
Comments