C言語はバイトオーダー等のハードウェア構造を意識しなければ
ソフトウェアの高い互換性と長い持続性を目指すPOSIX中心主義プログラミング
松浦 智之? 大野 浩之? 當仲 寛哲
https://www.ipsj.or.jp/dp/contents/publication/32/S0804-R1601.html
> C言語はバイトオーダ等のハードウェア構造を意識しなければならない.
なにこれ? C言語使う時はいちいちバイトオーダーとかハードウェア構造を気にしないといけないの? うん。それは知ってる。
リトルエンディアン/ビッグエンディアンを気にしないと
C言語は書けないの? 普通に内部処理してりゃ関係ないけど
ディスクにデータ書き込む時に表面化するな
同じソースなのにエンディアンの違う機種には書き込んだファイルが読めない 同じことの別の言い方を聞いたときに「あ、そういうことか」と思うこともあるので
あえて >>9 と同じことを言ううと
たとえばファイルフォーマット
データヘッダとしてファイル内のアドレスとデータサイズが各DWORDで
書いてあったとする
これを直接読み書きして問題ないのはバイトオーダーが合ってる場合のみ
1バイトを超えるバイト列を扱う場合には意識する必要がある >>10
もちろん自分用のプログラムを書くなら意識的に避けることはできる たとえば写真データのExifを読むのには意識する必要がある unionとかでビットフィールド使うときは移植の際に要注意 意識するのはクロスコンパイル前提のドライバなど低レベルライブラリの開発かなぁ ですよね。そんな事しない限りバイトオーダーなんて
気にしないですよね ああ、このスレの関連スレ?
金沢大学「シェルスクリプト言語論」は偽開発技術
https://mevius.5ch.net/test/read.cgi/tech/1632511262/
なんだか知らねえけど
変な大学に入っちゃったら自己責任でなんとかしろw この人なんでC言語はバイトオーダーやハードウェア構造を意識しなければ
いけないからシェルスクリプトでやれって言ってるんでしょうか?
シェルスクリプトの範囲であればバイトオーダーや
ハードウェア構造なんて気にする必要ないですよね? シェルスクリプトのレイヤー層では抽象化されてるから、ハード都合を意識せず記載できるから使えってことなんでね でもさC言語もハードウェアのレイヤーなんか意識しないんでしょ? いや確かにこいつの言ってることは怪しいけどさあ
そんないちいち揚げ足取りしてもどうにもならんでしょ まあ確かにソフトウェア業界には影響力はないわな
一部の騙された学生とか企業とかが苦しむ程度か C言語の標準入出力関数にはテキスト形式だけじゃなくなくてバイナリ形式で入出力を行うものが用意されているわけで、
バイトオーダーの問題を回避するためにテキスト形式の入出力だけを使うということ自体、バイトオーダーの問題を意識してるということではないだろうか?
この程度の簡単なプログラムでもバイトオーダーの影響で結果が変わってくるわけですよ
#include <stdio.h>
int main(){int a = 1; fwrite(&a, sizeof(a), 1, stdout);} >>22
OS上のアプリケーションも作れるし、ドライバーも作れるもんな 組み込みならね。
組み込みじゃないなら意識しない。 組み込みなら〜とか便利な言葉だな
ストリーミングサーバなんかで使うエンコーダやデコーダなんかでもバイトオーダめちゃくちゃ意識するんだけどこれも組み込みなの? いや、バイナリを扱う=バイトオーダーを意識するってことなんだから、
バイナリを扱わないならC言語でもバイトオーダーなんか意識しないでしょって話だよ この人の論理が破綻してる所は
シェルスクリプト vs C 言語のどちらがいいかって話で
C言語はバイトオーダーを意識する必要があるって書いてるが
C言語だからって常にバイトオーダーを意識する必要があるわけじゃないんだよ >>30
別に>>1の元ネタのシェルスクリプトで業務アプリとかやるのには全く賛成できないんだけど、
「C言語はバイトオーダ等のハードウェア構成を意識しなければならない」というのは特に間違ってないだろう
C言語はバイナリ操作が手軽でそのまま標準関数で入出力できる言語なんだし、そのバイナリを取り扱う面倒をさけるためにテキスト入出力しかしないというのはバイトオーダを意識してるんだよ C言語はハードウェアよりもOSを意識しないとダメなのがつらい
シェルスクリプトもそうだが
POSIXに準拠していても完全な互換性がないから >>33
> 「C言語はバイトオーダ等のハードウェア構成を意識しなければならない」というのは特に間違ってないだろう
そこだと切り取られても困る
C言語はバイトオーダ等のハードウェア構成を意識しなければならないから
シェルスクリプトを使いましょうと言っているが、
シェルスクリプトは元々バイナリが扱えないわけでシェルスクリプトで
出来る範囲であればC言語はバイトオーダーやハードウェア構成を意識する必要がない
シェルスクリプト vs C言語の話で、シェルスクリプトに有利な理由になってないという話 >>35
困ると言われても>>1にかいてあるのだが シェルスクリプトは絶対にバイナリ処理ができないわけでないけど普通に書く分にはバイトオーダ依存の処理なんて実装されることはほぼ無い
しかしC言語は>>25みたいにバイトオーダ依存の処理が簡単に書けてしまうわけで、これがそもそもバイトオーダー依存する処理だってのもバイトオーダーを理解してる人にしかわかんないわけよ
それだからテキストだけ使えって言っても初心者はテキストとバイナリの違いだってはっきり理解できてない
そういう面倒事がC言語にはあるっていうのは別に間違っていないだろう? ようするに>>1の私怨だろ?
大学入り直せばええやんw 今時のマイコンほぼリトルエンディアンなんでほぼ意識しなくても良くなったかも
ARMもMIPSなどどっちにも変えられるけどリトル設定にしてることがほとんどみたいだし
ネットワーク機器なんかntoh()とか使うとビッグの方が効率良いのにリトルになっとる事が多かった このスレを立てる背景がよくわからんが、OS上で動くC言語とほぼCPU真上で動くC言語は区別した方がいいよ。
OS上で動かす言語ならバイト云々なんて意識しなくてもどうにでもなる言語の方が需要あるし、ハードウェアレベルとなると逆にバイトオーダーレベルの細かい仕様は把握できないといけなくなる。
OSよりも下の階層レベルだと構造体のポインタに直接メモリ番地(数値)を代入してハードウェアを直接操作するコードはよくある
よって>>22の考えは違うと言わせてもらう OS上で動くアプリでも外部とファイルやネットワークでやり取りするならバイトオーダーを意識する場面もあるだろ
まあ最近はフレームワークやライブラリがよしなにやってくれてたりすることも多いけど