컴파일러에서 C++ 프로그램을 어떻게 작동시키는 지 알고 싶었습니다. 나는 프로그램을 만들고 싶었다. 그래서 만약 borland로 컴파일된다면 clrscr()
함수를 사용하고, 그렇지 않으면 system("CLS")
을 사용할 것이다. 비슷한 것을 한 코드를 보았지만 그것이하는 일이나 작동 방식에 대한 설명을 찾을 수 없었습니다. 어떤 도움을 주시면 감사하겠습니다.컴파일러에서 C++ 프로그램 작동 방법
답변
다른 컴파일러에서 어떻게 작동하는지 간단하게 묻는 질문은 매우입니다. 화면 지우기에 대한 구체적인 질문.
내가 먼저 당신이 당신의 자신의 기능을
void clear_screen();
말을하고 같이 그것을 정의, 이런 식으로 시도합니다 :
이 void clear_screen()
{
#ifdef LINUX
...
#eleif MS_WIN
...
#endif
}
난 그냥 짐작 있습니다 무엇 #DEFINE의 아르. 이것은 일반적으로 악으로 간주되는 조건부 합병증으로 알려져 있지만 기능에 포함 시키면 해를 조금 줄입니다.
일반적인 방법은 전 처리기 또는 메이크 파일의 마법을 사용하는 것입니다. 어느 쪽이든, void clearscreen()
과 같은 헤더 파일의 공통 인터페이스 뒤에 구현 세부 사항을 숨기면됩니다. 그런 다음 단일 소스 파일에서 #ifdef BORLAND 뒤에있는 Borland 구현을 숨길 수 있으며 다른 구현에서도 마찬가지입니다. 또는 각 구현을 별도의 소스 파일에 넣고 makefile의 변수를 기반으로 적절한 컴파일 만 수행 할 수 있습니다.
일반적으로 C 또는 C++ 프로그램을 여러 컴파일러에서 작동 시키려면 가능한 한 표준 C 또는 C++에 자신을 한정하고 싶습니다. 때로는 컴파일러/플랫폼 특정 기능을 사용해야하며,이를 처리하는 한 가지 방법은 전처리기를 사용하는 것입니다.
SourceForge의 predef 프로젝트는 여러 플랫폼에서 다양한 컴파일러에 의해 자동으로 정의되는 전처리 기 기호를 나열합니다. 의 상단에서
#ifdef BORLAND
borland();
#else
otherCompiler();
#endif
함수 내에서 조건부 컴파일을하지 마십시오. Foreach 버전의 명령은 각 컴파일러에 적절한 매크로 정의를 생성합니다. 코드가 복잡 해지 자 마자이 단순한 명령 유형에서는 코드가 읽을 수 없게됩니다. clearScreen()이 수행해야하는 유일한 작업은 매크로를 호출하는 것입니다. PLATFORM_CLEAR_SCREEN() –
@Martin - 대부분의 작업을 매크로를 사용하여 옹호하고 있습니까? 그러나 매크로는 [악마] (http://www.parashift.com/c++-faq-lite/misc-technical-issues.html#faq-39.4)입니다! :) – Mac
당신은 #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
이를위한 전용 헤더 파일을 작성해야 물론, 사방을 포함 할 수 있습니다.
악으로 간주
하나 쉽게 답 :
void clearScreen() {
// __BORLANDC__ is defined by the Borland C++ compiler.
#ifdef __BORLANDC__
clrscr();
#else
system("cls");
#endif
}
- 1. OpenMP 지시문을 컴파일러에서 처리하는 방법
- 2. C++ 컴파일러에서 어셈블리 언어 출력
- 3. 다른 C++ 컴파일러에서 Visual C++ 사용?
- 4. 컴파일러에서 후크/메서드의 출력에 후크 (C# - C++)
- 5. 세마포어 작동 방법 테스트
- 6. C# 컴파일러에서 잘못된 인수가 throw됩니다. 왜?
- 7. C++ 0x 컴파일러에서 lambda 특성 불일치
- 8. C++ 컴파일러에서 읽을 수있는 오류 메시지 받기
- 9. Objective-C 블록은 Linux의 컴파일러에서 지원됩니까?
- 10. C#에서는 문자열 리터럴이 컴파일러에서 최적화됩니까?
- 11. C++ 클래스 범위이 작동
- 12. ASP.Net 컴파일러에서 배포시 .svn 디렉터리를 제외 할 수있는 방법
- 13. NSXMLParser 작동 방법
- 14. JavaScript - Greasemonkey 작동 방법
- 15. viewflipper 작동 방법?
- 16. 작동 방법 kWebServiceURL?
- 17. Gitzilla 작동 방법
- 18. 내비게이션 컨트롤러의 작동 방법
- 19. 아이폰 jailbreaking 작동 방법
- 20. 프로그래밍 도움말, 작동 방법
- 21. Java url.openStream() 작동 방법
- 22. 로컬 호스트 작동 방법
- 23. C/C++ signed right shift가 특정 컴파일러에서 산술임을 확인합니까?
- 24. C 컴파일러에서 동적 라이브러리의 링크 문제 C++ 코드
- 25. 이 루핑 작동 방식 C#
- 26. 왜 컴파일러에서 오류가 발생합니까?
- 27. 컴파일러에서 반전 제어
- 28. lcc 컴파일러에서 오류가 발생했습니다.
- 29. 컴파일러에서 함수를 어떻게 해석합니까?
- 30. 컴파일러에서 순방향 참조를 어떻게 구현합니까?
조건부 컴파일 (물론 COMPILER_ONE 및 관련 정의 :)으로 COMPILER_TWO을 대체 할)? 거의. 가장 사소한 다중 플랫폼 프로젝트를 제외한 모든 프로젝트에서 절대적으로 필요한 것. –
@PigBen True. 그럼에도 불구하고 온화한 종류의 악. '아껴서 사용하십시오'는 정확하지만 덜 재미 있습니다 –
악!= 필수적이지 않은 조건부 컴파일은 필요한 악의적 인 좋은 예입니다. –