[C언어] 상수 const의 이해
const int hr = 24; const int min = 60; const int sec = 60; void main() { printf("%d시간, %d분, %d초\n", hr, min, sec); }
프로그램 실행화면
나름 중요하다고 할 수 있는 상수개념이다. 변수는 변하는 수이고 상수는 정해진 수이다. 딱 박혀있는 것이다. 사실 #define과 매우 비슷하다.
const int 대신에 #define만 넣어주어도 똑같이 동작한다. 우선 #define과 const는 차이점을 가지고 있다. #define은 선언해 두면 어디서든지 사용할 수 있다.
반면에 const는 변수처럼 범위가 있다. 변수의 범위와 동일하다. 전역변수이면 전역에서 지역변수이면 지역에서만 사용할 수 있다. 좋고 나쁜게 아니라 차이점일 뿐이다.
범위를 중요하게 사용하는 C++에서는 #define보다는 const를 쓰는 버릇을 들일필요가 있다. 그리고 const는 타입을 지정해줄 수 있다. #define은 기계적으로 치환해줄 뿐이다.
실행하는 시점도 const는 컴파일에서 실행되지만 #deifne은 전처리기가 실행한다. 따라서 #define만이 주는 런타임애러를 경험하기도 하는데 사실 거의 경험하는 사람은 없다.
나도 경험해 보지 않았다. 왜냐하면 #define을 단순하게 사용하기 때문이다 :) 아무튼 const의 용도는 하나 더 있다. 인자로 포인터를 넘겨줄 경우 그 값이 변경되면 안되는 경우가 있다. 이럴 때 사용할 수 있는 것이 const이다.
char *strtok(char *strToken, const char *strDelimit);
문자열 자르기라고 하는 strtok()함수가 있다. 두번째 인자 앞에 const가 붙을 것을 볼 수 있다. strtok()함수 내에서 두 번째 인자값을 변경할 수 없도록 만든 것이다.