C言語はバイトオーダー等のハードウェア構造を意識しなければ at TECH
[2ch|▼Menu]
1:デフォルトの名無しさん
22/03/30 11:15:14.82 fkeGWoGM.net
ソフトウェアの高い互換性と長い持続性を目指すPOSIX中心主義プログラミング
松浦 智之? 大野 浩之? 當仲 寛哲
URLリンク(www.ipsj.or.jp)
> C言語はバイトオーダ等のハードウェア構造を意識しなければならない.
なにこれ?

2:デフォルトの名無しさん
22/03/30 12:14:40.76 +aXwEqsZ.net
ゆで卵をアタマから食うか尻から食うか

3:デフォルトの名無しさん
22/03/30 12:31:33.83 fkeGWoGM.net
C言語使う時はいちいちバイトオーダーとかハードウェア構造を気にしないといけないの?

4:デフォルトの名無しさん
22/03/30 12:35:25.28 +aXwEqsZ.net
結局、ICはスイッチだから機能に対して向きもある

5:デフォルトの名無しさん
22/03/30 12:38:11.60 fkeGWoGM.net
C言語の話?

6:デフォルトの名無しさん
22/03/30 12:43:18.16 +aXwEqsZ.net
エンディアンの話

7:デフォルトの名無しさん
22/03/30 12:44:07.38 L9hJPayk.net
リトルエンディアン/ビッグエンディアン

8:デフォルトの名無しさん
22/03/30 12:49:08.60 fkeGWoGM.net
うん。それは知ってる。
リトルエンディアン/ビッグエンディアンを気にしないと
C言語は書けないの?

9:デフォルトの名無しさん
22/03/30 13:23:16.55 gwqJN53A.net
普通に内部処理してりゃ関係ないけど
ディスクにデータ書き込む時に表面化するな
同じソースなのにエンディアンの違う機種には書き込んだファイルが読めない

10:デフォルトの名無しさん
22/03/30 13:32:20.45 fkeGWoGM.net
テキスト形式で書き込めば関係なくね?

11:デフォルトの名無しさん
22/03/30 13:35:18.87 L9hJPayk.net
同じことの別の言い方を聞いたときに「あ、そういうことか」と思うこともあるので
あえて >>9 と同じことを言ううと
たとえばファイルフォーマット
データヘッダとしてファイル内のアドレスとデータサイズが各DWORDで
書いてあったとする
これを直接読み書きして問題ないのはバイトオーダーが合ってる場合のみ
1バイトを超えるバイト列を扱う場合には意識する必要がある

12:デフォルトの名無しさん
22/03/30 13:37:29.04 L9hJPayk.net
>>10
もちろん自分用のプログラムを書くなら意識的に避けることはできる

13:デフォルトの名無しさん
22/03/30 13:40:26.00 L9hJPayk.net
たとえば写真データのExifを読むのには意識する必要がある

14:デフォルトの名無しさん
22/03/30 13:43:29.15 L9hJPayk.net
>>13
もちろん書く場合も

15:デフォルトの名無しさん
22/03/30 13:48:03.21 +aXwEqsZ.net
unionとかでビットフィールド使うときは移植の際に要注意

16:デフォルトの名無しさん
22/03/30 14:09:13.35 fkeGWoGM.net
でもそれすべてバイナリデータを扱う時の話だよね?

17:デフォルトの名無しさん
22/03/30 14:39:07.84 +aXwEqsZ.net
意識するのはクロスコンパイル前提のドライバなど低レベルライブラリの開発かなぁ

18:デフォルトの名無しさん
22/03/30 14:58:23.09 fkeGWoGM.net
ですよね。そんな事しない限りバイトオーダーなんて
気にしないですよね

19:デフォルトの名無しさん
22/03/30 15:04:32.39 gwqJN53A.net
ああ、このスレの関連スレ?
金沢大学「シェルスクリプト言語論」は偽開発技術
スレリンク(tech板)
なんだか知らねえけど
変な大学に入っちゃったら自己責任でなんとかしろw

