アプリ版:「スタンプのみでお礼する」機能のリリースについて

stdint.hを使うと、移植性の高いプログラムが書けるそうです。

このstdint.hというのはC99で作られたものらしいのですが、
これとよく似た性質を持つのが、glibにもあって型はgint8 とか
になるようです。C++だとBoostでこのような仕組みが実装されて
いるようです。

「各プラットフォームのメモリモデルが異なっていても、
同じプログラムが動く」というのが目的と考えて間違いないでしょうか。

また、この話題に関する書籍はどのようなものがありますか?
Web上にあるものは断片的でわかりにくいです。
C99かBoostかglib関連の本になるのでしょうか。
それとも移植に特化して本になるのでしょうか。

A 回答 (7件)

一口に移植性があるソースといっても、いろいろと要素がありますので


一言では表せません。
提示されている例で目論んでいるのはたぶん変数の大きさの
違いによる問題を防止しようとしてものだと思いますが、
移植の際に問題になるのはそれだけではありません。

質問にある「メモリモデル」とは具体的にどういったものを考えて
おっしゃってますか? プログラムでメモリモデルというと、
昔懐かしいMS-DOS用のプログラムの、tiny/small/medium/compact/large/huge

といったものについてのことが多いと思いますがそれですか?
ソースコードの移植性に関して詳しい説明のある本に以下のものがあります。

ライト・ポータブル・コード―複数プラットフォームに移植可能なソフトウェアの開発技法: 本: Brian Hook,鵜飼 文敏,田郷 明
http://amazon.jp/dp/4839919569
    • good
    • 0
この回答へのお礼

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

メモリモデルというのは~型は○バイトとかLP64, LLP64
などのことです。
http://www.oklab.org/language_c/lp64.html

・・・ここまで書いて気づいたのですが「データ」モデルでした。。
すいません

紹介していただいた書籍を一回本屋でチェックしてみます。

お礼日時:2007/09/22 13:14

stdint.hを使うと、必要なビット幅を持つ整数型を扱いやすくなりますが、それだけでただちに移植性が高くなるわけではありません。


たとえば、各型とint型との大小関係が分からないと、正確な動作を知ることができません。
具体的には、int_least16_t型を使って少なくとも16ビットを持つ型を得られたとしても、int型が16ビットの環境とそれより大きい環境では、整数拡張の振る舞いが変わります。
また、C++では、正確な型がわからないと、多重定義がどう解決されるかも分からなくなります。(それで問題が起きるような多重定義は避けるべきですが)

もちろん、移植性に絡む問題は整数型のサイズだけではありません。OSやハードウェアの制御に絡むところはもちろんですが、それ以外でもいろいろと注意しなければならないことが多数存在します。
    • good
    • 0
この回答へのお礼

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

移植性の高いプログラムを作る際には、質問している
データの型以外にも気にすべきことがあることは
知っています。
#サイトをいくつか眺めた程度ですが

これからいろいろと勉強していきたいと思います。

お礼日時:2007/09/22 13:16

移植性は色々な可能性を考えると次の様な事を考慮する必要があると思います。


・CPUの標準のビットサイズ、8ビットから64ビットまで。
・エンディアン問題。
・CPUコアの構成。マルチコアやヘテロジニアスコア等。
・OSの種類。マイコンではOSさえ存在しない可能性があります。mallocが使えるとは限りません。
・メモリ空間の広さ。マイコンだとRAM少量、ROM大容量といった構成が多いですね。
・CPUコア内の浮動小数点ハードウェアの存在の有無。
など色々考えないといけません。

まず、どこまでを含めるかをC/C++の機能とOSとハード面で限定しないと細かい話は難しいと思います。
    • good
    • 0
この回答へのお礼

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

難しい用語がたくさん出てきて・・。
移植に関してプログラミング初学者用の本とか
ないものでしょうか。

お礼日時:2007/09/23 11:12

>移植に関してプログラミング初学者用の本とかないものでしょうか。


プログラムミングの初心者が移植性の高いプログラムを書くことになる可能性は余りないですからね。
ハードとC言語の知識の両方が求められますので万能な資料はないと思います。
例えば、x86系CPUで32ビットモード限定、LinuxとWindows間でコード自体のOS依存性が低いなら難易度は格段に低くなります。

