質問
C / C ++で複数のプラットフォームをサポートするには、プリプロセッサを使用して条件付きコンパイルを有効にします。例:
#ifdef _WIN32
#include <windows.h>
#endif
Adaでこれを行うにはどうすればよいですか? Adaにはプリプロセッサがありますか?
解決
あなたの質問に対する答えは「いいえ」です。エイダには言語に組み込まれたプリプロセッサがありません。つまり、各コンパイラには1つのコンパイラがある場合とない場合があり、「均一」ではありません。前処理や条件付きコンパイルなどの構文。これは意図的なものでした。「有害」と見なされます。エイダの精神に。
プリプロセッサの不足を回避する方法はほとんど常にありますが、多くの場合、ソリューションは少し面倒な場合があります。たとえば、プラットフォーム固有の関数を「個別」として宣言し、ビルドツールを使用して正しいものをコンパイルできます(プロジェクトシステム、プラグマボディ置換を使用、または非常に単純なディレクトリシステム...すべてのWindowsファイルを配置します) / windows /にあり、/ linux /にあるすべてのlinuxファイルにあり、プラットフォームに適切なディレクトリが含まれています。)
以上のことを言っても、GNATはプリプロセッサが必要な場合があることに気付き、gnatprepを作成しました。コンパイラに関係なく動作するはずです(ただし、ビルドプロセスに挿入する必要があります)。同様に、単純なもの(条件付きコンパイルなど)の場合は、おそらくcプリプロセッサを使用するか、独自の非常に単純なプリプロセッサを使用することもできます。
他のヒント
いいえ。ただし、CPPプリプロセッサまたはm4は、コマンドライン上の任意のファイルで、またはmakeやantなどのビルドツールを使用して呼び出すことができます。 .adaファイルを別の名前にすることをお勧めします。私はこれをJavaファイルでしばらく行ってきました。 Javaファイル.m4を呼び出し、makeルールを使用して.javaを作成し、通常の方法でビルドします。
お役に立てば幸いです。
一部の古いAda1983時代のコンパイラには、Adaの#プレフィックスサブセット(ビルド時に解釈される)をAdaを生成するための前処理言語として使用するa.appと呼ばれるパッケージがあります(コンパイル時にマシンコードに変換されます-時間)。 RationalのVerdix Ada開発システム(VADS)は、いくつかのAdaコンパイラの中でa.appの先駆者のようです。たとえば、Sun MicrosystemsはVADSから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 Programming Studioを使用している場合は、プロジェクトファイルを構成して、次のような条件付きコンパイルスイッチを定義できます
#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を使用するなど)。しかし、私はそれに反対します。それを持たないことは、意図的な設計上の決定でした。プリプロセッサの全体的なアイデアは非常に非エイダです。
Cのプリプロセッサの使用目的のほとんどは、他のより信頼性の高い方法でAdaで実現できます。唯一の大きな例外は、クロスプラットフォームサポートのためにソースファイルに小さな変更を加えることです。これが典型的なクロスプラットフォームのCプログラムでどれほど悪用されるかを考えると、Adaでサポートされていないことに満足しています。変更を「マイナー」に保つのに十分な自分自身を制御できるC / C ++開発者はほとんどいません。結果はうまくいくかもしれませんが、人間が読むことはほとんど不可能です。
これを実現する典型的なAdaの方法は、異なるコードを異なるファイルに配置し、ビルドシステムを使用して、コンパイル時に何らかの方法でそれらを選択することです。 Makeはこれを行うのに十分なほど強力です。