ページ 1 / 1
可搬性
Posted: 2009年8月18日(火) 23:29
by kamiya
C言語の参考書を使っていくと所々に
「プログラムは出来るだけ可搬性が高くなるように実現せよ」
というような事が書かれているのですが、この可搬性が高いというのは、
処理系に依存しない。とか、他の言語への移植がしやすい。または互換性がある。
などのように理解すればよいのでしょうか?
また可搬性の重要性についてもご教授していただければ幸いです。
所々で主張されているので重要なことなのだろうとは思うのですが、具体的にどのように重要なのかがいまひとつ掴めません。
Re:可搬性
Posted: 2009年8月18日(火) 23:57
by array
> 処理系に依存しない。とか、他の言語への移植がしやすい。または互換性がある。
可搬性を辞書で調べたら移植性と出てきたので間違っていないと思います。
個人的なプログラムであれば、そんなに気にしなくても良いと思いますが・・・
可搬性の重要性は、例えば「スーパーファミコン」で使える『ファイナルファンタジー』というゲームが人気があり「プレイステーション」でも発売しようという企画が持ち上がった場合。
「スーパーファミコン」の『ファイナルファンタジー』のプログラムを、「プレイステーション」でも使えるに様にプログラムを少しだけ変える程度ですむのなら簡単に実現します。
しかし、可搬性が低いと、プログラムを最初から最後まで書き直さないといけないという事になるので、とても労力を使うことになります。
多分ですけど、C言語の参考書が初心者レベルなら『汎用性』の事を言ってるのではないでしょうか。
『汎用性』は重視する必要性がありますが、初心者レベルで可搬性を気にする必要はまったく無いと思います。
Re:可搬性
Posted: 2009年8月19日(水) 09:10
by ねこ
<この可搬性が高いというのは処理系に依存しない。とか、他の言語への移植がしやすい。または互換性がある。
arrayさんの意見と異なりますが、教本の言いたい事は「他プログラムにコピペしても動くようなもの」ではないでしょうか。
例えば計算用関数や判定関数にはグローバル変数を使わず、コピペした後「呼び出さなくてもコンパイルエラーにはならない」程度の汎用性を持つ事など。
あくまでC言語の範囲での話ではないかな、と。
他言語までの移植性となると、他言語を習得しているという前提になりますし参考書でそのような意図はあまり書かないんじゃないかな、と思います。
Re:可搬性
Posted: 2009年8月19日(水) 09:11
by Haru
私もまだまだ、初心者レベルですので、大した事はいえませんが、
arrayさんのおっしゃるとおり、そこまで気にする必要はないかと思います。
誰が見てもわかりやすい
という事を気にすれば良いかと。
Re:可搬性
Posted: 2009年8月19日(水) 10:38
by YuO
可搬性を高く,と言われた場合,非標準の動作や関数にできるだけ依存せずに作る事を考えます。
有名所で,
fflush(stdin);
があります。
可搬性を無視してVisual C++の現行バージョンのみにフォーカスするなら,
MSDN: fflush
http://msdn.microsoft.com/ja-jp/library/9yky46tz(VS.90).aspx
の,
> ストリームが入力用として開いている場合、fflush はバッファの内容を消去します。fflush は、stream に対する前回の ungetc の呼び出しの結果をすべて無効にします。
を期待して記述できます。
ところが,本来fflushを入力ストリームに対して使われた場合,規格上の動作としては未定義とされていますから,上記の記述は可搬性のある記述にはなりません。
まぁ,どうしても処理系に依存する部分は出てくるのは確かですが。
なので,有名ライブラリはどこかに山のような#ifによる処理系差の吸収部分があったりします。
> 他プログラムにコピペしても動くようなもの
違うでしょうね。通常,それを可搬性とは呼びません。
どちらかというと,モジュールの独立性に関わる問題でしょうか。
# コピペすること自体が悪手であることが多いですが。
Re:可搬性
Posted: 2009年8月20日(木) 23:23
by kamiya
様々な意見をありがとうございました。
とても参考になりました。