移植の本というとこの辺りですかね?
http://book.mycom.co.jp/book/4-8399-1956-9/4-839 …
目次です。
http://book.mycom.co.jp/MYCOM/html/book/4-8399-1 …
さすがに初心者向けの本とは言えないと思いますが。
    • good
    • 0
この回答へのお礼

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

>プログラムミングの初心者が移植性の高いプログラムを書くことに
>なる可能性は余りないですからね。
そういわれればそうかもしれません。。

紹介された本は本屋で立ち読みしてみたんですけど、
移植のためのトピックがずっと並べられている感じで
ちょっと難しそうでした。

お礼日時:2007/09/23 15:10

> C99かBoostかglib関連の本になるのでしょうか。



C99はともかく、BoostはC++用のものですし、glibが使える環境も限られています。

> それとも移植に特化して本になるのでしょうか。

移植性に特化した良書というのは、あまりありませんね。

プログラムの移植性を考えるとき、移植の可能性がある範囲を明確にすることが先決です。
例えば、8ビット~64ビット以上の環境すべてを網羅するとなると、当然、ホスト環境とフリースタンディング環境にまたがっての移植性を考慮することになります。また、移植しようとするのがアプリケーションなのか、ライブラリなのかにもよります。さらに、規格合致処理系の範囲なのか、それ以外も含めるのか、準拠する規格のバージョンをどこに合わせるのかによっても当然事情がかわってきます。

極端な話、フリースタンディング環境ではプログラムがmain関数から始まるとは限りませんので、アプリケーションレベルで完全な移植性を持つプログラムを書くことは、最初の第一歩からして不可能なことが分かるかと思います。

この回答への補足

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

ちょっと回答を見ても分からないことが多すぎます。
#私の知識不足で。。

プログラムの移植性を考えるにはまだ地盤となる知識が
大きく不足しているような気がしてきました。。

補足日時:2007/09/23 15:11
    • good
    • 0

> プログラムの移植性を考えるにはまだ地盤となる知識が


> 大きく不足しているような気がしてきました。。

質問者さんのスキルがどの程度か分かりませんが、少なくとも移植性のあるプログラムを書くには、一通りCでプログラムを書け、マイコンも含めて複数の環境を経験していることが必須です。
その上で、下手な書籍を読むより、規格書に目を通すことで、どうすれば移植性の高いコードが書けるのかが見えてくるはずです。

基本的な経験や素養が欠けていると、どんなに本を読んだところで、それを正しく理解することはできないでしょうし、仮に初心者向けの移植性に関する本を書いたとしても、具体的に踏み込んだ内容まで触れられずに、概論だけで終わってしまうことでしょう。
    • good
    • 0
この回答へのお礼

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

>少なくとも移植性のあるプログラムを書くには、一通りCでプログラム>を書け、マイコンも含めて複数の環境を経験していることが必須です。
これらの経験がありません。
もっといろいろな環境でプログラミングを経験した後にもう一度考えます

お礼日時:2007/09/26 22:00

ところで、何らかの目標(ターゲット)があって移植性の高いプログラムを書こうとしてますか?漠然と移植性が高いプログラムは、機能を制限するしかありませんし、機能制限しすぎるとプログラムに何の機能も搭載できません。


例えば、組み込み用(家電製品など)のワンチップマイコンをターゲットにしてしまうとfopenやprintfでさえ基本状態では使えないので入出力の移植性はまったくありません。
普通は、移植性が高くて高機能のアプリ作るためには、移植性を保つために入出力とアプリの中間に挟むライブラリでハードやOSの違いを吸収してやる必要があります。当然そのライブラリは機種依存性が高く、ターゲットごとに作ってやる必要が出てきます。

移植性の高いプログラムを提案できるプログラマになる道は、様々なOSやCPUでプログラムを書いてみて違いを理解し、アプリごとに最適な中間ライブラリのインターフェイスを提案できるようになることです。
早道はありませんので、がんばってください!
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
目標はありません。目的を達成するためにどうしていくかを
手段を取捨選択するみたいですね

お礼日時:2007/09/26 22:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!