20:デフォルトの名無しさん
22/03/30 15:08:00.97 fkeGWoGM.net
この人なんでC言語はバイトオーダーやハードウェア構造を意識しなければ
いけないからシェルスクリプトでやれって言ってるんでしょうか?
シェルスクリプトの範囲であればバイトオーダーや
ハードウェア構造なんて気にする必要ないですよね?

21:デフォルトの名無しさん
22/03/30 15:35:46.15 +aXwEqsZ.net
シェルスクリプトのレイヤー層では抽象化されてるから、ハード都合を意識せず記載できるから使えってことなんでね

22:デフォルトの名無しさん
22/03/30 17:24:07.81 fkeGWoGM.net
でもさC言語もハードウェアのレイヤーなんか意識しないんでしょ?

23:デフォルトの名無しさん
22/03/30 17:26:54.33 gwqJN53A.net
いや確かにこいつの言ってることは怪しいけどさあ
そんないちいち揚げ足取りしてもどうにもならんでしょ

24:デフォルトの名無しさん
22/03/30 18:16:39.21 fkeGWoGM.net
まあ確かにソフトウェア業界には影響力はないわな
一部の騙された学生とか企業とかが苦しむ程度か

25:デフォルトの名無しさん
22/03/30 20:38:43.15 sFfsK7BI.net
C言語の標準入出力関数にはテキスト形式だけじゃなくなくてバイナリ形式で入出力を行うものが用意されているわけで、
バイトオーダーの問題を回避するためにテキスト形式の入出力だけを使うということ自体、バイトオーダーの問題を意識してるということではないだろうか?
この程度の簡単なプログラムでもバイトオーダーの影響で結果が変わってくるわけですよ
#include <stdio.h>
int main(){int a = 1; fwrite(&a, sizeof(a), 1, stdout);}

26:デフォルトの名無しさん
22/03/30 20:47:04.02 5c0dL4VW.net
>>22
OS上のアプリケーションも作れるし、ドライバーも作れるもんな

27:デフォルトの名無しさん
22/03/31 12:20:55.10 Nn45qqFI.net
組み込みだと普通に意識するやん

28:デフォルトの名無しさん
22/03/31 18:01:42.71 HOrOqlSI.net
組み込みならね。
組み込みじゃないなら意識しない。

29:デフォルトの名無しさん
22/03/31 18:28:18.54 1zp5+ia0.net
組み込みなら〜とか便利な言葉だな
ストリーミングサーバなんかで使うエンコーダやデコーダなんかでもバイトオーダめちゃくちゃ意識するんだけどこれも組み込みなの?

30:デフォルトの名無しさん
22/03/31 18:39:19.71 jJxlTIZ+.net
いや、バイナリを扱う=バイトオーダーを意識するってことなんだから、
バイナリを扱わないならC言語でもバイトオーダーなんか意識しないでしょって話だよ

31:デフォルトの名無しさん
22/03/31 18:42:15.07 jJxlTIZ+.net
この人の論理が破綻してる所は
シェルスクリプト vs C 言語のどちらがいいかって話で
C言語はバイトオーダーを意識する必要があるって書いてるが
C言語だからって常にバイトオーダーを意識する必要があるわけじゃないんだよ

32:デフォルトの名無しさん
22/03/31 18:45:17.68 tugEDnGH.net
バイナリ互換がいるか?って話に落ち着くだけでしょ

33:デフォルトの名無しさん
22/03/31 18:49:38.45 1zp5+ia0.net
>>30
別に>>1の元ネタのシェルスクリプトで業務アプリとかやるのには全く賛成できないんだけど、
「C言語はバイトオーダ等のハードウェア構成を意識しなければならない」というのは特に間違ってないだろう
C言語はバイナリ操作が手軽でそのまま標準関数で入出力できる言語なんだし、そのバイナリを取り扱う面倒をさけるためにテキスト入出力しかしないというのはバイトオーダを意識してるんだよ

