さて、私は複数のC++バージョンがあることを知っています。私はそれらの違いについて多くのことを知っていませんが、私の質問は次のとおりです。
私はC++ 11でC++アプリケーションを作って、他のバージョンのC++のエラーが出てくるか、それを検出し、そのバージョンで実行しますか?
これは間違っていますか?コンパイル時に定義されていますか?私はまだ私の質問に1つの答えを見つけることはないので、誰かが私に教えてください。C++のバージョンは、exeのバージョンを自動検出しますか?
答えて
ソースコードを他のマシンにコピーしてそこにコンパイルするか、マシン上でコンパイルして結果のバイナリを別のコンピュータに送信するかによって異なります。
C++はコンパイラによってプロセッサ上で直接実行されるマシンコードに変換されます。互換性のあるプロセッサを搭載したコンピュータであれば、マシンコードを理解できますが、それ以上のものはあります。プログラムは、ファイルシステム、グラフィックアダプタなどとインターフェースする必要があります。この部分は通常、オペレーティングシステムによってさまざまな方法で処理されます。このうちのいくつかがC++ライブラリによって抽象化されていても、オペレーティングシステムへの呼び出しは異なります。
ubuntuのコンパイル済みバイナリは、たとえ両方のコンピュータが同じプロセッサとハードウェアを持っていても、ウィンドウ上では実行されません。
ソースコードを他のマシンにコピーしてそこでコンパイルする(またはクロスコンパイラを使用する)場合は、OS特有の機能を使用しない場合、プログラムをコンパイルして正常に実行する必要があります。
C++バージョンはコンパイルには問題ありませんが、C++ 11ソースコードがあればC++ 11対応コンパイラが必要ですが、プログラムがコンパイルされてもそれ以上は関係ありません。
C++はマシンコードにコンパイルされ、次にこのアーキテクチャを持つ任意のコンピュータで実行可能です。 i386またはx64(SSEなどのプロセッサ機能は別にしておく)
Javaの場合、反例を持たせるために、それは異なっています。そこでは、コードはマシンに依存しないバイトコード形式にコンパイルされます。このバイトコード形式は、Java仮想マシン(JVM)によって読み込まれ、理解されます。 JVMはアーキテクチャに対応していなければならず、正しいバージョンをインストールする必要があります。
OSの中には、事態を起こす可能性のある違いもあります。たとえば、標準CライブラリのABIです。そのため、たとえそのマシンがまったく同じハードウェア上で実行されているとしても、Linuxの実行可能ファイルを取り出してWindowsマシン上で実行することはできません。少なくとも同じ実行可能形式を理解しているマシンに範囲を絞り込む必要があります。 – cmaster
特定のOSでコンパイルしている場合にのみ該当します。しかし、コードをメモリに取り込む他の方法もあります。あなたは、ブートローダ、bioses、ファームウェア、OSなどを書くことができます。コードがロードされると、どのC++バージョンに関係なく実行できます。 – Espen
@Epenしかし、そのようなコードは標準Cライブラリにアクセスすることができず、結果として標準Cライブラリに依存する標準C++ライブラリのすべての部分に影響を及ぼします。ファイルI/O、スレッド、 'malloc()'のようなものは、カーネルに依存することなく実装するのは容易ではありません。 C/C++コードではないと主張することができます:言語の特定のサブセットを使用して記述する必要があります。そのレベルでは通常アセンブラのビットを含んでいなければならず、それを標準のC/C++からかなり遠くに動かす必要があります。 – cmaster
これは間違っていますか?コンパイル時に定義されていますか?
これはまさに考えです。コードはコンパイルされ、その後は言語バージョンはほとんど無関係です。可能な落とし穴は、新しいC++バージョンに標準のC++ライブラリ(ライブラリではなく、言語そのもの)の変更が含まれている場合です。しかし、そのライブラリの大部分はテンプレートコードなので、とにかく自分のコードと一緒にコンパイルされます。基本的には自分のコードと一緒にファイル.exe
に焼き付けられているので、あなたと同じくらいポータブルです。また、CとC++の両方のデザイナーは、古いコードを壊すためにではなく、を大切に扱います。システム自体(標準のCライブラリ)によって提供される部分でさえ、何も破壊しないようにすることができます。
理論上壊れる可能性があるものの、純粋なC++コードは、コンパイルされたマシンと同じ.exe
フォーマットを理解しているすべてのマシンで正常に動作するはずです。
- 1. Install4j自動更新バージョン検出
- 2. Guavaのバージョンを検出しますか?
- 3. exe onlineのバージョン
- 4. JavaScriptのバージョンを検出します。
- 5. Eclipseの自動バージョン増分CDT(C++)
- 6. ビジュアルスタジオ自動バージョンとファイルのバージョン管理
- 7. Exeは、古いバージョンのWindowsで動作しません。
- 8. ネイティブC++からJavaバージョンを検出できますか
- 9. 自動バージョン番号
- 10. 自動更新APKバージョンは
- 11. Javaレスポンスボディの自動検出を自動検出します。
- 12. IE検出Javascriptバージョン
- 13. Facebook APIバージョン検出
- 14. Facebook APIバージョン検出
- 15. htmlファイルまたはアクティブxからExcelバージョンを自動的に検出する方法はありますか?
- 16. BlasバージョンのR検出
- 17. ブラックベリーのバージョン検出javascriptコード
- 18. .net:DLLとEXEのバージョン番号?
- 19. ApacheのバージョンをApacheの設定で検出しますか?
- 20. windows .exeファイルのバージョンを読むには?
- 21. TwitterのiOSバージョンを検出しますか?
- 22. bazelのNVCCのバージョンを検出する
- 23. PHPはバージョン10未満のInternet Explorerを検出します
- 24. Inno Setup Javaバージョンを検出
- 25. ワンクリックアプリケーションと新しいバージョンの最初の起動の検出
- 26. C/C++でのOSの自動検出
- 27. POMバージョンに基づいて.install4jファイルのバージョンを自動化
- 28. .htaccessのAndroidバージョンを検出する
- 29. 古いIEのバージョンを検出する
- 30. FFmpegのインストールとバージョンを検出する
アプリケーションはコンパイルされ、スタンドアロンです。 javaやpythonとは異なり、C++コンパイルされたプログラムを実行するためにC++は必要ありません。 –