다음을 통해 공유


매크로(C/C++)

전처리기는 전처리기 지시문을 제외한 모든 줄에서 매크로를 확장하고 첫 번째 공백이 아닌 문자로 있는 # 줄을 확장합니다. 조건부 컴파일의 일부로 건너뛰지 않는 일부 지시문의 일부에서 매크로를 확장합니다. 조건부 컴파일 지시문을 사용하면 소스 파일의 일부 컴파일을 표시하지 않을 수 있습니다. 상수 식 또는 식별자를 테스트하여 컴파일러에 전달할 텍스트 블록과 전처리 중에 소스 파일에서 제거할 텍스트 블록을 결정합니다.

#define 지시문은 일반적으로 의미 있는 식별자와 자음, 키워드, 자주 사용되는 명령문 또는 수식과 연결하는 데 사용합니다. 상수의 식별자를 기호 상수 또는 매니페스트 상수라고도 합니다. 문이나 식을 나타내는 식별자를 매크로라고 합니다. 이 전처리기 설명서에서는 "매크로" 용어만 사용됩니다.

프로그램 원본 텍스트 또는 다른 특정 전처리기 명령의 인수에서 매크로의 이름이 인식되면 해당 매크로에 대한 호출로 처리됩니다. 매크로 이름은 매크로 본문의 복사본으로 교체됩니다. 매크로에서 인수를 수락할 경우 매크로 이름 다음의 실제 인수가 매크로 본문의 정식 매개 변수 대신 사용됩니다. 매크로 호출을 본문의 처리된 복사본으로 바꾸는 프로세스를 매크로 호출의 확장이라고 합니다.

실질적으로 두 가지 유형의 매크로가 있습니다. 개체와 유사한 매크로는 인수를 사용하지 않습니다. 함수와 유사한 매크로는 함수 호출처럼 보이고 작동하도록 인수를 허용하도록 정의할 수 있습니다. 매크로는 실제 함수 호출을 생성하지 않으므로 함수 호출을 매크로로 바꿔 프로그램을 더 빠르게 실행할 수 있습니다. (C++에서 인라인 함수는 종종 기본 메서드입니다.) 그러나 매크로를 정의하고 사용하지 않으면 문제가 발생할 수 있습니다. 괄호 안에 인수를 갖는 매크로 정의의 식에 적절한 우선 순위를 유지하기 위해 사용할 수 있습니다. 또한 매크로는 파생 작업이 있는 식을 올바르게 처리할 수 없습니다. 자세한 내용은 getrandom #define 지시문의 예제를 참조하세요.

매크로를 정의한 후에는 원래 정의를 먼저 제거하지 않고 다른 값으로 다시 정의할 수 없습니다. 하지만 매크로를 정확히 동일한 정의로 재정의할 수 있습니다. 따라서 동일한 정의가 프로그램에 두 번 이상 나타날 수 있습니다.

지시문은 #undef 매크로의 정의를 제거합니다. 정의를 제거한 후에는 매크로를 다른 값으로 다시 정의할 수 있습니다. #define 지시문#undef 지시문은 각각 및 #undef 지시문에 #define 대해 설명합니다.

자세한 내용은 다음 항목을 참조하세요.

참고 항목

C/C++ 전처리기 참조