문제
C/C ++의 여러 플랫폼을 지원하려면 전처리기를 사용하여 조건부 컴파일을 활성화합니다. 예,
#ifdef _WIN32
#include <windows.h>
#endif
ADA에서 어떻게 할 수 있습니까? ADA에는 사전 처리기가 있습니까?
해결책
귀하의 질문에 대한 답은 아니오입니다. ADA에는 언어에 내장 된 사전 프로세서가 없습니다. 즉, 각 컴파일러에는 하나가 있거나 없을 수 있으며 사전 처리를위한 "균일"구문이 없으며 조건부 편집과 같은 것들이 있습니다. 이것은 의도적이었습니다. 그것은 Ada Ethos에 "유해한"것으로 간주됩니다.
전처리 기의 부족에는 거의 항상 방법이 있지만 종종 솔루션이 약간 번거 롭을 수 있습니다. 예를 들어, 플랫폼 별 기능을 '별도'로 선언 한 다음 빌드 툴을 사용하여 올바른 것 (Pragma Body 교체 또는 매우 간단한 디렉토리 시스템을 사용하여 프로젝트 시스템)을 컴파일 할 수 있습니다. 모든 Windows 파일을 넣으십시오. / Windows / 및 / Linux /의 모든 Linux 파일 및 플랫폼에 적합한 디렉토리를 포함).
Gnat은 때때로 전처리자가 필요하고 Gnatprep을 만들었다는 것을 깨달았습니다. 컴파일러에 관계없이 작동해야하지만 빌드 프로세스에 삽입해야합니다). 마찬가지로, 간단한 것 (조건부 편집)의 경우 C 프리 프로세서를 사용하거나 매우 간단한 것을 굴릴 수도 있습니다.
다른 팁
아니오 외에는 CPP 전 처리기 또는 M4를 명령 줄의 모든 파일 또는 Make 또는 Ant와 같은 건물 도구를 사용하여 호출 할 수 있습니다. .ada 파일을 다른 것을 호출하는 것이 좋습니다. Java 파일에서 한동안이 작업을 수행했습니다. Java 파일 .m4를 호출하고 Make Rule을 사용하여 .java를 만들고 정상적인 방식으로 빌드합니다.
도움이되기를 바랍니다.
일부 오래된 ADA1983-ERA 컴파일러에는 A.App이라는 패키지가 있으며 ADA의 #-Prefixed 서브 세트 (빌드 타임으로 해석)를 사용하여 ADA를 생성하기위한 전처리 언어 (컴파일 타임에서 기계 코드로 번역)로 사용했습니다. Rational의 VADS (Verdix ADA Development System)는 여러 ADA 컴파일러 중 A.App의 조상 인 것으로 보입니다. 예를 들어, Sun Microsystems는 VAD에서 ADA sparcompiler를 도출하여 A.App을 가졌다. 이것은 IBM이했던 PL/I의 사전 처리기로 PL/I의 사용과 다릅니다.
2 장은 A.App의 모습에 대한 문서화입니다. http://dlc.sun.com/pdf/802-3641/802-3641.pdf
네, 그것은이.
GNAT 컴파일러를 사용하는 경우 사용할 수 있습니다. gnatprep
전처리를 수행하거나 GNAT 프로그래밍 스튜디오를 사용하는 경우 프로젝트 파일을 구성하여 일부 조건부 컴파일 스위치를 정의 할 수 있습니다.
#if SOMESWITCH then
-- Your code here is executed only if the switch SOMESWITCH is active in your build configuration
#end if;
이 경우 사용할 수 있습니다 gnatmake
또는 gprbuild
그래서 당신은 달릴 필요가 없습니다 gnatprep
손으로.
예를 들어, 다른 크로스 컴파일러를 사용하는 여러 다른 OS에 대해 동일한 코드를 컴파일해야 할 때 매우 유용합니다.
아니 그렇지 않아.
실제로 하나를 원한다면 하나를 얻는 방법이 있습니다 (C를 사용하고 독립형 하나를 사용하십시오.). 그러나 나는 그것에 반대 할 것입니다. 하나가없는 것은 의도적 인 디자인 결정이었습니다. 사전 처리기의 전체 아이디어는 매우 유효하지 않습니다.
C의 사전 처리기가 사용되는 대부분의 제품은 ADA에서 다른보다 신뢰할 수있는 방식으로 달성 할 수 있습니다. 유일한 주요 예외는 크로스 플랫폼 지원을 위해 소스 파일을 약간 변경하는 것입니다. 전형적인 크로스 플랫폼 C 프로그램에서 이것이 얼마나 남용되는지를 감안할 때, 나는 여전히 ADA에 대한 지원이 없다는 것이 기쁘다. C/C ++ 개발자는 변경 사항을 "미성년자"로 유지할 수있을 정도로 충분히 제어 할 수 있습니다. 결과는 효과가있을 수 있지만 종종 인간이 읽는 것이 거의 불가능합니다.
이를 달성하는 일반적인 ADA 방법은 다른 코드를 다른 파일에 넣고 빌드 시스템을 사용하여 컴파일 시간에 어떻게 든 선택하는 것입니다. Make는 당신이 이것을 할 수있을 정도로 강력합니다.