質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.45%

  • C++

    4541questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

  • Linux

    4535questions

    Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

  • MacOS(OSX)

    2401questions

    MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

  • Windows

    1736questions

    Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

  • OS

    242questions

    OS(オペレーティングシステム)は、システムソフトウェアの一種であり、一般的に、ハードウェアを直接的に管理・操作する最も中心的な機能を有するソフトウェアがオペレーティングシステムとして呼ばれます。

C++はOSやプラットフォームに依存しない?

解決済

回答 5

投稿

  • 評価
  • クリップ 0
  • VIEW 5,746

mr0237

score 144

C++はOSやプラットフォームや開発ツールのバージョンが変更されても、現状の資産を変更せずにそのまま使えるって聞きましたか、そんなこと、本当にできるのでしょうか?

例えばWindows環境で開発しても、LinuxやMacで動かすっていうことも可能なのでしょうか?

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 5

+1

こんにちは。

例えばWindows環境で開発しても、LinuxやMacで動かすっていうことも可能なのでしょうか?

慎重にプログラム開発することで、そこそこ可能です。

まず、C/C++言語の規格にはコンパイラの開発者に仕様の決定を任せている部分が多数あります。そのような部分は処理系依存と呼ばれ、コンパイラやビルド・オプションにより非互換です。
それらをさけて処理系の間で互換性を確保できる方法でプログラムを記述する必要があります。
例えば、int型のサイズは2バイトか4バイトのどちらかが多いです。それで困る場合はint32_tのような32ビットであることが保証されている型を使う等です。

次に、OSのAPIもOS毎に異なります。この部分を完全に吸収することは不可能です。
ですが、標準ライブラリはOSのAPIの相違を一部吸収してます。(ファイルのリード/ライト等)
また、例えば、boostはもっと吸収している範囲が広いです。そのようなライブラリを活用することでOSの相違もある程度吸収できます。(残念ながら十分と言うには程遠いですが。)

そのような部分の中で、最も辛いのはGUIと思います。boostもGUI開発はサポートしていません。
GUIをマルチ・プラットフォームで開発できるフレームワークが幾つか(QtやC++Builderなどなど)ありますので、それらを使うことでそこそこマルチ・プラットフォーム対応なGUIプログラムを開発できます。
無償で使えるものは使い方が難しかったり使える範囲が限定されていたりします。有償のものは使い方も簡単で使える範囲も広いてすが、なかなか高価です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

C++はOSやプラットフォームや開発ツールのバージョンが変更されても、現状の資産を変更せずにそのまま使えるって聞きましたか、そんなこと、本当にできるのでしょうか? 

極めて限定的な条件下ではできますが、多くの場合、「そのまま」ではまず無理です。

C++は国際規格で仕様が決まっていて、その仕様の範囲内で注意深く作ったソースコードであればプラットフォームや開発ツールの違いにかかわらず「そのまま」使えます。
ただし、例えばウィンドウを開いて画像を表示するとか、音楽を再生するとか、そういったことはC++の仕様に含まれていないので、開発ツールやプラットフォームが提供する機能をAPIを介して利用することになるのですが、プラットフォームが異なればAPIも異なるため、「そのまま」使うことはできません。

そこで、「できるだけそのまま」使えるようにすることを目的とした「マルチプラットフォーム対応フレームワーク」なるものがいくつも登場しています。それでも、プラットフォームの違いを理解していないと「そのまま」使えるようなソースコードは書けません。

開発ツールのバージョンに関しては、大抵のツールは後方互換があるので、旧バージョンの資産をそのまま使えるケースが多いです。ただし、あまりにバージョン間の開きが大きすぎるとそのままでは使えなくなる場合もあります。

例えばWindows環境で開発しても、LinuxやMacで動かすっていうことも可能なのでしょうか?

基本的には無理です。C++は「コンパイル」しないと実行できないのですが、コンパイルしてできる実行ファイルがプラットフォームによって異なるため、たとえC++標準規格の範囲内で作ったアプリでも、Windowsで作ったものをMacで動かす、などということはできないのです。その場合、ソースをMacでコンパイルする必要があります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

checkベストアンサー

0

OSやプラットフォームや開発ツールのバージョンが変更されても、現状の資産を変更せずにそのまま使える

同一OS、同一プラットフォーム、同一開発ツールで、バージョンだけ異なるという条件であれば、動くこともあるでしょうし、バージョンアップで機能変更された機能を使っていれば、動きません。

例えばWindows環境で開発しても、LinuxやMacで動かすっていうことも可能なのでしょうか?

OSに依存しないプログラムを書けば可能です。
OSに依存するプログラムだと動きません。

と、当たり前の回答しか出来ないですね。
C/C++規格の標準ライブラリしか使っていない簡単なプログラムであればOSに依存せずに動かす事も可能です。
Windows+Cygwinとか、Linux+wine、Linux+mono、Linux+.NET core等を使えばある程度の複雑なプログラムをOSに依存せずに書くことも可能です。

もっと具体的にやりたいことを質問した方が良いと思います。そうじゃなくて、ふとした疑問のレベルであれば、上記ということです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

ある意味できてある意味できないといったところでしょうか。

例えば

#include <stdio.h>

void main()
{
    printf("test");
    return;
}


などであればvisual studioでコンパイル仕様がgccでコンパイルしようが、windows mac等あまり関係ないですが、

例えばwindowsで開発時win32apiやMFCなどWindows(プラットフォーム)特化のものを利用すると再利用不可と思います

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/10/21 00:23

    C++自体は単にプログラム言語なので、どのOSに依存している等はないのでどのOS上でも基本使えますが、プラットフォーム特化のライブラリを使ってしまうと、別フラットフォームで使えなくなります。windowsでいうとそれをなんとかしようと.netframeworkは最初javaのようにさまざまなOS上で同様に扱えるようにつくられましたが、対応がとてもおくれていたようですね。
    やっとこんな感じになったようです。
    http://www.publickey1.jp/blog/15/macos_xlinuxnet_core.html

    キャンセル

0

コードレベルでは、互換性がある事が多いです。
バイナリ(実行ファイル)にはありません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.45%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • C++

    4541questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

  • Linux

    4535questions

    Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

  • MacOS(OSX)

    2401questions

    MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

  • Windows

    1736questions

    Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

  • OS

    242questions

    OS(オペレーティングシステム)は、システムソフトウェアの一種であり、一般的に、ハードウェアを直接的に管理・操作する最も中心的な機能を有するソフトウェアがオペレーティングシステムとして呼ばれます。