본문 바로가기
일상/공부

[ C언어 ] 상수(리터럴 상수, 심볼릭 상수)

728x90
반응형

이번에는 C언어 상수의 개념, 표현방법, 종류에 대해 알아보자!


상수


상수와 변수

프로그래밍에서 변수는 이름이 붙여져 필요시에 참조와 수정이 계속 가능한 자료를 말하고, 상수는 이름 없이 있는 그대로 표현한 자료 값인 리터럴 상수나 이름은 있지만 정해진 하나의 값으로만 사용되는 심볼릭 상수를 의미한다

구분 표현방법 설명
리터럴 상수
(이름이 없는 상수)
정수형
실수형
문자
문자열 상수
상수를 있는 그대로 기술 32, 0xf3, 10u
3.2F. 3.15E3
'A', '\n', '\0', '\24'
"부자되고싶다"
심볼릭 상수
(이름이 있는 상수)
const 상수 키워드 const를 이용해 변수 선언
수정할 수 없는 변수 이름으로 상수 정의
const double PI = 3.141592;
매크로 상수 전처리기 명령어 #define으로 다양한 형태을 정의 #define PI 3.141592
열거형 상수 정수 상수 목록 정의 enum bool {FALSE, TRUE|;

리터럴상수


정수형 리터럴 상수

표현방법

=> 정수를 그대로 표현

unsigned int형 상수 => u, U int형 상수
30u, 6754U -3, 40, +8000, -1234
unsigned long형 상수 => ul, UL long형 상수 =>
300000UL, 23456ul, 7834ul 367853345643L, 2345L, -7654L
unsigned long long형 상수 -> uul, UUL long longg형 상수
4200000ULL, 232356456ull, 7834ul 367853345643LL, -2345LL

 

진수표현

  • 10진수: 4, 5, 20
  • 8진수: 01,  013
  • 16진수: 0X1f, 0x1d
//10진수
printf("%d ", 30);		//=> 30
printf("%d ", 10);		//=> 10

//8진수
printf("%d ", 030);	//=> 24
printf("%d ", 010);	//=> 8

//16진수
printf("%d ", 0X2F); 	//=> 47
printf("%d ", 0x1b);	//=> 27

//모두 출력 값은 10진수로

 

 

 

실수상수

표현방법

=> e, E를 사용하여 10의 지수표현 방식으로 나타냄

  • 소수점 실수: 2.3, 2.13, 3.99
  • 지수표현 방식: 2.47E3, 12.82e-3
float f
F
3.14f
3354.9876F
long double l, L 4356.9876l
5635.876543L

 

%f => 소수점 6자리까지 출력

3.14E+2 => 3.14 X 10^2

3.14E-2 => 3.14 X 10^-2

printf("%f ", 3.14E+2);	//=> 314.00000

printf("%f ", 3.14E-2);	//=> 0.031400

 

 

 

문자상수

표현방법

  • 문자 하나의 앞 뒤에 작은따옴표(single quote)를 넣어 표현 => 'A'
  • 8진수 코드 값 이용 => \141
  • 16진수 코드 값 이용 => \x61

 

문자상수 출력

=> 함수 printf()에서 문자 상수를 출력하려면 형식 제어 문자열을 사용

  • 형식 제어 문자열(format control string): 함수 printf()의 첫 인자인 문자열, 형식제어문자가 포함되는 문자열
  • 형식제어문자(format control character): %c, %C와 같이 출력될 다른 값으로 대체되는 부분
printf("%C 안녕",'A');

//형식제어문자열: %C 안녕
//형식제어문자: %C

//출력: A 안녕

 

 

이스케이프 시퀀스

  • 역슬래쉬(\)와 문자의 조합으로 표현하는 문자
  • 주로 커서의 이동과 출력을 제어하는 문자
  • =특수문자=제어문자=확장문자

이스케이프 문자

제어문자
이름
영문 표현 코드값
(10진수)
\ddd
(8진수)
제어문자 의미
널문자 NULL 0 \000 \0 아스키코드 0번
경고 BEL(Bell) 7 \007 \a 경고음이 울림
백스페이스 BS(Back Space) 8 \010 \b 커서를 한 문자 뒤로 이동
수평탭 HT(Horizontal Tab) 9 \011 \t 커서를 수평으로 다음 탭만큼 이동
개행문자 LF(Line Feed) 10 \012 \n 커서를 다음 줄로 이동
수직탭 VT(Vertical Tab 11 \013 \v 수직으로 이동하여 탭만큼 이동
폼피드 FF(Form Feed) 12 \014 \f 새 페이지의 처음으로 이동
캐리지 리턴 CR(Carriage Return) 16 \015 \r 커서를 현재 줄의 처음으로 이동
큰따옴표 Double quote 34 \042 \" "
작은따옴표 Single quote 39 \047 \' '
역슬래쉬 Backslash 92 \134 \\ \

심볼릭 상수


const 상수

const 상수 선언

변수 선언 시 자료형(또는 변수) 앞에 키워드 const가 놓인 변수로 다른 변수와 구별하기 위해 관례적으로 모두 대문자로 선언한다

변수 선언 시 반드시 초기 값을 지정해야 하고, 초기 값을 수정할 수 없다

변수 선언 이후 초기 값을 수정하게 되면, 대입 문장에서 컴파일 오류 C2166이 발생한다

//const 상수 선언 방법 1
const double RATE1 = 0.022;

//const 상수 선언 방법 2
doublce const RATE2 = 99.333;

 

문자열을 const 상수에 저장하기

char* 변수에 저장하면 되는데 *는 포인터를 의미하는 문자로 나중에 더 자세히 알아보도록 하자!

반드시 const를 변수이름 앞에 적어야 한다

char* const title = "사는 게 쉽지가 않다 ㅎㅎ";

 

 

 

 

열거형 상수

열거형 상수는 키워드 enum을 사용하여 정수형 상수 목록 집합을 정의하는 자료형이다

enum 이후에 열거형 태그명을 적고, 중괄호를 사용해 열거형 정수 상수 목록을 쉼표로 분리하여 적는다

정의된 열거형 상수는 새로운 자료형으로 사용할 수도 있다

 

열거형 상수 만들기

열거형 상수에서 목록 첫 상수의 기본값은 0이고, 다음부터 1씩 증가하는 방식으로 상수값이 자동으로 부여된다.

enum 열거형태그명 {열거형상수1, 열거형상수2, 열거형상수3};
// 열거형상수1 => 0, 열거형상수2 => 2, 열거형상수3 =>3

enum DAY {SUN, MON, TUE, WED, THU, FRI, SAT};
// SUN => 1, MON => 2, TUE => 3, WED => 4, THU =>5, FRI => 6, SAT => 7}

enum boolean {FALSE, TRUE};

 

 

열거형 상수에서 값 지정하기

enum SHAPE {POINT, LINE, TRI = 3, RECT};

//POINT => 0
//LINE => 1
//TRI => 3
//RECT => 4

 

 

 

 

 

매크로 상수

전처리 지시자 #define에 의한 상수매크로 상수(macro constant)라고 하는데, 매크로 상수는 다른 일반 변수와 구분하기 위해 주로 대문자를 사용한다

//정수 매크로 상수
#define NUM 500000
#defien PI 3.14

전처리기(컴파일 전 처리작업을 담당하는 프로그램)는 소스에서 정의된 매크로 상수를 전부 #define 지시자에서 정의된 문자열로 대체하는데 자세한 내용은 다음에 알아보자!

 

매크로 상수는 라이브러리에서도 많이 활용이 되고 대표적으로 다음과 같은 것들이 있다

  • limits.h => 문자형과 정수형의 최대 최소 상수가 정의되어 있는 헤더파일
  • float.h => 부동소수형의 최대 최소 상수 정의
반응형