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