Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

C++에서 #define 전처리기란 무엇이고 어떻게 사용할까?

#define은 매크로(macro)를 정의하는 전처리기 지시문입니다. 매크로란 식별자(identifier) 또는 매개변수화된 식별자를 특정 토큰 문자열(token string)과 연결해 놓은 것을 의미합니다.

매크로가 한 번 정의되면 컴파일러는 소스 파일 내에서 해당 식별자가 나타나는 모든 위치를 정의된 토큰 문자열로 자동 치환합니다. 즉, 코드가 실제로 컴파일되기 전에 전처리기(preprocessor) 단계에서 텍스트 치환이 일어나는 것입니다.

#define 기본 문법

#define identifier token-string

#define의 동작 방식

#define 지시문은 컴파일러가 소스 파일에서 identifier가 등장할 때마다 이를 token-string으로 대체하도록 만듭니다. 다만, 식별자는 독립적인 토큰(token)을 형성할 때만 치환됩니다.

즉, 다음과 같은 경우에는 식별자가 치환되지 않습니다.

  • 주석(comment) 안에 나타나는 경우
  • 문자열(string) 리터럴 안에 포함된 경우
  • 더 긴 식별자의 일부로 사용되는 경우

예제 코드

#include<iostream>
#define MY_VAR 55
using namespace std;

int main() {
    int x = 10;
    cout << x + MY_VAR;   // 전처리 후 이 표현식은 x + 55로 변환됩니다.
    return 0;
}

실행 결과

위 코드를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.

65

위 예제에서 MY_VAR은 값 55로 정의된 매크로입니다. 전처리기가 실행되면 x + MY_VAR라는 표현식은 x + 55로 치환되며, 따라서 10 + 55인 65가 출력됩니다.

#define 활용 시 참고 사항

#define은 상수 정의뿐만 아니라 함수처럼 동작하는 함수형 매크로(function-like macro)를 만드는 데에도 사용할 수 있습니다. 하지만 현대 C++에서는 타입 안정성이 보장되는 const, constexpr, inline 함수 등을 사용하는 것이 권장됩니다.

#define 지시문에 대한 더 자세한 내용은 MSDN 문서(https://docs.microsoft.com/en-us/cpp/preprocessor/hash-define-directive-c-cpp)에서 확인할 수 있습니다.