이번 항목은 간단하여 바로 질문을 들어가 본다.

1. 두개의 변수를 받아서 일반적인 < 비교 연산자를 이용해서 더 큰 값을 찾아내는 간단한 max를 작성해보고 함정이 무엇인지 찾아 보라.

.. 간단한 max 함수를 inline 화 시켜서 사용 하면 된다.

항목 2. #define을 쓰려거든 const, enum, inline을 떠올리자.

함정을 피해가기 위한 조언으로는

  1. 변수의 괄호를 잊지 말고 해 줘야 할 것
  2. 식 전체에 괄호를 잊지 말고 씌워 줄 것
  3. 다중 변수 계산을 조심 할 것
  4. 이름 바꿔 치기를 조심 할것

2. 전처리 매크로로 만들 수 없는 것은?

  1. 재귀 매크로가 없다는 것
  2. 메크로 주소가 없다는 것
  3. 매크로는 디버깅해서 쫒아 갈수 없다는 것


C++ 표준 16.3/8의 주석 7을 인용해 본다면 다음과 같이 된다고 한다.

매크로를 대처하기 전까지는 모든 문자 상수와 문자열 상수는 식별자와 같은 서브스퀸스를 가지지 않는 전처리 토큰이기 때문에 매크로 이름이나 매크로 매개변수로 스캔되지 않는다.

즉, 상수는 매크로 매개변수로 스캔되지 않는 다는 뜻이다. 하지만 이것은 표준일 뿐, 되는 컴파일러도 있다. 그러므로 호환성에 문제가 생길 수 있다는 점만 기억하면 좋을 듯 싶다.


총평

C++ 로 가면서 전처리를 써본적이 없어서 요점만 파악했다. ... 앞으로도 사용 안 할 것이다.

posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요