일부 선이 소스 코드의 내 전 처리기 블록에 흐리게 표시되어 있습니다 (). 내 컴파일러, MS Visual Studio에서 "비활성 사전 처리기 블록"이라고 이름 지정. 이것이 의미하는 바는, 내 컴파일은 이러한 코드 라인을 고려하지 않고, 을 어떻게 활성화 블록으로 만들 것인가?C에서 "비활성"전 처리기 블록의 의미는 무엇입니까?
3
A
답변
6
비활성 사전 처리기 블록은 전 처리기 지시문으로 인해 비활성화 된 코드 블록입니다. 가장 간단한 예는 다음
#if 0
//everytyhing here is inactive and will be ignored during compilation
#endif
더 일반적인 예로,이 경우
#ifdef SOME_VAR
// code
#else
// other code
#endif
첫 번째 또는 두 번째 코드 블록 SOME_VAR
가 정의되었는지 여부에 따라 비활성 것 중 하나 일 것이다.
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의 스크린 샷을보십시오. 빨간색 줄은 비활성화 된 코드입니다. 이 도움이 될
희망.
1
전처리 기는 프로그램 변환의 가장 초기 단계 중 하나입니다. 컴파일 단계가 시작되기 전에 프로그램 소스를 수정할 수 있습니다. 그렇게하면 다양한 제약 조건에 따라 다르게 빌드하도록 소스를 구성 할 수 있습니다. 전처리 조건 블록의
용도는 다음과 같습니다
는 완전히 코드를 주석 :
#if 0 // The code here is never compiled. It's "commented" away #endif
것은
#if defined(WIN32) //Implement widget with Win32Api #elif defined(MOTIF) // Implement widget with Motif framework #else #error "Unknown platform" #endif
가지고 platfrom 같은 다양한 제약 조건에 따라 서로 다른 구현을 제공합니다과 같은 매크로다른 방식으로 작동합니다.
확인 유용한 추상화가 적절하게 정의된다
#if PLATFORM_A typedef long int32_t; #elif PLATFORM_B typedef int int32_t;
내가 그것을 가지고, 당신이 너무 감사합니다 –