- 締切済み
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上で正常に機能するのか(そもそもコンパイルがとおるか)がわかりません。 どなたかご教授いただけましたら幸いです。 宜しくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- Tacosan
- ベストアンサー率23% (3656/15482)
ISO C として規格に書かれた範囲でプログラムを作っている限り, どんな環境でも「ソースはそのまま」使えます.... というか, 「規格」って「このように書いたらこのように動作する」ということを保証するためのものです. 動作さえきちんとしていれば, 「内部実装がどうなっているか」は (ISO C としての) 規格には全くありません. って, 規格を 1度読んでみたらわかると思うんだけどなぁ.
- D-Matsu
- ベストアンサー率45% (1080/2394)
全部Linux上で開発、という訳には行かないんでしょうか? そうすれば質問のような事を気にする必要はなくなりますし、gccの使えるIDEならEclipse/CDTでいいんじゃないかって気がするのですが。 それはさておき。 同じ関数で同じ呼び方をすればどんなOSでも(だいたい)同じ動作を示すためにそういったライブラリがあるのです。 #だから内部実装は各OSで当然違いますし必要とあればシステムコールだって使います 従って「基本的にはコンパイルは通るし正常に機能する」という回答になります。 ただし規格上実装依存となっている部分や都合により規格に合わせられていない部分等があることがあり、これらによりOS間で動作に違いが出ることはあります。
- okazaki0ko
- ベストアンサー率15% (37/238)
ANSIの範囲でプログラムを組んでいる場合は、ソースレベルで互換性があります。 つまり、Windows版のgccを使った場合(Cygwinになると思います)はWindows(DOS)のシステムコールが利用され、Linux版のgccを使った場合は、Linuxのシステムコールが利用されます。 例えば、コンソールプログラムでよく利用するprintf()ですが、当然、どちらのgccでもコンパイルできます。 それぞれのOSの元のコンパイラででき上がった実行形式は、そのOSで実行することができます。 これは、OSの違いはおろか、ハードウェアの違いも関係ありません。 Intel系でもMotorola系でもなんでも動きます。 しかし、実行形式を別OSに持っていくと実行できません(バイナリ互換ではない)。
補足
早速のご回答ありがとうございます。 >全部Linux上で開発、という訳には行かないんでしょうか? →はい、可能です。 >#だから内部実装は各OSで当然違いますし必要とあればシステムコールだって使います →同じライブラリ関数(例えばfopenなど)も内部的なつくりはOSごとに異なるということでしょうか。私はてっきり、ANSIライブラリの内部実装は固定だと思っていました。だからこそ、そのライブラリ内部から利用するシステムコール部分のつくりがどうなっているか(同じつくりなのにOSが違っても機能するか)と気になっておりました。 なるほど、OSごとにライブラリの内部実装が異なっているのであれば納得です。 ありがとうございました。