나는 당신이 소스 수준에서가 아니라 헤더 파일 (단지 같은 인터페이스를 유지해야한다), 같은 개입하는 것이 좋습니다 :
//Foo.h
class Foo{
void methodA();
void methodB();
};
//Foo.cpp
// common method
Foo::methodA() { }
#ifdef _DEBUG_
Foo::methodB() { }
#elif _PLATFORM_BAR_
Foo::methodB() { }
#else
Foo:methodB() { }
#endif
대신, 당신은 모든 것이 당신을 분리 유지하려면 높은 레버에서 작동해야하며, 전처리 기는 조건부로 .cpp 파일을 조건부로 포함하기에 충분하지 않습니다. 메이크 파일 또는 무엇을 사용하든 함께 작업해야합니다.
또 다른 선택은 간단하지 않을 때 특정 플랫폼에 사라 소스 파일을 가지고있는 하나가 될 수 예 :
//Foo.h
class Foo{
void methodA();
void methodB();
};
//FooCommon.cpp
void Foo::methodA() { }
//FooDebug.cpp
#ifdef _DEBUG_H
void Foo::methodB() { }
#endif
//FooRelease.cpp
#ifndef _DEBUG_H_
void Foo::methodB() { }
#endif
보통 이것은 # ifdef가 관련 코드를 지키도록 처리됩니다. 이것이 코드를 완전히 읽을 수 없게하는 결과를 가져 오는 경우, '실제'(다른 이름으로 지정된) 함수를 호출 할 때마다 이러한 가드 검사 만 포함하는 래퍼 함수를 항상 가질 수 있습니다. – jam