34:デフォルトの名無しさん
22/03/31 18:49:43.81 14SAbWP9.net
C言語はハードウェアよりもOSを意識しないとダメなのがつらい
シェルスクリプトもそうだが
POSIXに準拠していても完全な互換性がないから

35:デフォルトの名無しさん
22/03/31 18:51:44.16 1XbTtNuk.net
>>33
> 「C言語はバイトオーダ等のハードウェア構成を意識しなければならない」というのは特に間違ってないだろう
そこだと切り取られても困る
C言語はバイトオーダ等のハードウェア構成を意識しなければならないから
シェルスクリプトを使いましょうと言っているが、
シェルスクリプトは元々バイナリが扱えないわけでシェルスクリプトで
出来る範囲であればC言語はバイトオーダーやハードウェア構成を意識する必要がない
シェルスクリプト vs C言語の話で、シェルスクリプトに有利な理由になってないという話

36:デフォルトの名無しさん
22/03/31 18:53:52.46 1zp5+ia0.net
>>35
困ると言われても>>1にかいてあるのだが

37:デフォルトの名無しさん
22/03/31 19:05:15.51 1zp5+ia0.net
シェルスクリプトは絶対にバイナリ処理ができないわけでないけど普通に書く分にはバイトオーダ依存の処理なんて実装されることはほぼ無い
しかしC言語は>>25みたいにバイトオーダ依存の処理が簡単に書けてしまうわけで、これがそもそもバイトオーダー依存する処理だってのもバイトオーダーを理解してる人にしかわかんないわけよ
それだからテキストだけ使えって言っても初心者はテキストとバイナリの違いだってはっきり理解できてない
そういう面倒事がC言語にはあるっていうのは別に間違っていないだろう?

38:デフォルトの名無しさん
22/03/31 21:08:12.08 e9H7Xidu.net
もう、私でケンカしないで

39:デフォルトの名無しさん
22/03/31 22:11:27.32 5Yq0ECbn.net
ようするに>>1の私怨だろ?
大学入り直せばええやんw

40:デフォルトの名無しさん
22/03/31 22:23:37.46 KlsfaVvh.net
>>38はインディアン

41:デフォルトの名無しさん
22/03/31 23:22:02.12 UqKMXvAt.net
エンディアン嘘つかない
良い子になれる

42:デフォルトの名無しさん
22/04/01 00:18:13.91 Ae5LIMUi.net
>>39
うるせばーか

43:デフォルトの名無しさん
22/04/02 10:18:05.54 E0DnQUo6.net
今時のマイコンほぼリトルエンディアンなんでほぼ意識しなくても良くなったかも
ARMもMIPSなどどっちにも変えられるけどリトル設定にしてることがほとんどみたいだし
ネットワーク機器なんかntoh()とか使うとビッグの方が効率良いのにリトルになっとる事が多かった

44:組み込み開発者
22/05/07 21:57:55 AU+CR0Z8.net
このスレを立てる背景がよくわからんが、OS上で動くC言語とほぼCPU真上で動くC言語は区別した方がいいよ。
OS上で動かす言語ならバイト云々なんて意識しなくてもどうにでもなる言語の方が需要あるし、ハードウェアレベルとなると逆にバイトオーダーレベルの細かい仕様は把握できないといけなくなる。

OSよりも下の階層レベルだと構造体のポインタに直接メモリ番地(数値)を代入してハードウェアを直接操作するコードはよくある
よって>>22の考えは違うと言わせてもらう

45:デフォルトの名無しさん
22/05/07 22:33:01.65 VIkA7BGO.net
OS上で動くアプリでも外部とファイルやネットワークでやり取りするならバイトオーダーを意識する場面もあるだろ
まあ最近はフレームワークやライブラリがよしなにやってくれてたりすることも多いけど


最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

749日前に更新/11 KB
担当:undef