- ベストアンサー
C言語で作ったらWindowsでもMacでもLinuxでも動くんですか?
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
>それぞれのOSで使えるコンパイラでコンパイルしないといけないのですね。 そう。 >文章はテキストファイルだからOKということで。 いや、OKじゃない。 ソースコード(ソースプログラム)はテキストファイルだからOK、と思ったかも知れない。でも、OKじゃなかったりする。 ソースコードに漢字が入ってると、たとえそれがコメント部分だったとしても「漢字コードの違い」があって「単純に持って来ただけ」だと、コンパイルさえ出来ない事もある。 しかも「たとえ漢字が入ってなくても、改行コードの違い」でコンパイルできない場合もある。 コンピュータにとっては「テキストファイル」も「バイナリファイル」も区別出来ない。どっちも単に「何かのデータが並んで格納されてるファイル」に過ぎない。 そして「こういうデータが並んでたら、こういう意味」と言う「約束事」は、MacはMac、LinuxはLinux、WindowsはWindowsで全部違う。 テキストファイルで言えば「漢字の約束事」や「改行の約束事」が全部違う。 だから「単にソースコードを持って来ただけでもダメ」だったりする。 もし「LinuxからMacへ、テキストファイルをコンバートして送るツール」が無かったとしたら「Linuxで紙にプリントアウトして、Macでそれを読みながら手で打ち込み直し」って事になってしまう。 そういう訳で「テキストファイルだからOK」ってのは「甘い考え」だったりする。
その他の回答 (7)
- xyz951
- ベストアンサー率18% (15/79)
そうとうなショボイコンパイラで無い限りANSIに準じているだろうからOSごとの機能を使ったプログラムでなくANSIに準じているものなら基本的にはコンパイルし直せば動く。 C言語って標準入出力は結構貧弱ですから各OSというかコンパイラで独自にグラフィックライブラリとかGUIライブラリなど拡張しているのが多いですからね。 GUIライブラリはものによっては複数のOSで提供されているものはあります。(QTやGTK+などはクロスプラットフォーム) また、WideStudio/MWTの様にクロスプラットフォームに対応したものもあります。(その場合、各OSごとにコンパイルをやり直せば基本的には動きます。)
お礼
ありがとうございます。 各OSごとにコンパイルしなおすのがポイントみたいですね。 ちょっとそのほかのところはわかりませんでした。ANSIとかはわかります。
- okazaki0ko
- ベストアンサー率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()くらいなら使えます。
お礼
詳しいご回答ありがとうございます。 レベルが高くてわからないところもありますが、標準関数だけを使ったものなら、ソースコードはそのままで、そのOSに持っていって、そこでコンパイルすれば動くことが多いのですね。 Macは除く(知らない)とありますが、私はMacでC言語のプログラムを作ったりしたことはないのでOKです!!
- SAYKA
- ベストアンサー率34% (944/2776)
コンパイラってのは「翻訳者」だよ。 LinuxとかMacとかってのは「国」だと思えば良いよ。 C言語という人が判る言葉をLinux国とかMac国の言葉に変換してくれる。 変換した国の言葉が、他の国と同じ筈ないでしょ?
お礼
わかりやすい回答ありがとうございます。 OSは「国」みたいなものでコンパイラて人が「翻訳」をしてくれるんですね!!
- asuncion
- ベストアンサー率33% (2126/6286)
OSが別々だと、バイナリーレベルでの互換性はありません。 ソースコードのレベルでは、OSが別々でも互換性のある場合があります。
お礼
バイナリレベルだとOSで互換性がなくて、ソースコードのレベルでは互換性がある場合があるのですね。 わかってきました。 ありがとうございます。
- arain
- ベストアンサー率27% (292/1049)
C言語も含む「コンパイル言語」は「特定の環境用」の実行可能ファイルを生成する。 つまり、環境(OS)が違えば動かない。 また、環境専用のライブラリ(関数)なんかもあるわけで、 そういったものを利用したものはソースもコンパイルできないことがほとんど。 Windows上でMacやLinux用の実行ファイルを作ることも場合によっては可能だけど、 それは「クロスプラットフォーム」といって、作ったものはWindowsでは動作しない。
お礼
ありがとうございます。 コンパイルとは特定の環境用の実行可能ファイルを作ることなのですね。 環境専用のライブラリというのに特に注意が必要なこともわかりました。
- chie65535
- ベストアンサー率43% (8507/19342)
動かない。 Mac用はMac上で、Linux用はLinux上で、Windows用はWindows上で、再コンパイルしないといけない。 で「違うパソコンでコンパイルする」んだから「使うコンパイラも違う」事になり「コンパイラが違えば動作も違う」って事になる。 「動作が違う」ってのは「動かない」と同義。 下手すると #include <stdio.h> int main(void) { printf("Hello world\n"); } でさえ「同じには動かない」事もある。動かないどころか、コンパイルさえ出来ない事も。 じゃなかったら、ソフトハウスは「移植」で金取れないよ。
お礼
それぞれのOSで使えるコンパイラでコンパイルしないといけないのですね。 文章はテキストファイルだからOKということで。 ありがとうございます。
- Tacosan
- ベストアンサー率23% (3656/15482)
「コンパイルした結果」はすべて異なるものと思え.
お礼
ありがとうございます。 コンパイルした結果は異なるのですね。
関連するQ&A
- WindowsでのC と LinuxでのC の違いについて
これから、Linux OSでC言語のプログラミングを行うことになりました。ディストリビューションはVine Linux 3.2 を利用します。 開発方法としては、Windows Xp 上でgccを利用できるIDE(Dev-C++ 4.9.9.2を利用します)で開発を行い(テスト的にコンパイル)、できたソースをLinux上でコンパイル・リンクするという方法で行おうと考えています。 そこで、疑問があります。 ANSIライブラリの中にはシステムコールを実行するものがあると思います。システムコールはOSの一部の機能ということですので、WindowsとLinuxとでは当然その機能は違ってくると思います。 つまり、WindowsでANSIライブラリを利用して実装したプログラム(コンパイルもとおる)がLinux上で正常に機能するのか(そもそもコンパイルがとおるか)がわかりません。 どなたかご教授いただけましたら幸いです。 宜しくお願いします。
- 締切済み
- C・C++・C#
- C言語 Linux Mac
Mac Linux C言語 MacでLinuxをダウンロードするにはどうすれば良いのでしょうか? (種類が多くて困っています) 今日C言語を主に扱う会社に面接に行ってきて、帰り際に「Linux上で動くC言語のMACアドレスを検知するプログラムを一週間後までに作ってきてくれ」と頼まれました。 OSとしてはMacを使っていて、まずはLinuxをダウンロードしたいのですが種類が多すぎて選べません。 Linux上で動くC言語のプログラムを作りたい場合どのLinuxの種類をダウンロードするのが適切でしょうか? Web系(HTML,CSS,JavaScript)の職業訓練を半年受けていたので本当に基本的な事はわかってると思うのですが VirtualBoxでLinuxをダウンロードする際「Download VirtualBox for Linux Hosts」まで行くのはわかるのですが、その後種類が多く困っています。 どれをダウンロードするのが適切でしょうか?(画像の画面の場合です。)
- ベストアンサー
- Linux系OS
- Vine Linux 2.6 でC言語で開発
Vine Linux 2.6をインストールの種類でワークステイションを選択してインストールしました。 が、自作したC言語のプログラムをコンパイルしようと思いましたが、「gcc」コマンドが無いようです。 ワークステイションを選択してインストールするとgccはインストールされないのでしょうか? また、インストールされていなかったとしたらインストール方法を教えてください。
- ベストアンサー
- その他(OS)
- LinuxにてC言語を作成が、変換が出来ません。
LinuxにてC言語を作成が、変換が出来ません。 gccにてコンパイルを行っていますが、半角カナから全角カナの変換が上手く出来ません。 StrConvみたいな関数があれば教えて下さい。 宜しくお願いします。
- ベストアンサー
- C・C++・C#
- C言語についてどうしてもわからない疑問
プログラミング初心者です。 C言語を勉強中に疑問に思ったことが2つあります。 まず1つ目。 C言語以外のプログラミング言語、例えばjavaとかC#とかjsとかpythonとかrubyとかPHPとか、には開発者にとって便利なライブラリとかフレームワーク(僕にはこの2つの明確な違いがわかりません。が、どちらも「開発者が定義しなくてもよい関数やオブジェクトの集合」という認識があります)がありますよね。 そのおかげで色んな人達がプログラミングし易くなりました。 ネット(はてぶのホットエントリとか)でも「馬鹿な俺がプログラミングを勉強して〇〇を作った」といった記事をよく目にします。 でも「C言語を使って」というのは聞いたことがありません。 そもそも、C言語はそいういったライブラリやフレームワークが少ないように感じます。 検索してもrailsとかjqueryのようなフレームワーク(ライブラリ?)は見つかりません。 これが無かったらプログラムなんて作れないのでは? しかし、世間にはC言語で作られたプログラムが多いのもまた事実。 C言語ではいったいどのように開発が行われているのか教えてください。 2つ目 unixとかlinuxといったOSはC言語で書かれている聞いたことがあります。 しかし、プログラムの開発は「コードを書く→コンパイル(→デバッグ)→実行」という流れですよね。 ではOSを開発するときに、そのコードをどうやってコンパイルするのでしょうか? コンパイラはOSの上に立っているとするなら、OSがない状態でコンパイラはどこに立てばいいのか。 そこがわかりません。 誰かこの2つの疑問に答えてください。 お願いします。
- ベストアンサー
- C・C++・C#
- Mac-Win-Linux 共通の最良言語は?
同じコードを OSに依存せずに Mac でも Windows でも Linux でも走らせることができる エレガントな言語は何でしょうか? C++ のような方言だらけの言語ではなく、使いやすい すっきりした言語を教えて下さい。 その言語のコンパイラーの入手方法を含めて よろしくお願いします。
- 締切済み
- その他(プログラミング・開発)
- MacでのC言語について
MacでC言語の環境を作ろうと思いXcodeをインストールしたのですが、コンパイルができません。 取り敢えずhello.cを作り、ターミナルを起動してディレクトリを移動しgcc hello.cと入力したのですが「-bash: gcc: command not found」と表示されてしまいます。 OSはLionです。 プログラミング初心者なので説明不足かもしれませんが分かる方どうか教えて下さい。
- ベストアンサー
- C・C++・C#
お礼
ありがとうございます。 テキストファイルだからOKじゃなかったんですね・・・。知りませんでした。 OSが変わったらコンパイルしなおさないといけないし、テキストファイルだからって他のOSに持っていったらOSというわけでもない。 はじめから自分の使いたいOS上で開発をするべきなんですね。