みんなの「教えて(疑問・質問)」にみんなで「答える」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上で正常に機能するのか(そもそもコンパイルがとおるか)がわかりません。

どなたかご教授いただけましたら幸いです。
宜しくお願いします。

投稿日時 - 2008-08-14 13:42:13

QNo.4250697

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

15人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

ISO C として規格に書かれた範囲でプログラムを作っている限り, どんな環境でも「ソースはそのまま」使えます.... というか, 「規格」って「このように書いたらこのように動作する」ということを保証するためのものです. 動作さえきちんとしていれば, 「内部実装がどうなっているか」は (ISO C としての) 規格には全くありません.
って, 規格を 1度読んでみたらわかると思うんだけどなぁ.

投稿日時 - 2008-08-14 14:36:02

ANo.2

全部Linux上で開発、という訳には行かないんでしょうか?
そうすれば質問のような事を気にする必要はなくなりますし、gccの使えるIDEならEclipse/CDTでいいんじゃないかって気がするのですが。

それはさておき。

同じ関数で同じ呼び方をすればどんなOSでも(だいたい)同じ動作を示すためにそういったライブラリがあるのです。
#だから内部実装は各OSで当然違いますし必要とあればシステムコールだって使います

従って「基本的にはコンパイルは通るし正常に機能する」という回答になります。
ただし規格上実装依存となっている部分や都合により規格に合わせられていない部分等があることがあり、これらによりOS間で動作に違いが出ることはあります。

投稿日時 - 2008-08-14 14:10:10

補足

早速のご回答ありがとうございます。

>全部Linux上で開発、という訳には行かないんでしょうか?
→はい、可能です。

>#だから内部実装は各OSで当然違いますし必要とあればシステムコールだって使います
→同じライブラリ関数(例えばfopenなど)も内部的なつくりはOSごとに異なるということでしょうか。私はてっきり、ANSIライブラリの内部実装は固定だと思っていました。だからこそ、そのライブラリ内部から利用するシステムコール部分のつくりがどうなっているか(同じつくりなのにOSが違っても機能するか)と気になっておりました。
なるほど、OSごとにライブラリの内部実装が異なっているのであれば納得です。

ありがとうございました。

投稿日時 - 2008-08-14 14:13:43

ANo.1

ANSIの範囲でプログラムを組んでいる場合は、ソースレベルで互換性があります。
つまり、Windows版のgccを使った場合(Cygwinになると思います)はWindows(DOS)のシステムコールが利用され、Linux版のgccを使った場合は、Linuxのシステムコールが利用されます。

例えば、コンソールプログラムでよく利用するprintf()ですが、当然、どちらのgccでもコンパイルできます。
それぞれのOSの元のコンパイラででき上がった実行形式は、そのOSで実行することができます。
これは、OSの違いはおろか、ハードウェアの違いも関係ありません。
Intel系でもMotorola系でもなんでも動きます。
しかし、実行形式を別OSに持っていくと実行できません(バイナリ互換ではない)。

投稿日時 - 2008-08-14 14:07:49

あなたにオススメの質問