# if, # elif, else, # 및 # endif 지시문 (C/C++)

#if 지시문에 #elif, #else, 및 #endif 지시문을 컨트롤 컴파일 소스 파일의 일부입니다.식을 작성 하는 경우 (후의 #if) 0이 아닌 값의 바로 다음 행 그룹의 #if 지시문 번역 단위에서 유지 됩니다.

문법

  • 조건부 :
    if 부분 elif 부품선택else 부분은수신 동의endif 선

  • 일부 경우에 :
    if 줄 텍스트

  • if 줄 :
    # if 상수 식

    # ifdef 식별자

    #ifndef 식별자

  • elif 부품 :
    elif 줄 텍스트

    elif 부품 elif 줄 텍스트

  • elif 줄 :
    # elif 상수 식

  • else 부분은 :
    else 줄 텍스트

  • 다른 선 :
    #else

  • endif 줄 :
    #endif

각 #if 지시문은 소스 파일에 닫는 일치 해야 합니다 #endif 지시문입니다.다양 한 #elif 지시문 사이의 나타날 수 있는 #if 및 #endif 지시문을 있지만 최대 하나의 #else 지시어를 허용 하는.#else 지시문에 있는 경우 있어야 전에 마지막 지시문 #endif.

#if, #elif, #else, 및 #endif 지시문의 텍스트 부분에 중첩 될 수 있습니다 #if 지시문입니다.각 중첩 된 #else, #elif, 또는 #endif 지시문에 속한 가장 가까운 앞에 #if 지시문입니다.

모든 조건부 컴파일 지시문을 같이 #if 및 # ifdef, 닫는와 일치 해야 #endif 지시문 전에 파일의 끝입니다. 그렇지 않으면 오류 메시지가 생성 됩니다.조건부 컴파일 지시문 포함 파일에 포함 되어 있는 동일한 조건을 충족 해야 합니다: 없음 일치 하지 않는 조건부 컴파일 지시문의 포함 파일의 끝에 있어야 합니다.

매크로 대체는 뒤에 오는 명령줄 부분은 내에서 수행 됩니다를 #elif 매크로 호출에 사용할 수 있도록 명령에 상수 식.

전처리기의 지정 된 항목 중 하나를 선택 텍스트 추가 처리 합니다.지정 된 블록 텍스트 의 텍스트 구성 된 시퀀스입니다.이 두 개 이상 한 줄을 차지할 수 있습니다.일반적으로 텍스트 의미가 컴파일러 또는 전처리기 프로그램 텍스트입니다.

전처리기는 선택한 처리 텍스트 하 여 컴파일러에 전달 합니다.경우 텍스트 전처리기 지시문이 지시문은 전처리기 수행을 포함 합니다.전처리기에서 선택한 텍스트 블록만 컴파일됩니다.

전처리기는 하나의 선택 텍스트 항목에서 각 다음 상수 식을 계산 #if 또는 #elif 상수 식이 true (0이 아닌)을 찾을 때까지 지시문입니다.모든 텍스트를 선택 (시작 기타 전처리기 지시문을 포함 하 여 #)에 관련 #elif, #else, 또는 #endif.

경우 모두 상수 식 이 인수 하거나 없는 경우 #elif 를 텍스트 블록 이후에 선택 하는 전처리기 지시문의 #else 절.경우는 #else 절을 생략 및 모든 인스턴스를 상수 식 에 #if 블록이 거짓 된, 없음 텍스트 블록을 선택 합니다.

