2009-06-15 2 views
2

크로스 플랫폼 프로젝트에서 작업 할 때 대부분 코드에서 #ifdef 블록이 많이 발생합니다. 이것은 실제로 매우 성가신 일이며 코드를 읽기 어렵게 만듭니다.Visual Studio : ifdef 블록 숨기기

비 관련 ifdef 블록을 숨기는 방법이 있는지 궁금합니다.

do A 

답변

3

내 대답은 정확히 당신이 찾고있는 것이 아니지만, 내가 아는 한 최선의 것입니다.

Visual Studio 2005에서는 개요 도구를 사용하여 #ifdef 블록의 사용하지 않는 부분을 축소 할 수 있습니다.

OS 고유 코드를 자체 파일로 분리하고 #ifdef 블록과 중요한 부분 (즉 완전한 선언)을 포함하는 마스터 파일을 사용하여 플랫폼간에 변경하지 않는 것이 좋습니다.

또 다른 조건은 가능한 경우 조건부 블록 코드를 단순히 그룹화하는 것입니다. 코드 순서가 그다지 중요하지 않은 경우가 많으며 코드를 그룹화 할 수 있습니다.

파일을 참조 자료로 사용하려는 경우 수행 할 수있는 다른 작업은 조건부 블록 만 처리하고 조건부 블록을 처리하는 데 필요하지 않은 모든 사항은 무시하는 전 처리기를 통해 파일을 실행하는 것입니다.

0
:

#ifdef _PC_ 
do a 
#else 
do b 
#endif 

_PC_ 경우가 정의 도구/플러그인 만이 표시되어야합니다 : 난 당신이 코드가있는 경우, 예를 들어, 비주얼 스튜디오 2005

을 사용하고 있습니다

그냥 다음 처리기 지시문 사용 : 내가 볼 (및 사용) 한

#region IfDef 
    #ifdef PC 
     doSomethingCalledA(); 
    #else 
     doSomethingCalledB(); 
    #endif 
#endregion 
+0

문제는 모든 파일에 대해 수행해야한다는 것입니다. – tep

+0

오, 음, 다음 프로젝트에 대한 생각을 유지하십시오 ;-) – Kredns

1

가장 깨끗한 방법 Strategy Pattern을 사용하면 플랫폼 별 코드를 별도의 전략 클래스로 추상화 할 수 있습니다.

예 :

class MyAbstractClass 
{ 
    static MyAbstractClass Create() 
    { 
     #ifdef win32 
     return new WindowsClass(); // this could be a shared_ptr 
     #else 
     return new PosixClass(); 
     #endif 
    } 
    virtual method MyMethod() = 0; 
} 

// windows_class.cpp 
class WindowsClass : public MyAbstractClass 
{ 
    virtual method MyMethod() 
    { 
     // platform specific code here 
    } 
} 

// posix_class.cpp 
class PosixClass : public MyAbstractClass 
{ 
    virtual method MyMethod() 
    { 
     // platform specific code here 
    } 
} 
0

각각에 정의 된 해당 매크로를 사용하여 작업중인 각 플랫폼에 대한 솔루션을 설정하십시오. 모든 솔루션에 소스 파일을 포함하십시오. 그런 다음 현재 솔루션의 플랫폼과 일치하지 않는 코드 섹션을 찾아 축소합니다.

Visual Studio에서는 솔루션별로 축소 된 섹션 설정을 저장하므로 열려있는 프로젝트에 따라 다른 확장 코드가 표시됩니다. 나는 이것이 * .suo 파일에 저장되어 있다고 생각한다.

1

나는 당신이 요구 한 것에 대하여 제안 할 것입니다. 코드가 멀티 플랫폼이라는 사실을 숨기면 쉽게 접할 수있는 코드를 인식하지 못하고 다른 플랫폼으로 변경해야합니다.

예를 들어, do a 줄 바로 다음에 줄을 추가하면 어떻게됩니까? 블록 내부 또는 외부에 있는지 어떻게 알 수 있습니까? 추가 한 새 줄은 다른 구역에 적절한 대체 줄이 필요할 수도 있습니다. 또는 블록 밖으로 나가면 다른 버전을 알지 못해도 깨질 수 있습니다.

불편한 것처럼 보일지 모르지만 그게 언어입니다.언어 디스플레이에 익숙해 지려면 디자인 방식에 익숙해 져야하며, 다른 사람들이 선호하는 방식으로 해킹하려고 시도하는 것보다 다른 방식으로 사용하는 것이 가장 좋습니다.

관련 문제