2011-01-31 2 views
1

컴파일러에서 C++ 프로그램을 어떻게 작동시키는 지 알고 싶었습니다. 나는 프로그램을 만들고 싶었다. 그래서 만약 borland로 컴파일된다면 clrscr() 함수를 사용하고, 그렇지 않으면 system("CLS")을 사용할 것이다. 비슷한 것을 한 코드를 보았지만 그것이하는 일이나 작동 방식에 대한 설명을 찾을 수 없었습니다. 어떤 도움을 주시면 감사하겠습니다.컴파일러에서 C++ 프로그램 작동 방법

답변

0

다른 컴파일러에서 어떻게 작동하는지 간단하게 묻는 질문은 매우입니다. 화면 지우기에 대한 구체적인 질문.

내가 먼저 당신이 당신의 자신의 기능을

 void clear_screen(); 

말을하고 같이 그것을 정의, 이런 식으로 시도합니다 :

 void clear_screen() 
     { 
     #ifdef LINUX 
      ... 

     #eleif MS_WIN 

      ... 
     #endif 
     } 

난 그냥 짐작 있습니다 무엇 #DEFINE의 아르. 이것은 일반적으로 악으로 간주되는 조건부 합병증으로 알려져 있지만 기능에 포함 시키면 해를 조금 줄입니다.

+0

조건부 컴파일 (물론 COMPILER_ONE 및 관련 정의 :)으로 COMPILER_TWO을 대체 할)? 거의. 가장 사소한 다중 플랫폼 프로젝트를 제외한 모든 프로젝트에서 절대적으로 필요한 것. –

+0

@PigBen True. 그럼에도 불구하고 온화한 종류의 악. '아껴서 사용하십시오'는 정확하지만 덜 재미 있습니다 –

+0

악!= 필수적이지 않은 조건부 컴파일은 필요한 악의적 인 좋은 예입니다. –

0

일반적인 방법은 전 처리기 또는 메이크 파일의 마법을 사용하는 것입니다. 어느 쪽이든, void clearscreen()과 같은 헤더 파일의 공통 인터페이스 뒤에 구현 세부 사항을 숨기면됩니다. 그런 다음 단일 소스 파일에서 #ifdef BORLAND 뒤에있는 Borland 구현을 숨길 수 있으며 다른 구현에서도 마찬가지입니다. 또는 각 구현을 별도의 소스 파일에 넣고 makefile의 변수를 기반으로 적절한 컴파일 만 수행 할 수 있습니다.

8

일반적으로 C 또는 C++ 프로그램을 여러 컴파일러에서 작동 시키려면 가능한 한 표준 C 또는 C++에 자신을 한정하고 싶습니다. 때로는 컴파일러/플랫폼 특정 기능을 사용해야하며,이를 처리하는 한 가지 방법은 전처리기를 사용하는 것입니다.

SourceForge의 predef 프로젝트는 여러 플랫폼에서 다양한 컴파일러에 의해 자동으로 정의되는 전처리 기 기호를 나열합니다. 의 상단에서

#ifdef BORLAND 
    borland(); 
#else 
    otherCompiler(); 
#endif 
+0

함수 내에서 조건부 컴파일을하지 마십시오. Foreach 버전의 명령은 각 컴파일러에 적절한 매크로 정의를 생성합니다. 코드가 복잡 해지 자 마자이 단순한 명령 유형에서는 코드가 읽을 수 없게됩니다. clearScreen()이 수행해야하는 유일한 작업은 매크로를 호출하는 것입니다. PLATFORM_CLEAR_SCREEN() –

+0

@Martin - 대부분의 작업을 매크로를 사용하여 옹호하고 있습니까? 그러나 매크로는 [악마] (http://www.parashift.com/c++-faq-lite/misc-technical-issues.html#faq-39.4)입니다! :) – Mac

0

당신은 #ifdef 컴파일러 매크로 컴파일러 매크로를 확인하여이 작업을 수행 할 수 있습니다 : 당신은 예를 들어, 당신이 필요로 구현하기 위해 해당 정보를 사용할 수 있습니다 head는 자신의 함수 호출을 정의한 다음 컴파일 매개 변수에 따라 실제 호출로 변환합니다 (#ifdef 사전 처리 정의 - 어떤 값이 어떤 컴파일러에 해당하는지 확인). 예 :

#if defined(__COMPILER_ONE__) 
#define ClearScreen() clrscr() 
#elif defined(__COMPILER_TWO__) 
#define ClearScreen() system("CLS") 
#else 
#error "I do not know what to do!" 
#endif 

이를위한 전용 헤더 파일을 작성해야 물론, 사방을 포함 할 수 있습니다.

악으로 간주

2

하나 쉽게 답 :

void clearScreen() { 
    // __BORLANDC__ is defined by the Borland C++ compiler. 
    #ifdef __BORLANDC__ 
    clrscr(); 
    #else 
    system("cls"); 
    #endif 
} 
관련 문제