コンパイラ間でC++プログラムをどのように動作させるかを知りたがっています。私はプログラムを作りたいと思っていました。もしそれがclrscr()
関数を使用すると、それはsystem("CLS")
を使用していました。私は同様のことをしたコードを見たことがありますが、それが何をしているのか、それがどのように機能しているのかの説明は見つかりませんでした。どんな助けもありがとう。コンパイラ間でC++プログラムを動作させる方法
答えて
異なるコンパイラ間で何かをするには、簡単な質問は答えが複雑です!画面をクリアするための具体的な質問。
私は
void clear_screen();
を言うと、このようにそれを定義する独自の機能を持っている最初の、このようにそれを試みる:私は何の#defineの推測しているのでご注意ください
void clear_screen()
{
#ifdef LINUX
...
#eleif MS_WIN
...
#endif
}
をあります。これは一般的に悪とみなされる条件付き合併症として知られていますが、それを機能に含めると害を少し軽減します。
通常は、プリプロセッサやmakefileの魔法を使います。いずれにしても、ヘッダファイル内の共通インタフェースの背後にある実装の詳細は、void clearscreen()
のように隠蔽します。その後、単一のソースファイルで、#ifdef BORLANDの背後にあるBorlandの実装を隠すことができます。他の実装でも同様です。あるいは、各インプリメンテーションを別々のソースファイルに入れて、makefileの変数に基づいて適切なものだけをコンパイルすることもできます。
一般に、複数のコンパイラでCまたはC++プログラムを動作させるには、できるだけ標準CまたはC++に自分自身を限定したいと考えています。コンパイラ/プラットフォーム固有の機能を使用する必要がある場合もあります。その処理方法の1つは、プリプロセッサを使用する方法です。
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. Cプログラムをしばらくの間カーネルモードで動作させる
- 2. CコンパイラをOS X上で動作させるには?
- 3. 実行可能プログラムでargparseを動作させる方法
- 4. C++でのコンパイラの作成方法
- 5. cコンパイラがRubyのインストールを動作させない
- 6. vscodeをグローバル名前空間で動作させる方法は?
- 7. MFCのC++プロジェクトでJsonCPPを動作させる方法
- 8. qtcreatorをC++で動作させる方法
- 9. c#バックグラウンドでタイマーを動作させる方法
- 10. C#Application Path Webサイトで動作させる方法
- 11. 小さなCプログラムでは動作しません
- 12. C++と.NETの間で名前付きパイプを動作させる方法を教えてください。
- 13. gccとllvmコンパイラではCプログラムの動作が異なります
- 14. C#でwinformアプリケーションをプログラムで自動起動する方法は?
- 15. プログラムをCで特定の時間待機させる
- 16. C#コントロール間でプログラムでタブをタブする方法
- 17. リスナーが動作している間にJavaプログラムを待機させる方法は?
- 18. C/C++プログラムでタグを作成する方法
- 19. C++プログラムでの出力コンパイラのバージョン
- 20. ロールアニメーションを動作させる方法(ルーレット)
- 21. Mamp - Gzipを動作させる方法
- 22. angular2 [innerHtml]を動作させる方法
- 23. Gitzillaを動作させる方法
- 24. EmberJS:カルーセルを動作させる方法
- 25. RadioButtonを動作させる方法
- 26. 奇妙なコンパイラの動作(C++)
- 27. ZedboardのC++プログラムで時間パフォーマンスをチェックする方法
- 28. OpenMPがC++プログラムで動作するかどうかを確認する方法
- 29. JoomlaでXmlrpcをインストールしてC#で動作させる方法は?
- 30. プログラムで[ファイルの場所を開く]動作を実装する方法(C++ビルダー)
条件付きコンパイル(もちろん、あなたがCOMPILER_ONEと関連定義:)とCOMPILER_TWOを代用する必要がありますか)?ほとんど。最も重要なマルチプラットフォームプロジェクト以外のすべてにおいて、もっと必要なことはもっと似ています。 –
@PigBen True。それにもかかわらず、穏やかな邪悪な悪です。 「控えめに使う」は、より正確ではあるが、より楽しい。 –
悪い!==必須ではありませんが、条件付きコンパイルは、必要なevil imhoのかなり良い例です。 –