다음을 통해 공유


/D(전처리기 정의)

소스 파일에 대한 전처리 기호를 정의합니다.

구문

/D[ ]name[= | # [{ string | number }] ]
/D[ ]"name[= | # [{ string | number }] ]"

설명

이 기호를 #if 또는 #ifdef와 함께 사용하여 조건에 따라 소스 코드를 컴파일할 수 있습니다. 기호 정의는 코드에서 다시 정의되거나 지시문에 의해 #undef 코드에 정의되지 않을 때까지 계속 적용됩니다.

/D 소스 코드 파일의 시작 부분에 있는 #define 지시문과 동일한 효과가 있습니다. 차이점은 명령줄에서 따옴표를 제거하고 지시문이 #define 이를 유지한다는 /D 것입니다. 기호와 기호 사이에 공백을 /D 둘 수 있습니다. 기호와 등호 사이에는 공백이 있거나 등호와 할당된 값 사이에 공백이 있을 수 없습니다.

기호와 관련된 값은 기본적으로 1입니다. 예를 들어 /D name/D name=1와 같습니다. 이 문서의 끝에 있는 예제에서는 정의 TEST 가 인쇄 1되도록 표시됩니다.

기호 이름을 사용하여 /D name= 컴파일하면 연결된 값이 없습니다. 기호를 사용해 조건에 따라 코드를 컴파일할 수 있지만 그렇지 않은 경우 기호가 어떤 값으로도 계산되지 않습니다. 예제에서 사용하여 /DTEST=컴파일하는 경우 오류가 발생합니다. 이 동작은 값을 사용하거나 사용하지 않을 때에도 #define을 사용할 때의 동작과 비슷합니다.

/D 옵션은 함수와 유사한 매크로 정의를 지원하지 않습니다. 명령줄에 정의할 수 없는 정의를 삽입하려면 (강제 포함 파일 이름 지정) 컴파일러 옵션을 고려 /FI 합니다.

명령줄에서 여러 번 사용하여 /D 더 많은 기호를 정의할 수 있습니다. 동일한 기호가 두 번 이상 정의되면 마지막 정의가 사용됩니다.

이 명령은 TEST.c에서 DEBUG 기호를 정의합니다.

CL /DDEBUG TEST.C

이 명령은 TEST.c에 있는 모든 __far 키워드를 제거합니다.

CL /D __far= TEST.C

CL 환경 변수는 등호가 포함된 문자열로 설정할 수 없습니다. 환경 변수와 함께 CL 사용 /D 하려면 등호 대신 숫자 기호(#)를 지정해야 합니다.

SET CL=/DTEST#0

명령 프롬프트에서 전처리 기호를 정의하면 컴파일러 구문 분석 규칙과 셸 구문 분석 규칙을 모두 수행하는 것이 좋습니다. 예를 들어 프로그램에서 백분율 기호 전처리 기호(%)를 정의하려면 명령 프롬프트에서 두 개의 퍼센트 기호 문자(%%)를 지정합니다. 하나만 지정하면 구문 분석 오류가 내보내집니다.

CL /DTEST=%% TEST.C

Visual Studio 개발 환경에서 이 컴파일러 옵션을 설정하려면

  1. 프로젝트 속성 페이지 대화 상자를 엽니다. 자세한 내용은 Visual Studio에서 컴파일러 및 빌드 속성 설정을 참조합니다.

  2. 구성 속성>C/C++>전처리기 속성 페이지를 선택합니다.

  3. 전처리기 정의 속성의 드롭다운 메뉴를 열고 편집을 선택합니다.

  4. 전처리기 정의 대화 상자에서 한 줄당 하나 이상의 정의를 추가, 수정 또는 삭제합니다. 확인을 선택하여 변경 내용을 저장합니다.

    여기에 지정한 정의에 '/D' 옵션 접두사를 포함할 필요가 없습니다. 속성 페이지에서 정의는 세미콜론(;)으로 구분됩니다.

프로그래밍 방식으로 이 컴파일러 옵션을 설정하려면

예시

// cpp_D_compiler_option.cpp
// compile with: cl /EHsc /DTEST cpp_D_compiler_option.cpp
#include <stdio.h>

int main( )
{
#ifdef TEST
    printf_s("TEST defined %d\n", TEST);
#else
    printf_s("TEST not defined\n");
#endif
}
TEST defined 1

참고 항목

MSVC 컴파일러 옵션
MSVC 컴파일러 명령줄 구문
/FI (이름 강제 포함 파일)
/U, /u (정의되지 않은 기호)
#undef 지시문(C/C++)
#define 지시문(C/C++)