'게임프로그래밍/C언어'에 해당되는 글 4건

  1. 2008/01/22 [ C언어 ] 상수에 대해 알아보자!!
2008/01/22 00:44
1) 리터럴 상수 (literal) - 이름이 없는 상수
 - 이름이 없는 상수. 처음에 책을 봤을 때 제목에 이런 식으로 나와 이게 뭔가 했었다.
   하지만 조금 읽어보니 어처구니가!!

EX) int a = 10 + 12;
a가 변수면은 10과 12는 리터럴 상수이다.
 - _ - 어떤가 참으로 쉽지않은가? 게다가 위의말대로 이름이 없다.
책을 읽으면서 이런 것을 왜 이름까지 리터럴 상수라고 지어서 이렇게 분류까지 해놨을까?
사람들이 다 이유가 있어서 분류를 해놓은 것이니 우리는 만들어준 함수 조용히 가져다가 잘 쓰면 된다.
 그래도 이렇게 쿡쿡 질러놓고 설명 안하기는 찝찝하니...

일반적으로는 변수를 만들때만 메모리가 설정(?ㄱ- 적당한 말이 만 떠오른다.) 된다고 생각하는데
연산을 위해 상수를 사용하면 상수도 메모리의 올라가게 되어있다.
연산을 위해서 상수가 메모리의 올라가는 것은 당연한 일!

만약
int a = 10 + 12; 
이런 연산식이 있다면 22라는 답을 구하기 위해 10과 12를 메모리의 올려서 결과값을 구한다는것이다.

그거 당연한거 아니야?! 라고 할 사람도 분명있겠지만 분명 처음 알게된 사람도 있을것이다 -ㅂ-!!

▣ 리터럴 상수의자료형
 int a = 10;        // 10은 int형으로 자동 인식된다.
 float b = 3.14;   // 3.14는 double형으로 자동인식된다.
 char c = 'X';   // X는 char형으로 자동인식된다.
- 이런 식으로 초기화를 하더라도 상수는 메모리에 올라가야 하므로 자동적으로 자료형이 정진다.
고로 정수형의 자료형은 int 실수의 기본 자료형은 flaot 문자의 기본 자료형은 char인 것이다.
** 상수의 값이 너무커 기본자료형의 담을 수 없다면 그 자료형보다 더 큰 자료형으로 자동으로 변견된다는 사실!! (음 뭐 이렇게 깊이 파고 들 필요는 없겠지만 알면 좋다~)

가끔 상수의 자료형 때문에 컴파일 중 경고가 뜨기도 하는데
EX) float a = 3.14;
이런 식으로 값을 초기화 하면은 경고가 뜬다.
초기화를 할 경우 값이 잘릴수도 있다는 경고인데 경고가 뜨는 이유는 바로 위에서 설명했다.
3.14를 담을 a는 float형이다. 하지만 3.14는 double형이다.
float는 double형보다 작기때문에 값이 잘릴 수 있다고 경고가 뜨는 것이다.

올바른 EX)
float a = 3.14f;


이런 식으로 정의 해 주면은 경고가 뜨지 않는다.
실수 뒤의 f는 3.14를 float형으로 지정하겠다는 뜻이다. 이런 식으로 상수의 자료형을 임의로 변경할 수 있다.

정수                                          사용하기(EX)
u  or U          unsigned int          222u  or 222U
l   or L          long                      222l  or 222L
lu or LU        unsigned iong        222lu or 222LU

실수
f   or F          float                      2.33f or 2.33F
l   or L          long double           2.33l or 2.33L



2) 심볼릭 상수 (symbolic) - 이름 있는 상수
- 말 그대로 이름이 있는 상수  [ const 키워드 ]
EX) const 키워드로 상수 지정하기
const int A = 10;

정말 초 간단하다. 앞에 const만 붙여주고 변수처럼 정의해서 사용하면은 된다.
- const가 붙으면 상수가 되기 때문에 초기화한 다른 값으로 변경하려하면은 에러가 뜨니 주의핮자. 심볼릭 상수는 대체로 대문자로 이름을 정하자. 모두의 약속~!
마음대로 정해도 되지만 남들이 보기 쉬운 프로그램을 만드는 것이 좋은 프로그램이다.

** 심볼릭 상수를 선언할때 주의할 점이 있는데 선언과 초기화를 꼭 동시의 해 주어야한다.
const int A ;
A = 10;
이런식으로 해주면은 에러메세지가 뜬다.
그 이유는 A를 선언한 순간 초기화해 주지 않았다고 해서 A에 아무값도 안들어 있는 것이 아니다.
A에는 쓰레기 값이 들어가 있기 때문에 이미 쓰레기 값으로 초기화가 된것이다.
그래서 아래에 A = 10; 은 초기화가 아닌 값의 변경으로 인식하기 때문에 에러가 나는 것이다.


Posted by 구렁이