2017-02-01 8 views
3

일부 선이 소스 코드의 내 전 처리기 블록에 흐리게 표시되어 있습니다 (). 내 컴파일러, MS Visual Studio에서 "비활성 사전 처리기 블록"이라고 이름 지정. 이것이 의미하는 바는, 내 컴파일은 이러한 코드 라인을 고려하지 않고, 을 어떻게 활성화 블록으로 만들 것인가?C에서 "비활성"전 처리기 블록의 의미는 무엇입니까?

답변

6

비활성 사전 처리기 블록은 전 처리기 지시문으로 인해 비활성화 된 코드 블록입니다. 가장 간단한 예는 다음

#if 0 
//everytyhing here is inactive and will be ignored during compilation 
#endif 

더 일반적인 예로,이 경우

#ifdef SOME_VAR 
// code 
#else 
// other code 
#endif 

첫 번째 또는 두 번째 코드 블록 SOME_VAR가 정의되었는지 여부에 따라 비활성 것 중 하나 일 것이다.

+0

내가 그것을 가지고, 당신이 너무 감사합니다 –

1

질문을 정교하게 만들기 위해 만들어진 가상의 예를 확인하십시오.

#include <iostream> 
#include <windef.h> 

#define _WIN32 

int add(int n1, int n2){return n1 + n2;} 

LONGLONG add(LONGLONG n1, LONGLONG n2){return n1 + n2;} 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
#ifdef _WIN32 
    int val = add(10, 12); 
#else 
    LONGLONG = add(100L, 120L);//Inactive code 
#endif // _WIN32 
    return 0; 
} 

_WIN32가 #else pre-processor directive의 코드가 정의되어 있고 컴파일되지 않았 음을 알 수 있습니다. 역 동작을 보려면 _WIN32를 정의 해제 할 수 있습니다. 첨부 된 MS Visual Studio의 스크린 샷을보십시오. 빨간색 줄은 비활성화 된 코드입니다. 이 도움이 될

enter image description here

희망.

1

전처리 기는 프로그램 변환의 가장 초기 단계 중 하나입니다. 컴파일 단계가 시작되기 전에 프로그램 소스를 수정할 수 있습니다. 그렇게하면 다양한 제약 조건에 따라 다르게 빌드하도록 소스를 구성 할 수 있습니다. 전처리 조건 블록의

용도는 다음과 같습니다

  1. 는 완전히 코드를 주석 :

    #if 0 
    // The code here is never compiled. It's "commented" away 
    #endif 
    
  2. 것은

    #if defined(WIN32) 
        //Implement widget with Win32Api 
    
    #elif defined(MOTIF) 
        // Implement widget with Motif framework 
    
    #else 
        #error "Unknown platform" 
    #endif 
    
  3. 가지고 platfrom 같은 다양한 제약 조건에 따라 서로 다른 구현을 제공합니다과 같은 매크로다른 방식으로 작동합니다.

  4. 확인 유용한 추상화가 적절하게 정의된다

    #if PLATFORM_A 
        typedef long int32_t; 
    #elif PLATFORM_B 
        typedef int int32_t;