나의 IT일지
상수와 키워드 본문
우리가 프로그래밍을 하게 되면 변수에 값을 넣고, 값을 수정하는 경우가 많아진다. 하지만 변수에 값을 넣었는데, 변화하면 안되는 경우도 존재한다. 우리는 어떻게 변하지 않는 값을 만드는지 알아 봐야 한다.
상수의 이해
변수의 초기값을 바꿀수 없도록 하는 것을 변수의 상수화라고 한다. 그렇다면 이 상수라는 것이 도대체 무엇일까? 상수란, 변하지 않는 값, 값 자체가 고정되어서 있어서 변화시킬 수 없는 값을 말한다. 상수의 종류는 다음과 같다.
- 리터널 상수
- 심볼릭 상수
리터널 상수는 값 자체가 "고정"되어 있는 값으로, 항상 유지되는 기본데이터이다. 평소에 쓰는 숫자와 문자가 리터널 상수라고 생각하면 된다.
- 정수형상수 : 정수의 형태를 가진 상수 ex)1,2,3,-1,-2
- 실수형 상수 : 실수의 형태를 가진 상수 ex)3.14,1.3,-1.3
- 문자형 상수: 문자의 형태를 가진 상수 ex)'A','B','C'
심볼릭 상수는 변수에 리터널상수나 수식을 저장한 후, 변경되지 않도록 만든 상수이다. 즉, 변수의 초기값을 변경할 수 없는 것이다.
- const 자료형 변수명 = 초기값; : 변수의 초기값이 변경되지 않고 고정된다.
- #define 매크로명 값or수식or명령어 : 기호를 만드는 전처리기로, 매크로명을 값or 수식이라는 뜻으로 재정의한다. 이때 매크로명은 대문자를 주로 사용하며, 이때 만들어지는 기호는 변수와는 다르다.
심볼릭 상수는 반드시 선언하는 동시에 초기값을 설정(초기화)을 해야한다. 만일 초기화를 하지 않는다면, 초기값을 설정하지 않았다는 경고문이 나타나게 된다. 이제 심볼릭 상수를 만드는 소스코드의 예시를 보자.
#include <stdio.h>
void main() {
const float PI = 3.14;
int radius;
printf("radius = ")
scanf("%d", &radius);
printf("%d*3.14*2=%f\n", radius, radius * PI*2);
}
#include <stdio.h>
#define PI 3.14
void main() {
int radius;
float circum;
printf("radius = ");
scanf("%d", &radius);
circum = radius * PI * 2;
printf("%d*3.14*2=%f\n",radius,circum);
}
위의 소스코드를 보면, PI라는 변수에 3.14의 값을 저장하게 했으며, 값을 고정시킨것을 확인할 수 있다. 만약 PI의 값을 바꾸려는 코드가 작성될 경우, 오류가 발생했다는 문구가 나타난다.
하나의 코드는 "const"를 사용하고 다른 하나는 "#define"를 사용하는 것을 알 수 있다. 그렇다면 둘의 차이점은 무엇일까?
"const"는 소스코드를 실행할때, 변수에 저장된 값이 해당 값으로 고정되는 것이며, "#define"은 소스코드가 실행 되기전에, 값을 해당 기호로 재정의하는 것이다.
이때, "#define"은 전처리기로, 컴파일하기 전에 "PI"를 "3.14"로 먼저 치환해야 한다고 알리는 문자이다. 그래서 두번째 소스코드를 보게 되면, 라이브러리를 불러오고, PI를 3.14라고 기호화를 한 뒤에, main함수를 실행한다는 것을 알 수 있다.
키워드
키워드란 프로그램에서 이미 뜻이 정해져있어 사용방법이 약속되고 있는 단어를 말한다. 예약어라고도 부르며, 모든 함수는 뜻이 정해져 있기에, 키워드이다.
- int, unsigned short, double, define, include...
반대로 필요에 따라 만들어 사용하는 단어가 있는데, 이를 식별자라고 부른다. 모든 변수명은 개발자가 인위적으로 만들어 사용하기 때문에, 식별자라고 생각하면 된다.
'프로그래밍 언어 > C언어' 카테고리의 다른 글
입력함수 scanf (0) | 2023.02.04 |
---|---|
출력함수 printf (0) | 2023.02.03 |
변수와 자료형 (0) | 2023.02.01 |
C언어 프로그래밍의 기본 (1) | 2023.01.31 |
Visual studio 2019 설치 (0) | 2023.01.30 |