5.6.1 읽기 전용 오브젝트
상수(constant)와 오브젝트(object)란 용어를 헷갈리면 안 된다. C에서 상수는 특별한 의미가 있다. 예를 들어 앞의 코드에서 bird, pronoun, ordinal 등은 엄밀히 말해서 상수가 아니라 const로 선언한 오브젝트다. const 한정자(qualifier)C는 대상 오브젝트를 변경할 수 없도록 한다. 예를 들어 bird 배열에서 원소뿐만 아니라 스트링 값조차 수정할 수 없다. 만약 오브젝트를 수정하는 코드를 작성하면 컴파일러가 메시지를 출력한다.
TAKEAWAY 5.40 const로 지정한 오브젝트는 읽기 전용이다.
그렇다고 해서 컴파일러나 런타임 시스템이 이런 오브젝트 값을 전혀 못 바꾸는 것은 아니다. 프로그램의 다른 부분에서 이 오브젝트를 볼 수 있어서 함부로 바꿀 가능성이 있다. 비유하자면 은행 계좌의 잔액 정보를 수정할 수 없고 읽기만 가능하더라도 실제 잔액은 얼마든지 바뀔 수 있는 것과 같다.
또 다른 읽기 전용 오브젝트로 스트링 리터럴(string literal)이 있다.
TAKEAWAY 5.41 스트링 리터럴은 읽기 전용이다.
스트링 리터럴이 최근에 추가됐다면 const 한정 문자 배열인 char const[] 타입으로 정의됐을 것이다. 하지만 아쉽게도 const 키워드보다 한참 전에 스트링 리터럴이 추가됐기 때문에 하위 호환성을 위해 예전 상태 그대로 남아 있다.8
8 또 다른 읽기 전용 오브젝트로 임시 오브젝트(temporary object)가 있는데, 이는 13.2.2절에서 소개한다.