• ベストアンサー
  • 困ってます

C言語で作ったらWindowsでもMacでもLinuxでも動くんですか?

  • 質問No.4648843
  • 閲覧数5866
  • ありがとう数9
  • 気になる数0
  • 回答数8
  • コメント数0

お礼率 84% (893/1054)

Linuxでgccを使ってC言語を勉強してます。

Linuxのgccでコンパイルして作ったプログラムはWindowsでもMacでも動くんでしょうか?

逆にWindowsで作ったのはとか、Macで作ったのは他のOSで動くんだろうかと疑問で・・・。

教えてください!!

質問者が選んだベストアンサー

  • 回答No.8
  • ベストアンサー

ベストアンサー率 43% (7611/17471)

>それぞれのOSで使えるコンパイラでコンパイルしないといけないのですね。

そう。

>文章はテキストファイルだからOKということで。

いや、OKじゃない。

ソースコード(ソースプログラム)はテキストファイルだからOK、と思ったかも知れない。でも、OKじゃなかったりする。

ソースコードに漢字が入ってると、たとえそれがコメント部分だったとしても「漢字コードの違い」があって「単純に持って来ただけ」だと、コンパイルさえ出来ない事もある。

しかも「たとえ漢字が入ってなくても、改行コードの違い」でコンパイルできない場合もある。

コンピュータにとっては「テキストファイル」も「バイナリファイル」も区別出来ない。どっちも単に「何かのデータが並んで格納されてるファイル」に過ぎない。

そして「こういうデータが並んでたら、こういう意味」と言う「約束事」は、MacはMac、LinuxはLinux、WindowsはWindowsで全部違う。

テキストファイルで言えば「漢字の約束事」や「改行の約束事」が全部違う。

だから「単にソースコードを持って来ただけでもダメ」だったりする。

もし「LinuxからMacへ、テキストファイルをコンバートして送るツール」が無かったとしたら「Linuxで紙にプリントアウトして、Macでそれを読みながら手で打ち込み直し」って事になってしまう。

そういう訳で「テキストファイルだからOK」ってのは「甘い考え」だったりする。
お礼コメント
rabitwo

お礼率 84% (893/1054)

ありがとうございます。

テキストファイルだからOKじゃなかったんですね・・・。知りませんでした。

OSが変わったらコンパイルしなおさないといけないし、テキストファイルだからって他のOSに持っていったらOSというわけでもない。

はじめから自分の使いたいOS上で開発をするべきなんですね。
投稿日時:2009/01/30 19:07

その他の回答 (全7件)

  • 回答No.7

ベストアンサー率 18% (15/79)

そうとうなショボイコンパイラで無い限りANSIに準じているだろうからOSごとの機能を使ったプログラムでなくANSIに準じているものなら基本的にはコンパイルし直せば動く。
C言語って標準入出力は結構貧弱ですから各OSというかコンパイラで独自にグラフィックライブラリとかGUIライブラリなど拡張しているのが多いですからね。
GUIライブラリはものによっては複数のOSで提供されているものはあります。(QTやGTK+などはクロスプラットフォーム)
また、WideStudio/MWTの様にクロスプラットフォームに対応したものもあります。(その場合、各OSごとにコンパイルをやり直せば基本的には動きます。)
お礼コメント
rabitwo

お礼率 84% (893/1054)

ありがとうございます。

各OSごとにコンパイルしなおすのがポイントみたいですね。

ちょっとそのほかのところはわかりませんでした。ANSIとかはわかります。
投稿日時:2009/01/22 11:56
  • 回答No.6

ベストアンサー率 15% (37/238)

Linuxでプログラミング・・・って事は、OSの元で動くプログラムですね。
GUIプログラミングかCUIプログラミングかによって回答が違ってきますが、CUIプログラミングでprintf()とかfopen()とかfgets()とかisdigit()とかの標準ライブラリを使ったプログラミングであると仮定してお話しします。
こういったプログラムは、コンソールで動作させますが、Linux(UNIX)のターミナル、MS-DOS(Windowsのコマンドプロンプト)では、再コンパイルをかければ、ほぼ動きます。(Macは知らない)

