들어가며
const float PI = 3.14
보통 변하지 않는 상수값을 정의하기 위해 변수의 자료형 앞에 const를 사용합니다. 포스팅을 하기 위해 코딩도장을 살펴보니 const의 위치가 자료형 뒤로 가도 된다고 하더군요. 신기하지만 딱히 활용할 일은 없을 것 같습니다. 컨벤션을 지켜야겠죠!
오늘 알아볼 것은 일반적인 변수에 사용하는 const가 아닙니다. 함수들의 원형을 살펴보면 많은 함수들이 매개변수의 자료형에 const를 사용합니다. 왜 함수의 매개변수의 자료형에 const를 붙이는지 궁금해서 정리하다가 포스팅을 하게 되었습니다.
어떤 함수의 매개변수에 const를 사용했을까?
int atoi(const char *nptr);
int strncmp(const char *s1, const char *s2, size_t len);
size_t strlen(const char *s);
size_t strlcpy(char *restrict dst, const char *restrict src, size_t dstsize);
size_t strlcat(char *restrict dst, const char *restrict src, size_t dstsize);
라이브러리에 있는 함수들 중 일부 함수의 원형을 가져와봤습니다.
살펴보면, const 키워드가 붙은 매개변수의 공통점은 포인터이고, 특정 함수를 수행하기 위해 필요한 기존에 존재하는 source라는 것입니다. 여기서 source를 한국어로 어떻게 표현하면 좋을까요? 객체 개념이 존재하는 언어의 경우, 객체라고 표현해도 좋을 것 같습니다.
결론부터 말씀드리자면, const를 사용하는 이유는 특정 함수에 전달하는 포인터(source)의 내용이 훼손되는 것을 방지하기 위해서입니다. 다른 함수에 포인터가 전달될 경우, call-by-value가 아닌 call-by-reference 형태로 전달되므로 다른 함수 내에서 포인트의 값을 임의로 조작할 수 있습니다. 매개변수로 받은 포인터의 값을 수정하는 것이 함수의 본래 의도가 아니라면, const를 꼭 붙여줘야 합니다.
실제로 저 위에 예시로 든 함수 5개 또한 매개변수로 넘겨주는 포인터들은 변해서는 안 되는 값들입니다.
'Dev > C' 카테고리의 다른 글
[C언어] 코드로 알아보는 산술 연산자 (0) | 2020.06.26 |
---|---|
[C언어] scanf 정리 (0) | 2020.06.25 |
[C언어] 변수와 자료형, 그리고 상수 (0) | 2020.06.20 |
[C언어] 문자 자료형과 아스키 코드(ASCII) (1) | 2020.06.19 |
[C언어] 실수형 변수 출력 시 소수점 자릿수 조절 (반올림/올림/내림) (0) | 2020.06.17 |