안녕하세요 피터입니다.
오늘은 C언어의 상수에 대해서 알아보겠습니다.
1. 상수란 무엇인가?
상수(Constant)란 프로그램이 실행되는 동안 '값이 고정되어 변경할 수 없는 메모리 공간'을 의미합니다.
변수처럼 정의해서 사용할 수 있습니다.
기본적으로 int나 char 와 같은 C언어 표준 자료형들은 모두 상수가 될 수 있습니다. 그렇기 때문에 상수는 한번 정의한 이후에 값을 변경할 수 없도록 제한한 변수와 의미가 같다고 볼 수 있습니다.
문자열 그 자체가 값을 나타내는 것을 리터럴 상수(Literal constant)라고 하는데 줄여서 리터럴(Literal)이라고 부르기도 합니다.
2. 상수를 정의하는 방법
상수를 정의하는 방법에는 두 가지 방법이 있습니다.
#define 전처리기를 사용하는 방법과 const 키워드를 사용하는 방법입니다.
2.1 #define 전처리기 (Preprocessor)
#define identifier value
#define으로 전처리기 지시자를 통해 상수를 정의할 수 있습니다.
이렇게 정의된 상수는 전처리 단계에서 value로 치환된 이후 컴파일됩니다.
#include <stdio.h>
#define LENGTH 10
#define WIDTH 5
#define NEWLINE '\n'
int main() {
int area;
area = LENGTH * WIDTH;
printf("value of area : %d", area);
printf("%c", NEWLINE);
return 0;
}
2.2 const 키워드 (Prefix)
const 키워드를 통해 변수를 선언할 때 상수로 지정할 수 있습니다.
const type variable = value;
#include <stdio.h>
int main() {
const int LENGTH = 10;
const int WIDTH = 5;
const char NEWLINE = '\n';
int area;
area = LENGTH * WIDTH;
printf("value of area : %d", area);
printf("%c", NEWLINE);
return 0;
}
3. 리터럴 상수
리터럴 상수는 소스 코드상의 문자열이 그 자체로 값을 나타내는 것을 말합니다. 이 값들은 변수에 대입을 하거나 조건문에 비교값으로 사용할 수 있습니다.
3.1 정수 리터럴 (Integer Literal)
85 /* decimal */
0213 /* octal */
0x4b /* hexadecimal */
30 /* int */
30u /* unsigned int */
30l /* long */
30ul /* unsigned long */
212 /* Legal */
215u /* Legal */
0xFeeL /* Legal */
078 /* Illegal: 8 is not an octal digit */
032UU /* Illegal: cannot repeat a suffix */
3.2 실수 리터럴 (Floating-point Literal)
3.14159 /* Legal */
314159E-5L /* Legal */
510E /* Illegal: incomplete exponent */
210f /* Illegal: no decimal or exponent */
.e55 /* Illegal: missing integer or fraction */
3.3 문자 상수 (Character Constant)
' ' 로 감싸여진 단일문자를 문자 상수라고 합니다. ' ' 안에는 단일 문자만 올 수 있습니다. 문자가 2개 이상이면 문자열이 되기 때문에 " " 로 감싸야 합니다.
escape 문자인 '\' 가 붙은 특수 문자도 올 수 있습니다.
주로 사용하는 '\t' 는 탭문자, '\n' 은 개행문자에 해당합니다.
'x' /* Legal */
'\n' /* Legal */
'\t' /* Legal */
'xy' /* Illegal: string */
3.4 문자열 리터럴 (String Literal)
"hello, dear"
"hello, \
dear"
"hello, " "d" "ear"
여러분의 댓글은 저에게 크나큰 힘이 됩니다. 오류 및 의견 주시면 감사하겠습니다.
-Peter의 우아한 프로그래밍
'프로그래밍 > C' 카테고리의 다른 글
[C언어 강좌-7] 연산자 (Operator) (0) | 2017.02.27 |
---|---|
[C언어 강좌-6] 기억 영역 분류 (Storage Class: auto, register, static, extern) (1) | 2017.02.25 |
[C언어 강좌-4] 자료형 (DataType) (0) | 2016.12.06 |
[C언어 강좌-3] 변수(Variable)의 이해 (0) | 2016.12.02 |
[C언어 강좌-2] C언어 컴파일 과정 (15) | 2016.11.21 |