문제

C/C ++의 여러 플랫폼을 지원하려면 전처리기를 사용하여 조건부 컴파일을 활성화합니다. 예,

#ifdef _WIN32
  #include <windows.h>
#endif

ADA에서 어떻게 할 수 있습니까? ADA에는 사전 처리기가 있습니까?

도움이 되었습니까?

해결책

귀하의 질문에 대한 답은 아니오입니다. ADA에는 언어에 내장 된 사전 프로세서가 없습니다. 즉, 각 컴파일러에는 하나가 있거나 없을 수 있으며 사전 처리를위한 "균일"구문이 없으며 조건부 편집과 같은 것들이 있습니다. 이것은 의도적이었습니다. 그것은 Ada Ethos에 "유해한"것으로 간주됩니다.

전처리 기의 부족에는 거의 항상 방법이 있지만 종종 솔루션이 약간 번거 롭을 수 있습니다. 예를 들어, 플랫폼 별 기능을 '별도'로 선언 한 다음 빌드 툴을 사용하여 올바른 것 (Pragma Body 교체 또는 매우 간단한 디렉토리 시스템을 사용하여 프로젝트 시스템)을 컴파일 할 수 있습니다. 모든 Windows 파일을 넣으십시오. / Windows / 및 / Linux /의 모든 Linux 파일 및 플랫폼에 적합한 디렉토리를 포함).

Gnat은 때때로 전처리자가 필요하고 Gnatprep을 만들었다는 것을 깨달았습니다. 컴파일러에 관계없이 작동해야하지만 빌드 프로세스에 삽입해야합니다). 마찬가지로, 간단한 것 (조건부 편집)의 경우 C 프리 프로세서를 사용하거나 매우 간단한 것을 굴릴 수도 있습니다.

다른 팁

Adacore가 제공합니다 gnatprep ADA를위한 전문가 인 사전 처리기. 그들은 gnatprep가 "특별한 GNAT 기능에 의존하지 않는다"고 말하기 때문에 비 GNAT ADA 컴파일러와 함께 작동하는 것처럼 들린다. 사용자 안내서는 조건부 편집도 제공합니다 조언.

ADA 사양과 신체 파일이 각각 ".m4s"및 ".m4b"로 접미사를 사용하여 M4도 사용 된 프로젝트에 참여했습니다.

저의 선호는 실제로 전처리를 피하고 특수 본체를 사용하여 CM과 빌드 프로세스를 설정하여 관리하는 것입니다.

아니오 외에는 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는 당신이 이것을 할 수있을 정도로 강력합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top