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

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

新規登録して質問してみよう
ただいま回答率
85.49%
OS

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

Linux

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

Windows

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

MacOS(OSX)

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

C++

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

Q&A

解決済

5回答

16354閲覧

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

mr0237

総合スコア164

OS

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

Linux

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

Windows

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

MacOS(OSX)

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

C++

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

0グッド

1クリップ

投稿2016/10/20 15:09

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

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

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

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

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

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

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

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

投稿2016/10/20 17:58

catsforepaw

総合スコア5938

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

こんにちは。

例えば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プログラムを開発できます。
無償で使えるものは使い方が難しかったり使える範囲が限定されていたりします。有償のものは使い方も簡単で使える範囲も広いてすが、なかなか高価です。

投稿2016/10/20 16:19

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

投稿2016/10/21 09:12

mugicya

総合スコア1046

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

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

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

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

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

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

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

投稿2016/10/20 15:59

otn

総合スコア84489

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

例えば

c

1#include <stdio.h> 2 3void main() 4{ 5 printf("test"); 6 return; 7}

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

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

投稿2016/10/20 15:15

hiim

総合スコア1689

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hiim

2016/10/20 15:23

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問