상수

Programming/C 2006. 9. 25. 21:24
상수

정수형 상수 1234 같은 것은 int이다.
long상수는 123456789L 처럼 L이나 l로 끝난다.
무부호형 상수는 u 또는 U로 끝나고, 접미사 ul 또는 UL은 unsigned long을 의미한다.
부동 소수형 상수는 소수점(123.4)이나 지수(1e-2)를 가지고, 접미사가 없을 경우에는 배정도(double)로 간주된다.
접미사 f 또는 F는 부동상수를 나타내며, l이나 L은 double을 나타낸다.

정수값은 0이 앞에 나오면 8진수, 0x 또는 0X가 앞에 나오면 16진수를 나타낸다.
8진수나 16진수 상수에도 L이나 U를 붙여 long 이나 unsigned로 만들 수 있다.
문자 상수는 'x' 같이 ''안의 하나의 문자로 나타내며 ACSII 문자집합에서 정수값을 갖는다.
문자상수는 다른 정수처럼 숫자 연산이 가능하며 보통 다른 문자와 비교하는데 쓰인다.

어떤 문자는 \n 처럼 escape 문자에 의해 문자나 문자열로 표현될 수 있다.
임의의 크기를 갖는 비트 패턴(bit pattern)은 한 개에서 세 개까지의 8진수를 써서 '\000'으로 나타낼 수도 있고, 하나 내지 두 개의 16진수를 써서 '\xhh'로 쓸 수도 있다.

#defind VTAB '\013'  /* ASCII vertical tab */
#defind BELL '\007'  /* ASCII bell */

#defind VTAB '\xb'  /* ASCII vertical tab */
#defind BELL '\x7'  /* ASCII bell */

* Escape Sequence
  • \a : 벨소리
  • \b : backspace
  • \f : formfeed
  • \n : newline
  • \r : carrage return
  • \t : 수평 tab
  • \v : 수직 tab
  • \0 : 0, null문자
  • \\ : backslash
  • \? : 물음표
  • \' : 작은따옴표
  • \" : 큰따옴표
  • \000 : 8진수
  • \xhh : 16진수
상수 수식(constant expression)은 상수만을 포함하는 수식이다.
이들은 실행시가 아닌 컴파일시에 값이 정해진다.

#define MAXLINE 1000
char line[MAXLINE + 1]:

#define LEAP 1
int days[31+28+LEAP+31+30+31+30+31+31+30+31+30+31];

문자열 상수(string constant)은 문자열에 따옴표를 붙여서 사용한다.
따옴표는 문자열에 포함되지 않고 다만 그것을 구분하기 위하여 쓰인다.

"I am a string"
"" /* the empty string */

문자열은 문자의 배열이다.
내부적으로 표현할 때는 문자열 끝에 '\0'을 가지고 있어서 실제로 기억장소는 따옴표 안에 있는 개수보다 한 개가 더 필요하다.
표준 라이브러리 함수인 strlen(s)는 끝의 '\0'를 뺀 문자열 길이를 리턴한다.

/* strlen: return length of s */
int strlen( char s[] )
{
  int i;

  i = 0;
  while ( s[i] != '\0' )
   ++i;
  return i;
}

문자상수와 하나의 문자를 갖는 문자열은 확실히 구분되어야 한다. 즉, 'x'는 x라는 문자를 나타내는 정수이고, "x"는 문자의 배열로 하나의 문자 x와 '\0'로 이루어져 있다.

열거(enumeration) 상수는 정수형 상수의 나열이다.

enum boolean { NO, YES };

값이 지정되지 않으면 집합안의 첫 번째 이름의 값은 0, 1, 2 등의 값을 차례로 갖는다.
값이 지정되지 않은 것은 앞의 것보다 1 큰 값을 갖게 된다.

enum escapes { BELL = '\a', BACKSPACE = '\b', TAB = '\t', NEWLINE = '\n', VTAB = 'v', RETURN = '\r' };
enum months { JAN = 1, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC };

enum을 사용하면 #define보다 편리하게 여러 개의 상수를 지정할 수 있다.
컴파일러는 열거형 변수가 맞게 사용되었는지 확인하지 않는다.
열거형 변수의 값을 확인하기 위해서는 디버거(debugger)를 사용해야 한다.

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,