한국어 어순에 맞는 C/C++ 변수 선언 읽기
저번 달 글 간단한(?) 번역 문제 하나 에서 영어와 한국어 어순의 차이를 피해가는 이야기를 했었는데요. 비슷한 이야기 하나 더....(전에 GpgStudy 포럼에서 한 번 이야기했던 것에 조금 살을 붙인 것입니다).
포인터나 const 등이 끼어들어 있는 C/C++ 변수 선언은 이해하기가 어려운 경우가 있는데, 오른쪽에서 왼쪽으로 읽으면 의미가 명확해지곤 합니다. 예를 들어 상수 포인터와 상수에 대한 포인터는 다음처럼 구별하면 됩니다.(편의 상 관사 생략)
int const * p; => p * const int
=> p is pointer to const int.
int * const p; => p const * int
=> p is const pointer to int.
is와 pointer to만 적당히 넣어주면 됩니다.
한국어의 경우에는 보통의 순서대로, 즉 왼쪽에서 오른쪽으로 읽으면 됩니다.
int const * p; => int 상수를 가리키는 포인터, p.
int * const p; => int를 가리키는 포인터 상수, p.
*
를 "~를 가리키는 포인터"로 대체하고 const
를 "상수"로 대체한 것입니다.
이런 읽기 방식의 핵심은 아무 생각 없이 기계적으로 읽기만 해도 문장이 만들어져야 한다는 점입니다. 뭔가 생각을 해야 한다면 그냥 선언문을 분석하는 게 더 나을테니까요.
이런 보통의 변수는 기계적으로 읽는 게 가능한데, 안타깝게도 배열이나 함수 포인터는 딱 맞아떨어지지 않습니다. 배열이나함수 포인터 선언은 선언이 새로 도입하는 이름이 선언문의 끝이 아니기 때문이죠(사실 선언문은 그 선언문이 새로 도입하는 이름이 무엇인지만 알면 70%는 풀린 것이라고 해도 될 것입니다....).
좀 더 본격적인 선언문 읽기에 대한 글로는 KLDP BBS의 "C/C++ 어려운 선언문 해석하기"가 있습니다.