動かないのは、C標準ライブラリ以外のOS依存系のライブラリを使用したものやCPU依存の部分があったときなどです。
確か、MS-DOSのCコンパイラ(Microsoftの!!)のライブラリにgetch()なんて関数(だかマクロ)があって、キーボードから1文字読み込むっていう動作をしました(MS-DOSのシステムコールを利用していた)。
UNIXには、pipe()やfork()などという関数があります(ただし正確にはfork()はシステムコール)。
これは、Cの標準関数ではないので、他のOSの元では再コンパイルもできないでしょう。

また、メモリサイズの関係で、プログラムによってはMS-DOSやCP/Mでは動かせないことも。(おそらく、ここで質問しているレベルでは無関係かな?)
あまりにメモリを消費するプログラムは、OSのメモリ管理能力によっては動作できません。

ちなみに、組み込みでも標準出力をRS-232Cにして端末につなげば、printf()くらいなら使えます。
お礼コメント
rabitwo

お礼率 84% (893/1054)

詳しいご回答ありがとうございます。

レベルが高くてわからないところもありますが、標準関数だけを使ったものなら、ソースコードはそのままで、そのOSに持っていって、そこでコンパイルすれば動くことが多いのですね。

Macは除く(知らない)とありますが、私はMacでC言語のプログラムを作ったりしたことはないのでOKです!!
投稿日時:2009/01/22 11:53
  • 回答No.5

ベストアンサー率 34% (944/2776)

コンパイラってのは「翻訳者」だよ。
LinuxとかMacとかってのは「国」だと思えば良いよ。
C言語という人が判る言葉をLinux国とかMac国の言葉に変換してくれる。

変換した国の言葉が、他の国と同じ筈ないでしょ?
お礼コメント
rabitwo

お礼率 84% (893/1054)

わかりやすい回答ありがとうございます。

OSは「国」みたいなものでコンパイラて人が「翻訳」をしてくれるんですね!!
投稿日時:2009/01/22 11:49
  • 回答No.4

ベストアンサー率 31% (1621/5107)

OSが別々だと、バイナリーレベルでの互換性はありません。
ソースコードのレベルでは、OSが別々でも互換性のある場合があります。
お礼コメント
rabitwo

お礼率 84% (893/1054)

バイナリレベルだとOSで互換性がなくて、ソースコードのレベルでは互換性がある場合があるのですね。

わかってきました。

ありがとうございます。
投稿日時:2009/01/22 11:48
  • 回答No.3

ベストアンサー率 27% (292/1049)

C言語も含む「コンパイル言語」は「特定の環境用」の実行可能ファイルを生成する。
つまり、環境(OS)が違えば動かない。

また、環境専用のライブラリ(関数)なんかもあるわけで、
そういったものを利用したものはソースもコンパイルできないことがほとんど。

Windows上でMacやLinux用の実行ファイルを作ることも場合によっては可能だけど、
それは「クロスプラットフォーム」といって、作ったものはWindowsでは動作しない。
お礼コメント
rabitwo

お礼率 84% (893/1054)

ありがとうございます。

コンパイルとは特定の環境用の実行可能ファイルを作ることなのですね。

環境専用のライブラリというのに特に注意が必要なこともわかりました。
投稿日時:2009/01/22 11:47
  • 回答No.2

ベストアンサー率 43% (7611/17471)

動かない。

Mac用はMac上で、Linux用はLinux上で、Windows用はWindows上で、再コンパイルしないといけない。

で「違うパソコンでコンパイルする」んだから「使うコンパイラも違う」事になり「コンパイラが違えば動作も違う」って事になる。

「動作が違う」ってのは「動かない」と同義。

下手すると
#include <stdio.h>
int main(void)
{
 printf("Hello world\n");
}
でさえ「同じには動かない」事もある。動かないどころか、コンパイルさえ出来ない事も。

じゃなかったら、ソフトハウスは「移植」で金取れないよ。
お礼コメント
rabitwo

お礼率 84% (893/1054)

それぞれのOSで使えるコンパイラでコンパイルしないといけないのですね。

文章はテキストファイルだからOKということで。

ありがとうございます。
投稿日時:2009/01/22 11:45
  • 回答No.1

ベストアンサー率 23% (3656/15482)

「コンパイルした結果」はすべて異なるものと思え.
お礼コメント
rabitwo

お礼率 84% (893/1054)

ありがとうございます。

コンパイルした結果は異なるのですね。
投稿日時:2009/01/22 11:40
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