해당 상수 식 정수 상수 식을 사용 하 여 이러한 추가 제한 됩니다:

  • 식이 정수 계열 형식이 있어야 합니다 및 문자 상수 정수 상수만 사용할 수 있습니다 하는 정의 된 연산자입니다.

  • 식을 사용할 수 없습니다 sizeof 또는 형식 캐스트 연산자입니다.

  • 대상 환경의 모든 범위의 정수를 나타낼 수 있습니다.

  • 변환 유형을 나타내는 int 형식과 , 및 unsigned int 와 같은 unsigned long.

  • 번역자는 문자 상수 집합을 다른 집합의 대상 환경에 대 한 코드 값을 변환할 수 있습니다.대상 환경의 등록 정보를 확인 하려면 한도에서 매크로의 값을 확인 하십시오.H을 대상 환경에 대해 작성 된 합니다.

  • 식이 모든 환경적 조회를 수행 해야 합니다 및 구현 세부 사항에 있는 대상 컴퓨터 로부터 절연 상태를 유지 해야 합니다.

전처리기 연산자 정의 된 는 다음 구문에서와 같이 특별 한 상수 식에 사용할 수 있습니다.

defined( identifier )

정의identifier

것이 상수 식으로 간주 됩니다 true (0이 아닌 값) 하는 경우는 식별자 현재 정의입니다. 그렇지 않은 경우 조건이 false입니다 (0)입니다.텍스트를 빈 것으로 간주 되는 식별자를 정의 합니다.정의 지시문에서 사용할 수 있는 #if 하는 #elif 지시문을 되지만 다른 위치.

다음 예제에서는 #if 및 #endif 지시문 제어 컴파일하는 세 가지 함수 호출 중 하나:

#if defined(CREDIT)
    credit();
#elif defined(DEBIT)
    debit();
#else
    printerror();
#endif

함수 호출에 credit 경우 컴파일되는 식별자 CREDIT 정의 됩니다.경우 식별자 DEBIT 정의 된 함수 호출을 debit 컴파일됩니다.두 식별자가 정의 된 경우 호출을 printerror 컴파일됩니다.참고 CREDIT 및 credit 의 경우 서로 다르기 때문에 C 및 C++ 고유 식별자입니다.

다음 예제에서는 조건부 컴파일 문에서 라는 미리 정의 된 기호 상수 가정 DLEVEL.

#if DLEVEL > 5
    #define SIGNAL  1
    #if STACKUSE == 1
        #define STACK   200
    #else
        #define STACK   100
    #endif
#else
    #define SIGNAL  0
    #if STACKUSE == 1
        #define STACK   100
    #else
        #define STACK   50
    #endif
#endif
#if DLEVEL == 0
    #define STACK 0
#elif DLEVEL == 1
    #define STACK 100
#elif DLEVEL > 5
    display( debugptr );
#else
    #define STACK 200
#endif

첫 번째 #if 두 가지 블록을 보여 줍니다 중첩 된 #if, #else, 및 #endif 지시문입니다.경우에 첫 번째 집합을 지시문 처리 됩니다 DLEVEL > 5 마찬가지입니다.그렇지 않으면 문을 후 #사람 처리 됩니다.

#elif 및 #else 지시문의 두 번째 예제에서는 값을 기준으로 하 여 4 개 중 하나를 확인 하는 데 사용 됩니다 DLEVEL.상수 STACK 0, 100, 200, 정의에 따라 설정 된 DLEVEL.경우 DLEVEL 5, 고 문을 보다 큽니다

#elif DLEVEL > 5
display(debugptr);

컴파일 및 STACK 정의 되지 않았습니다.

일반적으로 조건부 컴파일을 사용 동일한 헤더 파일을 여러 개 포함 되지 않도록 하는 것.여기서 클래스 종종 헤더 파일에 정의 된 C++의 여러 정의 방지 하기 위해 다음과 같은 구문은 사용할 수 있습니다.

/*  EXAMPLE.H - Example header file  */
#if !defined( EXAMPLE_H )
#define EXAMPLE_H

class Example
{
...
};

#endif // !defined( EXAMPLE_H )

앞의 코드 인지 확인 하는 기호화 된 상수 EXAMPLE_H 정의 됩니다.그렇다면 파일이 이미 포함 되어 있습니다 및 다시 처리 해야 합니다.상수, 경우 EXAMPLE_H 예제를 표시 하려면 정의 됩니다.H는 이미 처리 합니다.

참고 항목

참조

전처리기 지시문