
No.8ベストアンサー
- 回答日時:
>それぞれのOSで使えるコンパイラでコンパイルしないといけないのですね。
そう。
>文章はテキストファイルだからOKということで。
いや、OKじゃない。
ソースコード(ソースプログラム)はテキストファイルだからOK、と思ったかも知れない。でも、OKじゃなかったりする。
ソースコードに漢字が入ってると、たとえそれがコメント部分だったとしても「漢字コードの違い」があって「単純に持って来ただけ」だと、コンパイルさえ出来ない事もある。
しかも「たとえ漢字が入ってなくても、改行コードの違い」でコンパイルできない場合もある。
コンピュータにとっては「テキストファイル」も「バイナリファイル」も区別出来ない。どっちも単に「何かのデータが並んで格納されてるファイル」に過ぎない。
そして「こういうデータが並んでたら、こういう意味」と言う「約束事」は、MacはMac、LinuxはLinux、WindowsはWindowsで全部違う。
テキストファイルで言えば「漢字の約束事」や「改行の約束事」が全部違う。
だから「単にソースコードを持って来ただけでもダメ」だったりする。
もし「LinuxからMacへ、テキストファイルをコンバートして送るツール」が無かったとしたら「Linuxで紙にプリントアウトして、Macでそれを読みながら手で打ち込み直し」って事になってしまう。
そういう訳で「テキストファイルだからOK」ってのは「甘い考え」だったりする。
ありがとうございます。
テキストファイルだからOKじゃなかったんですね・・・。知りませんでした。
OSが変わったらコンパイルしなおさないといけないし、テキストファイルだからって他のOSに持っていったらOSというわけでもない。
はじめから自分の使いたいOS上で開発をするべきなんですね。
No.7
- 回答日時:
そうとうなショボイコンパイラで無い限りANSIに準じているだろうからOSごとの機能を使ったプログラムでなくANSIに準じているものなら基本的にはコンパイルし直せば動く。
C言語って標準入出力は結構貧弱ですから各OSというかコンパイラで独自にグラフィックライブラリとかGUIライブラリなど拡張しているのが多いですからね。
GUIライブラリはものによっては複数のOSで提供されているものはあります。(QTやGTK+などはクロスプラットフォーム)
また、WideStudio/MWTの様にクロスプラットフォームに対応したものもあります。(その場合、各OSごとにコンパイルをやり直せば基本的には動きます。)
ありがとうございます。
各OSごとにコンパイルしなおすのがポイントみたいですね。
ちょっとそのほかのところはわかりませんでした。ANSIとかはわかります。
No.6
- 回答日時:
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です!!
No.5
- 回答日時:
コンパイラってのは「翻訳者」だよ。
LinuxとかMacとかってのは「国」だと思えば良いよ。
C言語という人が判る言葉をLinux国とかMac国の言葉に変換してくれる。
変換した国の言葉が、他の国と同じ筈ないでしょ?
No.3
- 回答日時:
C言語も含む「コンパイル言語」は「特定の環境用」の実行可能ファイルを生成する。
つまり、環境(OS)が違えば動かない。
また、環境専用のライブラリ(関数)なんかもあるわけで、
そういったものを利用したものはソースもコンパイルできないことがほとんど。
Windows上でMacやLinux用の実行ファイルを作ることも場合によっては可能だけど、
それは「クロスプラットフォーム」といって、作ったものはWindowsでは動作しない。
ありがとうございます。
コンパイルとは特定の環境用の実行可能ファイルを作ることなのですね。
環境専用のライブラリというのに特に注意が必要なこともわかりました。
No.2
- 回答日時:
動かない。
Mac用はMac上で、Linux用はLinux上で、Windows用はWindows上で、再コンパイルしないといけない。
で「違うパソコンでコンパイルする」んだから「使うコンパイラも違う」事になり「コンパイラが違えば動作も違う」って事になる。
「動作が違う」ってのは「動かない」と同義。
下手すると
#include <stdio.h>
int main(void)
{
printf("Hello world\n");
}
でさえ「同じには動かない」事もある。動かないどころか、コンパイルさえ出来ない事も。
じゃなかったら、ソフトハウスは「移植」で金取れないよ。
それぞれのOSで使えるコンパイラでコンパイルしないといけないのですね。
文章はテキストファイルだからOKということで。
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
<unistd.h>をVisualStudioでつ...
-
VC++6.0 で使用可能な、"Platfo...
-
Visual Basic.NETの処理速度は6...
-
コンパイル時のスイッチについて
-
c言語です コンパイルした時に...
-
notepad++でのコンパイル設定
-
arduinoのエラーメッセージ
-
プログラムのexe化
-
MVSマシンで0C7でABENDしたので...
-
VBで作成したOCXでバージョンが...
-
EXEファイルの逆コンパイル
-
exe書き込み時のエラーについて。
-
C言語のグローバル変数の初期...
-
#If True Then の # って何??
-
#defineとconstについて
-
共有ライブラリの内容確認について
-
自作DLLの中身を暗号化
-
gcc バージョン違いによるコン...
-
boostを利用したプログラムのコ...
-
C#で char型とstring型の比較で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
<unistd.h>をVisualStudioでつ...
-
アプリケーションのDLLファイル...
-
共有ライブラリの内容確認について
-
64ビットのlinuxで32ビットメモ...
-
プレコンパイルの意味を教えて...
-
math.hに含まれる関数が使えない
-
c言語です コンパイルした時に...
-
ビープ音が鳴りません・・・
-
C言語で、配列を使ったsinカー...
-
Cのコンパイルでコメントアウト...
-
すべてのリビルド: 0 正常、 0 ...
-
MVSマシンで0C7でABENDしたので...
-
Delphiでクラスをオブジェクト...
-
#If VBA7 Thenに関して
-
DLLは解読可能ですか
-
C#で char型とstring型の比較で...
-
[COBOL] ソースの復帰
-
gcc バージョン違いによるコン...
-
gccでc++プログラムをコンパイ...
-
シリアル通信の受信待ちについて
おすすめ情報