@ 상수 : 변경이 불가능한 수. 메모리 공간에 저장되어 있으나 코드상으로 접근할 방법이 없다.
@ 상수로 저장될 때 결정되어야 할 세가지 => 자료형이 무엇인가?
1. 정수형 또는 실수형 ?
2. 음수를 표현할 것인가(단 정수의 경우만, 실수 자료형에는 unsigned가 없다)
3. 몇 바이트로 표현할 것인가?
@ 정수형 상수는 int형으로 표현한다. 실수형 상수는 무조건 double형으로 표현한다.
@ 리터럴(Literal)상수와 심볼릭(Symbolic) 상수
int num = 10; 에서 위의 조건이 바뀌지 않는다면 num은 숫자를 의미하는 상수 즉 심볼릭 상수(symbolic:의미하는, 상징하는), 숫자 10은 그냥 그자신이 상수이기에 리터럴 상수(literal : 글자 그대로의)이다.
@ const 키워드를 변수의 선언 앞에서 사용하면 해당 변수에 초기화 된 값은 변경이 허용되지 않는다. 만약 변경하려하면 컴파일러가 에러를 발생시킨다. const상수는 대표적인 심볼릭 상수이다.
@ C언어는 초기화 값을 지정해 주지 않아서 쓰레기 값으로 초기화 된 경우에도 그 값의 변경을 허용하지 않는다.
@ 상수의 이름은 대문자로 한다. 둘 이상의 단어를 묶을 때에는 언더바(_)로 단어를 이어서 이름을 짓는 것이 프로그래머들사이의 지켜야할 암묵적 규칙이다.
@ 접미사 :
float f1 = 3.14; 라는 코드는 double형 상수를 float형 변수에 저장하여 데이터가 잘려나갈 수도 있다는 경고메시지를 컴파일 과정에서 보여줄 수 있다. 컴퓨터는 당연히 3.14를 8바이트 double형 상수로 생각(크기에 상관없이 무조건 double형으로 표현)하나 이값을 담는 변수 f1은 4바이트 float형이기에 데이터가 잘려나갈 수 있음을 경고한다. 이때는 3.14f 와 같이 접미사 f를 붙여 float형 상수로 자료형을 변경한다.
@ 접미사는 대소문자를 가리지 않는다.
@ 정수형 상수에 붙일 수 있는 접미사
접미사 | 자료형 | 예 |
U | unsigned int | unsigned int n = 1025U |
L | long | long n = 2467L |
UL | unsigned logn | unsigned long n = 3456UL |
LL | long long | long long n=5768LL |
ULL | unsigned long long | unsinged long long n=8979ULL |
@ 실수형 상수에 붙일 수 있는 접미사들
접미사 | 자료형 | 예 |
F | float | float f = 3.15F |
L | long double | long double = 5.789L |