한국어 어순에 맞는 C/C++ 변수 선언 읽기

Twitter icon류광, 2005-04-16 03:04

저번 달 글 간단한(?) 번역 문제 하나 에서 영어와 한국어 어순의 차이를 피해가는 이야기를 했었는데요. 비슷한 이야기 하나 더....(전에 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++ 어려운 선언문 해석하기"가 있습니다.

태그: 번역 프로그래밍 C++
comments powered by Disqus