[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 10/29 23:41 / Filesize : 272 KB / Number-of Response : 1007
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C言語なら俺に聞け 161



1 名前:デフォルトの名無しさん (ワッチョイ 0f63-sFbk) mailto:sage [2023/04/21(金) 14:05:20.18 ID:rqj2HSDF0.net]
!extend:checked:vvvvv:1000:512
(新スレ立ての際上記コマンドを2行書き込んでください)
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
codepad.org/

C17
www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4713.pdf

C11
www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf

C23 最新ドラフト
https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3047.pdf

C99
www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
kikakurui.com/x3/X3010-2003-01.html

C FAQ 日本語訳
www.kouno.jp/home/c_faq/

JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/

※前スレ
C言語なら俺に聞け 160
https://mevius.5ch.net/test/read.cgi/tech/1672191630/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured

582 名前:デフォルトの名無しさん (ワッチョイ ffad-5+Xn) [2023/09/02(土) 00:41:32.42 ID:VX6uRHRw0.net]
farポインタみたいにバイト数の違うポインタも混在していたら余計にややこしい問題に・・・

583 名前:デフォルトの名無しさん (テテンテンテン MM7f-cJIa) mailto:sage [2023/09/02(土) 01:01:48.59 ID:WsIZ4FVlM.net]
例えばFILE*とshort*ならアドレスのアライメントが合わない場合があるだろうけど、これはそもそも型が適合しないわけでどうしようもない
でも、今考えたらvoid*はありとあらゆるアドレスを取る可能性が有るから、それに合うのはchar*しかないよ、ということを言いたかったのだろうなと気付いた
でも規格書を見ても、FILE*とvoid*が適合するかどうかはアンドキュメンテッドだなw
現実には((void*)0)とFILE*は完全に適合してるけどね

584 名前:551 (ワッチョイ 2320-+GqY) mailto:sage [2023/09/02(土) 06:58:16.01 ID:XjF1xIbI0.net]
ここにこう書いてあるからには、何か(通常の関数呼び出しでは
問題にならないが)可変長引数特有の問題があり、
それを避けるためにこうしたのだろう、と思った訳です。

585 名前:デフォルトの名無しさん (スプープ Sd1f-I+Vk) mailto:sage [2023/09/02(土) 11:49:29.07 ID:+azsBNOBd.net]
>>579
そんな保証はまったくない
例えばmallocの場合戻り値は「あらゆる組み込み型に対応できるようにアラインメントされる」と特に注釈されている
逆に言えばvoid*はどんなポインタにキャストしても安全と思い込みがちだがそんなことはないということ

>>582
通常の呼び出しなら型チェックが働くが可変長呼び出しでは一切働かないという注意だろう
最近のprintfは型チェックされるようになってるけど

586 名前:デフォルトの名無しさん (ワッチョイ cf63-yzHn) mailto:sage [2023/09/02(土) 11:59:23.66 ID:R1w1jy3B0.net]
安全かどうかは、環境によるんじゃ

587 名前:デフォルトの名無しさん (スプープ Sd1f-I+Vk) mailto:sage [2023/09/02(土) 12:34:31.87 ID:DeBIPPsBd.net]
「環境による」のは安全ではないんだよ
ここで取り上げられてるのは大元の公式文書なのであらゆる環境について言えることが書いてある

588 名前:デフォルトの名無しさん (ワッチョイ cf63-yzHn) mailto:sage [2023/09/02(土) 12:59:05.22 ID:R1w1jy3B0.net]
マイナーなCPUのことなんか気にしたことがなかったな

589 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 133e-A0va) mailto:sage [2023/09/02(土) 13:12:11.45 ID:Ng1Dtdjk0.net]
>>584
現在の文脈では「言語仕様をそう決めた理由」が主題。

だからその前提として言語仕様が保証している範囲がどこまでかを
理解しておく必要があって、そこで見当違いの主張に反論がされている
という話の流れ。

590 名前:デフォルトの名無しさん (スプープ Sd1f-I+Vk) mailto:sage [2023/09/02(土) 14:05:43.49 ID:DeBIPPsBd.net]
>>586
「可搬性」という概念はCでは大事
マイナーなCPUのみならず将来的に登場する高性能だが制限が多いCPUでも手直しせずに動かせるということもあるかもしれない



591 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 133e-QWOy) mailto:sage [2023/09/02(土) 14:41:25.26 ID:Ng1Dtdjk0.net]
必要なら環境依存なことをしやすいのも C の良いところだが
不必要な依存は避けるに越したことはないわな

592 名前:デフォルトの名無しさん (アウアウウー Sae7-fXI3) [2023/09/02(土) 14:45:40.34 ID:mCX3wjBNa.net]
FILE *fp = fopen(...);
void *hoge = (void *)fp;
FILE *fuga = (FILE *)hoge;
みたいなことは禁止されてる?

593 名前:デフォルトの名無しさん (スプープ Sd1f-I+Vk) mailto:sage [2023/09/02(土) 14:59:50.63 ID:wu0IBgrgd.net]
どうしても必要ならやるしかない
ただfopenの戻り値でFILE構造体の安全性が保証されてるのにわざわざvoid*に代入してからFILE*に戻すのは
正統な金なのに闇銀行に預けて再びマネーロンダリングするような変な手間だ

594 名前:デフォルトの名無しさん (ラクッペペ MM7f-ymsf) mailto:sage [2023/09/02(土) 15:08:48.05 ID:68c+QhTKM.net]
void *型って参照する先の変数のサイズが不明なので右辺値になるのは不可能な気がするけどな
キャストは無理でしょ

595 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 133e-QWOy) mailto:sage [2023/09/02(土) 15:12:41.39 ID:Ng1Dtdjk0.net]
>>590
オブジェクトを指す (つまり関数ポインタではない) ポインタを
void* に変換してから元の型に変換すると
元のオブジェクトと等しいことは保証されている。

596 名前:デフォルトの名無しさん (アウアウウー Sae7-fXI3) [2023/09/02(土) 15:26:23.14 ID:mCX3wjBNa.net]
>>592
void じゃなくてもいいや
FILE *fp = fopen(...);
char *hoge = (char *)fp;
FILE *fuga = (FILE *)hoge;
みたいなことは禁止されてる?

597 名前:デフォルトの名無しさん (スプープ Sd1f-I+Vk) mailto:sage [2023/09/02(土) 15:40:22.87 ID:iw53wgLpd.net]
>>592
なんで?
ポインタはメモリ上の一点を指すもので
インクリメントデクリメントが不可能なだけで
キャストは可能

>>594
いったい何が聞きたいんだ?
禁止はされてないよ
ただこれ見たプログラマは皆「バカだなあw」とは言うだろうw

598 名前:デフォルトの名無しさん (ワッチョイ 7310-/gcr) mailto:sage [2023/09/02(土) 15:52:38.82 ID:f6/YEIJg0.net]
言葉をちゃんと使うとプログラマ意思疎通がよくなるのでは。
「void * が右辺値になるのは無理」って何だよ。ではなく、正常動作はプログラマの責任になる、って言いたかったんじゃないの?


>>590 みたいなコードは、これだけなら疑問に思うだろうが、こういうコードが有効になる事はあるよ。その一例は

「ここで言うFILE* みたいなモノが複数種類あり」
送信側 - 中継機能 - 受信側
のプログラム構造で送受信のペアは複数あり、中継機能には 実際の中身が何なのかは意識させたくない。

----
ポインタの話から外れて恐縮だが、
例としてタグ・レングス・バリュー形式ってのがあって、「中継者は送受信データがTLV形式の連続であることだけは知っていて」「TとLのサイズは一定」「タグの種類が何種類あるかなんて知らなくていい」
----

これにさらにポインタを含むデータ構造を通信可能にするには?って話で、ポインタ型をバッファ内インデックス値に変換して、ポインタが指す中身も通信データに含める、とか、
サブ構造がポインタ持ってたら再帰的に処理する、とか話は続くが
それはいいとして

>>590 みたいなコードは、現実にはあるよ。という話

599 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 133e-QWOy) mailto:sage [2023/09/02(土) 16:04:16.63 ID:Ng1Dtdjk0.net]
>>594
オブジェクトを指すポインタは char* (またはその他の文字型をさすポインタ) へ変換することは許されるし文字配列として読んでもよい。 (読んだ結果としてどういうレイアウトになってるかはわからんけど。)

そしてもとの型に型変換したら変換前と等しいことも保証される。

600 名前:デフォルトの名無しさん (スプープ Sd1f-I+Vk) mailto:sage [2023/09/02(土) 16:06:19.94 ID:Yxb8XUhFd.net]
たしかに言い方が悪かったので

>>592
ポインタは元々サイズは無いもので
対象オブジェクトの先頭アドレスの一点だけを指してるから
void*を含むどんなポインタもキャストすれば力づくで代入できる
ただvoid*にはサイズがないのでinc dec(加減演算)をしようとするとエラーになる

>>594
どんなキャストも禁止されてはいないが
プログラマの責任によって成される最後の手段だと思ったほうがいい
見つかりにくいバグの原因になるので
ソースにコメントで理由を明示しておいたほうがいい



601 名前:デフォルトの名無しさん (ワッチョイ 7310-/gcr) mailto:sage [2023/09/02(土) 16:12:48.48 ID:f6/YEIJg0.net]
うーん
まだまだ添削できる余地があるぞ…

ここはまあ無料掲示板だが、仕事では、自分には誤解をされやすい性質がある、と意識しなされ

602 名前:デフォルトの名無しさん (スプープ Sd1f-I+Vk) mailto:sage [2023/09/02(土) 16:50:14.84 ID:JxIOKPq6d.net]
アハハ
なんだこの人w

603 名前:デフォルトの名無しさん (ワッチョイ cf63-yzHn) mailto:sage [2023/09/02(土) 17:10:38.18 ID:R1w1jy3B0.net]
ここでお金稼ぎしている人いたっけなw

604 名前:デフォルトの名無しさん (ワンミングク MM9f-hgj0) mailto:sage [2023/09/02(土) 21:43:01.25 ID:5XlbVKpsM.net]
もりたぼ稼ごうとした人はいた

605 名前:デフォルトの名無しさん (ワッチョイ b35f-RK05) [2023/09/02(土) 22:10:43.72 ID:9Zs5bzSj0.net]
ポインタの宣言は、ポインタの型じゃなくて、ポインタが指しているアドレスの格納値をどう扱うつもりなのかを明示している。

void型のポインタは、ポインタだから、何型のポインタだから、64ビットだったり、32ビットだったりするものではない。

606 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 133e-A0va) mailto:sage [2023/09/03(日) 13:47:13.05 ID:ApaaLf4l0.net]
>>603
同じでなければならないという規定はない。
実際に異なる実装が存在するのかどうかは知らんけど。

607 名前:デフォルトの名無しさん (スププ Sd1f-ETx6) [2023/09/04(月) 07:48:03.87 ID:63U36j7Od.net]
>>594
void void * 登場前の C は
FILE *fp = fopen(...);
int *hoge = (int *)fp;
FILE *fuga = (FILE *)hoge;
だったんじゃないかな

608 名前:デフォルトの名無しさん (ワッチョイ 8310-g4sH) mailto:sage [2023/09/04(月) 07:53:14.39 ID:YGQMN8Uj0.net]
設計当時はアセンブラの代替言語。

609 名前:デフォルトの名無しさん (スッププ Sd1f-I+Vk) mailto:sage [2023/09/04(月) 09:48:09.59 ID:R5PUsxPld.net]
>>605

基本はcharだからchar *hoge = (char *)fp;じゃない
なんならint hoge = (int )fp;でもよかった
ほとんどの場合intとポインタのサイズが同じだった

610 名前:デフォルトの名無しさん (アウアウウー Sae7-fXI3) [2023/09/04(月) 10:04:32.23 ID:/ASAZOX6a.net]
>>607 みたいなのがいるから void が出来たんだよ



611 名前:デフォルトの名無しさん (スプッッ Sd87-IP2U) mailto:sage [2023/09/04(月) 11:07:54.13 ID:gab4BDOud.net]
因果逆転だな

612 名前:デフォルトの名無しさん (ワッチョイ 7310-/gcr) mailto:sage [2023/09/04(月) 11:19:05.30 ID:Ww8QJvvD0.net]
>>607
ウソはだめだ。
俺が見逃しても、はちみつ先生に定規でケツはたかれるぞ

613 名前:デフォルトの名無しさん (ワッチョイ 7310-/gcr) mailto:sage [2023/09/04(月) 11:24:33.03 ID:Ww8QJvvD0.net]
そういえば、むかーしの情報処理試験には言語選択でマシン語ってのがあって、1メモリアドレス値が指すメモリは 8bit 幅ではなく、 16bit だったように記憶してる。
「特殊な環境を想定しやがって…」と思ったナカマいない?

614 名前:デフォルトの名無しさん (ワッチョイ 8310-g4sH) mailto:sage [2023/09/04(月) 11:27:19.73 ID:YGQMN8Uj0.net]
試験用アセンブラはCASLだったっけ?
仮想環境で実在しない環境用言語だって。

615 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 133e-A0va) mailto:sage [2023/09/04(月) 12:00:00.02 ID:p8KSFCIf0.net]
>>610
char* はどのポインタからも変換できるし
元の型に変換すれば元のポインタと等しいことは保証される。
好ましいとは言えないが変換自体は問題ない。
void* 登場前には (void* 的なことが必要なら) char* が使われていたのは本当だ。

ポインタから整数へも型変換できることは明記されてる。
その結果は処理系定義だが、出来る環境でやるのが悪いわけじゃない。

char* やら int やらで扱ってたら間違った取り扱いをしやすいので
可能なら避けたほうがよくは有るが、 >>607 が言及した範囲には
明瞭に間違いと言えるものは見つけられない。

616 名前:デフォルトの名無しさん (テテンテンテン MM7f-cJIa) mailto:sage [2023/09/04(月) 12:00:22.47 ID:5denWoTkM.net]
メモリが8bitって何も出来ないぞw

617 名前:デフォルトの名無しさん (ラクッペペ MM7f-ymsf) mailto:sage [2023/09/04(月) 12:05:38.98 ID:QM+pFggQM.net]
アドレス範囲ではなくてデータ長が16ビットだったと思う

618 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 133e-A0va) mailto:sage [2023/09/04(月) 12:09:35.09 ID:p8KSFCIf0.net]
>>611
C の仕様上の用語では「バイト」が 8bit とは限らない定義になっている。
C の仕様で想定する必要がある程度にはそういう環境もあったのだろうし、
主流ではないにしても特殊というほどの感じでもなかったんちゃうか?

まあ「昔」をいつ頃に想定するかにもよるだろうけど。

619 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 133e-A0va) mailto:sage [2023/09/04(月) 12:24:06.96 ID:p8KSFCIf0.net]
>>612
たぶんだけど >>611 が言うのは CASL の前身である CAP-X のことじゃないか?
16bit 単位でアドレスが振られる設計だったはず。

620 名前:デフォルトの名無しさん (ワッチョイ 93c9-oCRc) mailto:sage [2023/09/04(月) 14:04:31.55 ID:F3cE7vUV0.net]
7bitでアルファベットは表せてたしねぇ
文字集合で完結させてた RFC822



621 名前:デフォルトの名無しさん (ワッチョイ 6f5f-ATpV) mailto:sage [2023/09/04(月) 20:56:26.82 ID:MxCwE5tq0.net]
実際に1バイトが8ビットじゃないマシンで仕事してた人いる?
経験談を聞いてみたい
つらそう

622 名前:デフォルトの名無しさん (ワッチョイ b302-jP38) mailto:sage [2023/09/04(月) 21:41:24.34 ID:TqSqVDXY0.net]
何がつらいの?

623 名前:デフォルトの名無しさん (スッププ Sd1f-I+Vk) mailto:sage [2023/09/04(月) 22:35:30.73 ID:yuyUlcPSd.net]
UNIXとか基本9ビットが見え隠れしてる気がする
ファイルのパーミッション---rwxrwxとか
C数値のデフォルトが8進数とか(9ビットなら8進数3ケタでまとまりがいい)

624 名前:デフォルトの名無しさん (ワッチョイ cf63-yzHn) mailto:sage [2023/09/04(月) 22:55:40.14 ID:ljnGjc/80.net]
あれは9ビットだったのか

625 名前:デフォルトの名無しさん (テテンテンテン MM7f-cJIa) mailto:sage [2023/09/04(月) 23:38:31.34 ID:5denWoTkM.net]
1バイト9bitとか完全に都市伝説だろ…
1ワード(レジスタ)が36bitとかはLispマシーンで使われたりしてたけどね

626 名前:デフォルトの名無しさん (ワッチョイ 23f0-BDBD) mailto:sage [2023/09/06(水) 06:22:01.74 ID:r3vK0XzD0.net]
char が16bitの環境なら使ったことがある

627 名前:デフォルトの名無しさん (ワッチョイ 4301-yzHn) mailto:sage [2023/09/06(水) 07:02:16.45 ID:Mh27mgbM0.net]
そういうのってどんなCPUなの?

628 名前:デフォルトの名無しさん (ワッチョイ cfcf-ATpV) [2023/09/06(水) 09:37:16.14 ID:EGh1VJfR0.net]
とりあえずDSPなんかはそうでしょ
ワードマシンって言っちゃっていいか知らんけど、演算の速度をあげるためにワード幅を一番使いそうなビット数にして全部ワード単位でアクセスする設計にしてる
マニュアルにアドレス、char幅、int幅全部同じ何々ビットです注意してねみたいなのがご丁寧に書いてあったりするよ

629 名前:デフォルトの名無しさん (スフッ Sd1f-ETx6) [2023/09/06(水) 11:10:12.82 ID:QkmiSIQgd.net]
>>622
12bit以上必要だったはず

630 名前:デフォルトの名無しさん (ワッチョイ 7310-/gcr) mailto:sage [2023/09/06(水) 11:35:53.69 ID:HQrnJbDO0.net]
>>626
勉強になります
DSP触った事ないや



631 名前:デフォルトの名無しさん (ワッチョイ cfab-oCRc) mailto:sage [2023/09/06(水) 12:07:23.88 ID:TIQAYIu40.net]
>>626
float 幅に全揃え
アドレッシングもその単位なのでどうしても細かい粒度で個別に演算処理したい時はビットシフト併用
とかあったなぁ

632 名前:デフォルトの名無しさん (ラクッペペ MM7f-gKm6) mailto:sage [2023/09/06(水) 15:01:09.34 ID:7li0jtwXM.net]
よく分からんけどDSPの内部レジスタって直接浮動少数点数が扱えるのか
floatは符号1bit + 指数部8bit +仮数部23bitの32bit長だっけ?
ただ浮動少数点数でビットシフトって面倒くさそう

633 名前:デフォルトの名無しさん (ワッチョイ 23f0-BDBD) mailto:sage [2023/09/06(水) 19:43:08.02 ID:r3vK0XzD0.net]
外部とやり取りが多少面倒
ファイルや通信関連

データ列をcharに8bitずつ入れるか
ケチって8bit x2 入れるか
なんかを考える必要がある

634 名前:デフォルトの名無しさん (ワッチョイ 23f0-BDBD) mailto:sage [2023/09/06(水) 19:43:50.40 ID:r3vK0XzD0.net]
私が使ったのはDSPでした

635 名前:デフォルトの名無しさん (ワッチョイ 23f0-BDBD) mailto:sage [2023/09/06(水) 19:45:03.72 ID:r3vK0XzD0.net]
昔の大型計算機でcharが64bitのがあったはず

636 名前:デフォルトの名無しさん (ワッチョイ cf63-yzHn) mailto:sage [2023/09/06(水) 20:55:53.98 ID:6iN9QRCz0.net]
最初のUNIX開発マシン、DECの PDP-7 は18ビットだった

637 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 133e-QWOy) mailto:sage [2023/09/07(木) 00:34:19.14 ID:n7kUX99P0.net]
C の仕様では正数型の表現にパディングビットの存在を許しているんだけど値の表現に関わらない無意味なビット(特殊なフラグとかに使うのか?)が存在するアーキテクチャも、見たことはないけど C の仕様で想定している以上はたぶんあるんだろうな……

638 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 133e-QWOy) mailto:sage [2023/09/07(木) 00:34:47.43 ID:n7kUX99P0.net]
誤植
正数→整数

639 名前:デフォルトの名無しさん (ワッチョイ 23f0-BDBD) mailto:sage [2023/09/07(木) 08:06:18.17 ID:YzioMxaL0.net]
>>635
小数なら身近にあるね

640 名前:デフォルトの名無しさん (ワッチョイ ff97-EEOY) mailto:sage [2023/09/07(木) 12:49:26.03 ID:6eZunc+30.net]
隣で寝ている



641 名前:デフォルトの名無しさん (ワッチョイ 0f01-e7Rb) [2023/09/16(土) 10:51:51.48 ID:S5cqLcA00.net]
T,o,k(迷惑という方は←をあぼーんしてください。)

更に家族友人にも教えて加えて¥4000×人数をGETできます
https://i.imgur.com/dGH5X8i.jpg

642 名前:デフォルトの名無しさん (アウアウウー Sa53-HRje) [2023/09/16(土) 12:25:15.03 ID:RATZO/gia.net]
しね

643 名前:デフォルトの名無しさん (ワッチョイ 0f01-R46v) mailto:sage [2023/09/16(土) 12:35:05.81 ID:n1ZKqkE80.net]
>>639
PayPayに変換できるって知らなかった

644 名前:デフォルトの名無しさん (ワッチョイ 7f63-VRQG) mailto:sage [2023/09/16(土) 12:38:47.03 ID:NMUMDiAt0.net]
あそこはEUから莫大な賠償金請求されたから、必死なんだろう

645 名前:デフォルトの名無しさん (ワッチョイ 3fad-xbk3) [2023/09/16(土) 12:48:52.21 ID:8u+hT5wA0.net]
>>639
グロ

646 名前:デフォルトの名無しさん (ワッチョイ 4fb0-gBtz) [2023/09/22(金) 10:15:48.77 ID:wJrbx3oK0.net]
なあ、いつから子関数内で宣言した自動変数を戻り値に使って親関数で参照してもアクセスエラーにならなくなったんだ?
特に構造体とか

647 名前:デフォルトの名無しさん (ワッチョイ 7f63-VRQG) mailto:sage [2023/09/22(金) 10:51:22.61 ID:tfij4Zir0.net]
自動変数を参照渡ししてるのか?

648 名前:デフォルトの名無しさん (ワッチョイ 3f65-V30e) mailto:sage [2023/09/22(金) 11:07:25.29 ID:8SLDLfd50.net]
アクセスエラーってのが実行時の話なら動作環境教えてくれないとなんとも

649 名前:デフォルトの名無しさん (ワッチョイ 4f93-uKg7) mailto:sage [2023/09/22(金) 11:08:43.04 ID:X0VLPMl/0.net]
すんません何を言ってるのか分からん
自動変数のアドレスを返す話?
OSとかコンパイラとか色々わからないと空虚な話になりそう、ってのと(特殊な環境なのでは)

エラーになって欲しいのにならなくて
同僚がアホで困ってて
強制的にエラーにしたいって話?

650 名前:デフォルトの名無しさん (ワッチョイ 0f10-NfV8) mailto:sage [2023/09/22(金) 11:13:15.28 ID:z1xJQo5k0.net]
数年に1回ほぼVC++でほぼCのコード書いてコンパイルしてるけど、
なんか最新版入れる度にデフォのエラー基準厳しくなっていく・・・。

変数定義をgoto(エラー処理)ですっ飛ばからエラーって・・・昔のCみたいに関数先頭に記述を移動する羽目に・・・
警告でいいやん。



651 名前:デフォルトの名無しさん (ワッチョイ 7f63-VRQG) mailto:sage [2023/09/22(金) 11:16:56.77 ID:tfij4Zir0.net]
構造体で返すにしても、呼出元って用意した変数なり構造体で受け取るんだろう

652 名前:デフォルトの名無しさん (ワッチョイ 3fad-d4nU) [2023/09/22(金) 11:27:24.08 ID:ZXfr4S/70.net]
>>644
構造体の変数を戻り値に使うことは結構最初の頃から出来たと思うが、昔のマイコンは遅かったのでなるべく使わないで呼ぶ側で変数作ってそのポインタ渡してそこに値入れてもらうみたいな事してたよ。

なんで遅いのかっていうと、参照などという高度なワザは使ってなくて他のintとかの変数と同様に構造体の内容をコピーしているだけだからだ。

653 名前:デフォルトの名無しさん (ワッチョイ 7f63-VRQG) mailto:sage [2023/09/22(金) 11:28:55.72 ID:tfij4Zir0.net]
共用体で渡したときは、どのメンバー使ってコピーするの?

654 名前:デフォルトの名無しさん (アウアウウー Sa53-9C00) [2023/09/22(金) 12:01:20.53 ID:dkRHHNCea.net]
池沼か

655 名前:デフォルトの名無しさん (ワッチョイ 4fb0-gBtz) [2023/09/22(金) 12:15:37.49 ID:wJrbx3oK0.net]
>>650
処理系によってはポインター渡しになってたはず
自動変数はスタック上に領域確保するので
実体渡しじゃ無いとスタック壊れてるよね?

656 名前:デフォルトの名無しさん (ブーイモ MM5f-C+1d) mailto:sage [2023/09/22(金) 12:21:54.90 ID:+zFc5v5MM.net]
初期K&Rじゃ構造体returnはなくてポータブルC以降じゃね?

657 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 4f3e-7CbB) mailto:sage [2023/09/22(金) 14:01:49.98 ID:jd4xXbI20.net]
構造体を返却値にするときは、
一般的なパソコンでの呼出し規約 (Windows や System V ABI) では
呼出し側で領域を用意してそのアドレスを暗黙の引数として渡す仕組みになってる。

用意された領域の上に最初から値を直接に構築できることもあるので
そういうときはコピーコストは発生しない。
単純な関数、かつモダンなコンパイラを使ってるときは余計な工夫をする必要はないよ。

658 名前:デフォルトの名無しさん (ワッチョイ 4fb0-gBtz) [2023/09/22(金) 14:35:59.04 ID:wJrbx3oK0.net]
戻り値に構造体を使いたいんですぅ

659 名前:デフォルトの名無しさん (ワッチョイ 7fab-fp56) mailto:sage [2023/09/22(金) 14:53:23.56 ID:HzXlnxdE0.net]
参照てか自動変数へのポインタを戻してたってこと?

struct foo * hoge()
{
  struct foo body;
  retrun &body;
}

これ未定義だからどうとでもなってしまうんじゃなかったかな…
コンパイラが気を利かしてエラーや警告にするのも
そのまま実行コードを生成して想定外の動きをするのも

660 名前:デフォルトの名無しさん (アウアウウー Sa53-9C00) [2023/09/22(金) 15:05:47.80 ID:dkRHHNCea.net]
>>656
これでいいだろ
struct Hoge *fuga(struct Hoge *param0, int param1, char *param2){
何かする
return param0;
}



661 名前:デフォルトの名無しさん (ワッチョイ 4fb0-gBtz) [2023/09/22(金) 15:07:59.94 ID:wJrbx3oK0.net]
受ける側が用意しなあかんかぁ

662 名前:デフォルトの名無しさん (ワッチョイ 7fab-fp56) mailto:sage [2023/09/22(金) 15:08:23.02 ID:HzXlnxdE0.net]
>>657 のは、OS側のメモリに対する不正アクセスに引っかかって
エラー発報になるのは少ないんじゃないかな?
(戻りの自動変数のポインタが不正アクセスになる可能性は低い)

構造体の中にさらにポインタをつかってて、ゴミなポインタ値で実体見に行ってやっと上記が発動する

struct foo {
 struct foo* next;
  int body;
};
こんなので ret->next->body; とやったら *ret の内容がゴミ = ret->next も不定な値
ret->next->body でメモリの不正アクセス

663 名前:デフォルトの名無しさん (ワッチョイ 4fb0-gBtz) [2023/09/22(金) 15:09:39.40 ID:wJrbx3oK0.net]
割り込み処理があると簡単に死ぬよ

664 名前:デフォルトの名無しさん (ワッチョイ 7fab-fp56) mailto:sage [2023/09/22(金) 15:10:08.95 ID:HzXlnxdE0.net]
ハイコストなのをわかってて実体をそのまま返すことはあった
複素数を取り扱う Complex 構造体で 式の形式にしたくて ね

665 名前:デフォルトの名無しさん (ワッチョイ 7fab-fp56) mailto:sage [2023/09/22(金) 15:11:28.51 ID:HzXlnxdE0.net]
>>661
割り込み想定するなら呼び出し元で器渡しとけって話にしかならんじゃろ

666 名前:デフォルトの名無しさん (スッップ Sd5f-8KNq) mailto:sage [2023/09/22(金) 15:14:27.76 ID:wMC0ce2ad.net]
>>653
返値用にもスタックが用意されてる
特にサイズが自由に定義できる構造体では戻り値にレジスタは使えんだろう

667 名前:デフォルトの名無しさん (ワッチョイ 7fab-fp56) mailto:sage [2023/09/22(金) 15:27:37.08 ID:HzXlnxdE0.net]
ID:wJrbx3oK0 がどういう環境で愚痴ってるのかはわからんけど
「割り込みハンドラ内でいろいろやるのをCで記述してるんだけど…」とかだったら
極力スタックは少なくしたい って話に行き着くけども

それならなおさら器は呼び出し側で用意すべし になるよなぁ
最悪関数呼び出しのオーバーヘッドも嫌って きもいマクロ関数が並ぶことも

668 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 4f3e-7CbB) mailto:sage [2023/09/22(金) 15:30:18.99 ID:jd4xXbI20.net]
似たような話題が出たことがあるような気がしたので思い返してみると C++ スレの話だったわ。
コピーの省略 (copy elision) が保証される場合がどう実装されているのかという話題で
オブジェクトを構築すべき場所を呼び出し側が暗黙に渡してるから
最初からそこに構築される (のでコピーする必要がない) というのが一般的な実装で、
たぶん C の構造体受け渡しで実績があったから C++ では言語仕様として取り込めたんだな。

669 名前:デフォルトの名無しさん (アウアウウー Sacf-PB4I) [2023/09/23(土) 10:05:20.89 ID:i9fpyxKga.net]
thisのことですか

670 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 273e-ClgD) mailto:sage [2023/09/23(土) 10:39:49.55 ID:ALqEUzvh0.net]
>>667
返却値のこと。
コンストラクタの場合は結果的に this でもあるとは言えるけど



671 名前:デフォルトの名無しさん (ワッチョイ 3b93-gtrM) mailto:sage [2023/09/23(土) 18:43:05.31 ID:lGebHJu00.net]
c言語にthisは無い

672 名前:デフォルトの名無しさん (スッップ Sdaa-cHxT) mailto:sage [2023/09/23(土) 19:21:52.16 ID:h4supWEzd.net]
thisはポインタなので実体を返すとか言う話とは関係ない

673 名前:デフォルトの名無しさん (ワッチョイ 8661-gIzx) mailto:sage [2023/09/23(土) 21:37:44.48 ID:wNThSPil0.net]
x86-64のABIでは、16byte未満はレジスタで渡されて、それ以上はメモリコピーが発生する、それだけ

674 名前:デフォルトの名無しさん (ワッチョイ bb48-NSUt) mailto:sage [2023/09/24(日) 01:41:30.54 ID:XDqOvN5B0.net]
PODっていうんだっけ
構造体が値わたしになるやつ
これはC++だったかな?Cはよくわからん

675 名前:デフォルトの名無しさん (アウアウウー Sacf-PB4I) [2023/09/24(日) 09:28:36.38 ID:2YTVyUlCa.net]
レジスタが64bit=8bytes
レジスタが128bit=16bytes
たしかにレジスタで全部返せるな

676 名前:デフォルトの名無しさん (ワッチョイ 1e63-CSnM) mailto:sage [2023/09/24(日) 09:55:18.81 ID:D6DOZoEp0.net]
そのうち無限長レジスタ出てくるだろ

677 名前:デフォルトの名無しさん (ワッチョイ 8a79-aeRl) mailto:sage [2023/09/24(日) 11:19:45.97 ID:Cw9+et/n0.net]
映画化決定 鬼滅の刃 - 無限長レジスタ編

678 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 273e-ClgD) mailto:sage [2023/09/24(日) 11:48:58.25 ID:wtxuVbIF0.net]
>>672
C++ 的にはクラスが一定の条件を満たすと C の構造体と互換性があるような性質を持つ。
それが POD。
C++ の POD のことも慣例で構造体と呼んでると思うので、
C の構造体 ≒ C++ の POD みたいな感じ。
POD は値渡しがどうこうとは無関係。

679 名前:デフォルトの名無しさん (スッップ Sdaa-cHxT) mailto:sage [2023/09/24(日) 18:47:28.19 ID:zJPvjQK3d.net]
>>674
あえてマジレスすると
RISCはレジスタ減らす傾向があるのでそれはない
近年のCPUはキャッシュがバカでかいのでレジスタを大きくする必要はあんまりない

680 名前:デフォルトの名無しさん (ワッチョイ 0761-+HDL) mailto:sage [2023/09/24(日) 19:03:57.96 ID:SWucSPIu0.net]
Plain Old Data だね。
ちゃんとした英語だと、dの繰り返しを避けて Plain Ol' Data とするらしい

最新のC++はPODっていう呼び名を廃止したんじゃ無かった?



681 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 273e-ClgD) mailto:sage [2023/09/24(日) 19:10:57.73 ID:wtxuVbIF0.net]
>>678
概念は廃止した (性質をスタンダードレイアウトとトリビアルに分割して説明している) けど std::is_pod がまだ有るので
「POD がなくなった」と言えるかどうかはちょっと微妙なところ。

682 名前:デフォルトの名無しさん (ワッチョイ 3b93-gtrM) mailto:sage [2023/09/24(日) 19:39:45.99 ID:iqjAJ+9f0.net]
>>674
無限では無いけど VLIW って聞いた事無いのかw❤

683 名前:デフォルトの名無しさん (ワッチョイ 1ecf-WMZf) mailto:sage [2023/09/24(日) 19:54:27.01 ID:9leOLZhk0.net]
>>680
レジスタ長を関係あるか?

684 名前:デフォルトの名無しさん (ワッチョイ 0a30-gIzx) mailto:sage [2023/09/24(日) 22:05:30.32 ID:/fHwRuZw0.net]
>>680
Very Long Instruction Word(超長い命令長)で、レジスタ関係無し

685 名前:デフォルトの名無しさん (ワッチョイ 1e63-CSnM) mailto:sage [2023/09/24(日) 22:12:32.99 ID:D6DOZoEp0.net]
レジスターを実メモリーサイズに拡張し、実メモリーを廃止
プログラムはレジスターに

686 名前:直接ロード、
データは必要に応じたサイズを割り当てる
一種のチューリングマシン
[]
[ここ壊れてます]

687 名前:デフォルトの名無しさん (ワッチョイ de6a-6sCR) mailto:sage [2023/09/24(日) 22:31:37.22 ID:fu7DWNWn0.net]
昔、ルネサスH8だったと思うが、関数内で大きなconst配列を定義したところ、RAM不足のビルドエラーに。
constならROM領域に割り付けるんじゃないのと思いルネに聞いたところ「言語仕様上static変数はconstの有無によらずRAMに割り付けることになってる…」とかいう回答。

Cの規格では割付領域まで規定してるのですかね。


void func(void){
static const char LARGE_TABLE[1024]={...};
...
}

688 名前:デフォルトの名無しさん (ワッチョイ 07db-oBwi) [2023/09/25(月) 00:05:56.55 ID:flE1dY0R0.net]
Cコンパイラじゃ無くて、リンカに領域指定するんだけどなぁ

689 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 273e-MH8p) mailto:sage [2023/09/25(月) 00:12:22.79 ID:ubRrbZbh0.net]
処理系定義も広義には言語仕様と言えなくもないんじゃね。
まあ普通は言わんが……

690 名前:デフォルトの名無しさん (ワッチョイ 07db-oBwi) [2023/09/25(月) 00:13:31.19 ID:flE1dY0R0.net]
section切ってアドレス指定だろ?



691 名前:デフォルトの名無しさん (ワッチョイ 3b93-gtrM) mailto:sage [2023/09/25(月) 00:23:33.45 ID:Sev0Fg0J0.net]
>>684
K&Rは定数文字列書換出来るよ。
組込に向かないって言われた理由や

692 名前:デフォルトの名無しさん (ワッチョイ 3b93-gtrM) mailto:sage [2023/09/25(月) 00:26:21.67 ID:Sev0Fg0J0.net]
>>681
メモリをレジスタとして扱う技術が無いなら、無関係だろうな。

マイコンだけがコンピューターのアーキテクチャじゃ無いからね

693 名前:デフォルトの名無しさん (ワッチョイ 8a79-aeRl) mailto:sage [2023/09/25(月) 00:49:29.60 ID:h8TBNStf0.net]
H8のフラッシュは書き込み回数が少ないからじゃないかな
その代わり数MBのDRAMモジュール繋いで実行できたから当時のマイコンにしては組み込みlinuxが乗ったりして富豪プログラミングができた

694 名前:デフォルトの名無しさん (ワッチョイ dee4-+EvS) mailto:sage [2023/09/25(月) 07:20:40.16 ID:4OYJzvHn0.net]
>>684
そんな規定は無い。実装の都合としてもわざわざRAMに置いてうれしいこともなさそう。

「言語仕様上自動変数はconstの有無によらずRAMに割り付ける」ならありそうな話なので
あなたの記憶違いの可能性のほうが高そう。

695 名前:デフォルトの名無しさん (ラクッペペ MMc6-se1G) mailto:sage [2023/09/25(月) 08:15:02.48 ID:bQMRfZQJM.net]
組込みマイコンでconst変数をROMに割り当てるのはスタートアップルーチンの仕事
main関数呼び出し前に実行する処理なので一旦main関数を呼び出してしまった後はROM領域に変数を割り当てる手段はない

696 名前:684 (ワッチョイ 1a91-6sCR) mailto:sage [2023/09/25(月) 09:01:11.94 ID:8uqw4GxL0.net]
皆さんありがとう。

>>691
当たりでした。よく思い返したらそうでした。

void func(void){
const char LARGE_TABLE[1024]={...};
...
}

最初にこう書いたらRAM領域割付になり、結果staticをつけて対処した、のでありました。

で、>>692 のために自動変数はRAM割付なのですね。

697 名前:デフォルトの名無しさん (ワッチョイ 07db-oBwi) [2023/09/25(月) 09:20:03.53 ID:flE1dY0R0.net]
なんか、トンチンカンな話ばかりで笑えるなぁ
ROMに割り付けるはRAMに割り付けるかは
リンカーにどう指示するかによるだけだろ
起動後にROMからRAMにコピーするか
そのままROMに置いとくかはデータの属性によって
リンカーがグループ化してくれたものを
起動時にスタートアップルーチンが転送するだけ

698 名前:デフォルトの名無しさん (ワッチョイ 07db-oBwi) [2023/09/25(月) 09:24:07.97 ID:flE1dY0R0.net]
基本的に初期値を持つ変数は元の値はROMにあるから
幾らでも呼び出せるが、普通の手段では呼び出せないだけ
強制的にアドレス指定すれば幾らでも呼べる

699 名前:デフォルトの名無しさん (ラクッペペ MMc6-se1G) mailto:sage [2023/09/25(月) 09:25:15.48 ID:oaSGqRXsM.net]
メモリ空間の変数の割り当てはスタートアップルーチンのコーディングで指定する
当然C言語ではなくマイコンメーカー指定の独自言語
大体はただパラメータを設定していくだけだけど

700 名前:デフォルトの名無しさん (ワッチョイ 07db-oBwi) [2023/09/25(月) 09:41:12.99 ID:flE1dY0R0.net]
つか、ROM上に変数なんか置かないから、置くのは定数



701 名前:デフォルトの名無しさん (ワッチョイ 8e86-NsvJ) [2023/09/25(月) 09:58:06.95 ID:jZAmQlvo0.net]
>>674
まあ、プログラムの高速化的には2048bitSIMDか4096bitSIMDレジスタがあると高速化の観点ではかなり都合が良い。AVX2は256bitだから単純計算すると性能が8倍とか16倍とかになるからね。
産業用だとarmのCPUに2048bit長のsimdレジスタがあった気がする。

702 名前:デフォルトの名無しさん (ワッチョイ 0aa1-oBwi) [2023/09/25(月) 10:11:14.07 ID:8PlaAgAt0.net]
値を変更しない変数は〜
https://tool-support.renesas.com/autoupdate/support/onlinehelp/ja-JP/csp/V4.01.00/CS+.chm/Compiler-CCRX.chm/Output/ccrxaac0104y.html
誰が嘘を書いたか

703 名前:デフォルトの名無しさん (ワッチョイ 0aa1-oBwi) [2023/09/25(月) 10:14:30.53 ID:8PlaAgAt0.net]
ああ、staticか…なら仕方ない

704 名前:デフォルトの名無しさん (アウアウウー Sacf-PB4I) mailto:sage [2023/09/25(月) 12:55:53.24 ID:RmxLVxNPa.net]
>>693 が描いたシステムは使いたくないな

705 名前:デフォルトの名無しさん (ワッチョイ dee4-+EvS) mailto:sage [2023/09/25(月) 18:22:37.93 ID:4OYJzvHn0.net]
>>693
自動変数がRAMに割り付けられるのは、再帰のたびに別アドレスとしなければならない規定があるから。
(逆に static なら同一アドレスとしなければならない。)

>692,696 (たぶん同一人物)は ROM/RAM 割り当てがスタートアップルーチンの仕事というが、
仮にそれが正しいとするとスタートアップルーチンはどこからロードするのかという、
おかしな話が出てくるので誤りと考えられる。
実際ルネサスツールでもリンカで指定するものとなっている。
https://www.renesas.com/jp/ja/document/mat/h8s-h8300-series-cc-compiler-package-ver700-users-manual
> 最適化リンケージエディタでは、入力オブジェクトプログラム内の同一セクションを結合し、
> start オプションによって指定されたアドレスに割り付けます。

706 名前:デフォルトの名無しさん (ラクッペペ MMc6-se1G) mailto:sage [2023/09/25(月) 19:02:56.98 ID:ULcnNiWhM.net]
スタートアップルーチンは内蔵フラッシュメモリ(かマスクROM)に記録されておりベクターテーブル(スタートアップの一部)にリセット割込みのエントリーアドレスを格納しておく
マイコンの電源ONでリセット割込みが発生するとスタートアップルーチン先頭からプログラムカウンタに沿って実行されメモリ変数やスタック領域、SFRの初期設定を行い最後にCのメイン関数が呼び出される

707 名前:デフォルトの名無しさん (スッップ Sdaa-cHxT) mailto:sage [2023/09/25(月) 21:31:01.48 ID:SHu1A0tUd.net]
>>697
const って何の略でしょう

708 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 273e-MH8p) mailto:sage [2023/09/25(月) 22:04:58.79 ID:ubRrbZbh0.net]
>>704
C の変数は const を付けても (C の用語で言うところの) 定数にはならない。
C++ では異なるし、言語仕様の定義でなく単に事前に与える値くらいのニュアンスで定数という用語を使っている解説とかもあって混乱しやすい用語ではある。

709 名前:デフォルトの名無しさん (ワッチョイ 8aad-/va4) [2023/09/26(火) 00:22:01.41 ID:+uZUPLZA0.net]
const の変数は値の変更が不可能なので、それを利用してコンパイラが最適化することも出来るというだけで、必ず最適化しなければならないとかROMに割り付けなければならないみたいな決まりはない筈。

710 名前:デフォルトの名無しさん (ワッチョイ 6b01-PB4I) [2023/09/26(火) 00:49:13.67 ID:h6rxe/Hl0.net]
RAM2KBの環境ではROMに割り付けてもらわないと非常に困る



711 名前:デフォルトの名無しさん (ワッチョイ 07e5-+HDL) mailto:sage [2023/09/26(火) 01:39:36.71 ID:kR568CEo0.net]
>>707
ならそうしなさいよ、リンカスクリプトで
という話では?

712 名前:デフォルトの名無しさん (ラクッペペ MMc6-se1G) mailto:sage [2023/09/26(火) 06:43:01.34 ID:9+lSh1ncM.net]
組込みで定数を扱うならdefine定義でソースに埋め込むのが普通
constはregisterと同じ扱いなので>>706

713 名前:フ言うとおり []
[ここ壊れてます]

714 名前:デフォルトの名無しさん (ワッチョイ 0703-oBwi) [2023/09/26(火) 09:03:17.82 ID:HGB+okJ70.net]
いまどきのROM化環境のC言語にゃsectionで領域グループを指定する命令は無いのけ?

715 名前:デフォルトの名無しさん (ラクッペペ MMc6-se1G) mailto:sage [2023/09/26(火) 10:31:51.31 ID:HDnmN3YRM.net]
>>699のマイコンの場合だと
スタートアップ
https://tool-support.renesas.com/autoupdate/support/onlinehelp/ja-JP/csp/V4.01.00/CS+.chm/Compiler-CCRX.chm/Output/ccrx08c0000y.html

コーディング例
https://tool-support.renesas.com/autoupdate/support/onlinehelp/ja-JP/csp/V4.01.00/CS+.chm/Compiler-CCRX.chm/Output/ccrx08c0400y.html#82903

716 名前:デフォルトの名無しさん (ワッチョイ 1ecf-44ew) mailto:sage [2023/09/27(水) 00:11:11.81 ID:mIITHIHe0.net]
セクションの初期化を割り当てというから混乱するんだろう
割り当てはリンク時にもう全部終わってる

717 名前:デフォルトの名無しさん (ラクッペペ MMc6-se1G) mailto:sage [2023/09/27(水) 01:37:20.19 ID:tguPsVh8M.net]
静的な変数はリンク時はextern宣言で外部定義しておきスタートアップルーチンでセクション割当てすることでメモリ配置を確定させるのが一般的
リンクリストで自動変数以外のすべての使用変数を漏れなく割当てできているか確認する必要がある

718 名前:デフォルトの名無しさん (ワッチョイ 0a1f-oBwi) [2023/09/27(水) 09:48:51.32 ID:I/ozjFX50.net]
人間様はリンカーにセクション配置アドレスを教えるのが仕事だった時代もありました

719 名前:デフォルトの名無しさん (ワッチョイ 1e63-CSnM) mailto:sage [2023/09/27(水) 10:10:54.01 ID:lrg7uRD+0.net]
ハードウェア上のメモリー配置を教えるのは、いまでも人間なんじゃないの?

720 名前:デフォルトの名無しさん (ワッチョイ 0a1f-oBwi) [2023/09/27(水) 10:12:59.72 ID:I/ozjFX50.net]
>>715
ワンチップマイコンなら型番から自動で割り当ててくれるよ
まあ、外付けメモリ分は手動だけどな



721 名前:デフォルトの名無しさん (ラクッペペ MMc6-se1G) mailto:sage [2023/09/27(水) 11:19:15.53 ID:0hujVwVvM.net]
静的変数と自動変数(スタック領域)の容量の割り当ての最終的な決定は人間の仕事
あまり変数に領域を取りすぎるとスタックの分が無くなる

722 名前:デフォルトの名無しさん (ワッチョイ 3b15-cHxT) mailto:sage [2023/09/27(水) 11:22:42.10 ID:rbbJx+dJ0.net]
>>714
組み込みでそんな優雅なこと言ってたらバグも直せん

723 名前:デフォルトの名無しさん (ワッチョイ a310-WMZf) mailto:sage [2023/09/27(水) 11:23:26.71 ID:Rw0J2Yjq0.net]
昔のトラブルの癖で1Mバイト以上の領域、配列が必要ならmallocで確保するようにしてる・・・。

724 名前:デフォルトの名無しさん (ラクッペペ MMc6-7af3) mailto:sage [2023/09/27(水) 11:53:58.81 ID:8vHXVA1WM.net]
mallocは64KBまでだろ……

725 名前:デフォルトの名無しさん (ワッチョイ 6a95-+EvS) [2023/09/27(水) 12:26:49.33 ID:9Ywamwi50.net]
・・・16bit?オフセットアドレス範囲?

726 名前:デフォルトの名無しさん (アウアウウー Sacf-PB4I) [2023/09/27(水) 13:10:05.87 ID:OOPn+kCla.net]
8086の時代だろ
EMSのページング

727 名前:デフォルトの名無しさん (ワッチョイ 1e63-CSnM) mailto:sage [2023/09/27(水) 15:08:08.13 ID:lrg7uRD+0.net]
いやそれ以前のCPUの仕様

728 名前:デフォルトの名無しさん (アウアウウー Sacf-j351) [2023/09/27(水) 16:10:06.49 ID:OOPn+kCla.net]
それ以前だと本体メモリでも64kBフル積んでるの少なくないか

729 名前:デフォルトの名無しさん (ワッチョイ 1e63-CSnM) mailto:sage [2023/09/27(水) 16:12:57.75 ID:lrg7uRD+0.net]
8086積んでた当時のPCは128程度は積んでたと思うが
64でフルになるのはZ80のような8ビットPCでの話

730 名前:デフォルトの名無しさん (アウアウウー Sacf-j351) [2023/09/27(水) 16:25:12.39 ID:OOPn+kCla.net]
それ以前のそれに8086を含んでるなら矛盾はしない



731 名前:デフォルトの名無しさん (ワッチョイ 1e63-CSnM) mailto:sage [2023/09/27(水) 16:26:45.84 ID:lrg7uRD+0.net]
8086でフルに積むメモリの意味が分からん

732 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 273e-ClgD) mailto:sage [2023/09/27(水) 16:44:44.21 ID:Q9yfznPE0.net]
この場合の「フル」はメモリ空間いっぱいのことなんじゃないの。
バンク切り換えまで含めたらいくらでも拡張の余地はあるけど
malloc でバンクを跨ぐわけにはいかんし。

733 名前:デフォルトの名無しさん (ワッチョイ 1e63-CSnM) mailto:sage [2023/09/27(水) 17:00:48.31 ID:lrg7uRD+0.net]
8086のアドレスバスは20ビットだから、1MB実装できる

734 名前:デフォルトの名無しさん (ワッチョイ 07e5-+HDL) mailto:sage [2023/09/27(水) 18:45:56.76 ID:3YDDpoD+0.net]
勉強になります

735 名前:デフォルトの名無しさん (ワッチョイ 1a94-oRtz) [2023/09/27(水) 19:57:19.01 ID:3fbQ67ov0.net]
勉強と言ってももう40年近く昔の知識だぞ
今どき役に立つことなんかあるか?

736 名前:デフォルトの名無しさん (ワッチョイ 07e5-+HDL) mailto:sage [2023/09/27(水) 21:07:16.75 ID:3YDDpoD+0.net]
>>731
すいません、ないです。ただ知的好奇心が非常に満たされます。

737 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 273e-MH8p) mailto:sage [2023/09/27(水) 22:18:54.45 ID:Q9yfznPE0.net]
レトロコンピュータの資料は探せばいくらでもあるが
面白いところだけ選んで読むというわけにはいかんからな。
読む前にどれが面白いのか判断できるわけもないし、
相互に関連があるので一部の資料だけ見ても意味がわからん。
話題に関連する形で昔の話が出てくるのは
それなりに興味深いということもあるんだろう。

738 名前:デフォルトの名無しさん (ワッチョイ 0a64-gIzx) mailto:sage [2023/09/27(水) 23:14:28.73 ID:zQBl5fyt0.net]
ITの歴史を知ることは為になる
温故知新

739 名前:デフォルトの名無しさん (ワッチョイ 6a14-xAvD) [2023/09/28(木) 00:01:49.83 ID:bZti02EO0.net]
スレ違いだったら申し訳ない
c言語でコンパイルした実行ファイルってosのAPIを使用してなければ別々のosで動かせますか?
cpuアーキは同じ前提です。

740 名前:デフォルトの名無しさん (ワッチョイ 0716-oBwi) [2023/09/28(木) 00:29:26.06 ID:gnUHVRPF0.net]
>>735
そもそも実行環境自体がos依存だろ



741 名前:デフォルトの名無しさん (アウアウウー Sacf-j351) mailto:sage [2023/09/28(木) 00:42:44.54 ID:wsjwbbNAa.net]
CPU同じならセットアップの問題とIO関係のクリア出来てたらそこそこは動くんじゃないか

742 名前:デフォルトの名無しさん (アウアウウー Sacf-j351) [2023/09/28(木) 00:47:13.64 ID:wsjwbbNAa.net]
割とマジで試したいなら
Bochs とか QEMU とかで
OS 無しで動かしてみたら良い

743 名前:デフォルトの名無しさん (ワッチョイ 1e63-s5vX) mailto:sage [2023/09/28(木) 00:55:43.32 ID:9pgsrChg0.net]
スタートアップ辺りにOS依存が有りそう

744 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 273e-MH8p) mailto:sage [2023/09/28(木) 01:27:51.60 ID:6irLEr1Q0.net]
>>735
原則としては無理。
実行ファイルをメモリに展開して準備するローダがOSの一部だからOS の上で実行するならOSの機能は呼ばれることになる。
実行ファイルの形式が linuxとかだとelf が標準だけどwindowsではpeで、全く互換性はない。

ただ、複数のOSで動く実行ファイルを作るトリックは存在する。
https://justine.lol/cosmopolitan/index.html

745 名前:デフォルトの名無しさん (アウアウウー Sacf-j351) mailto:sage [2023/09/28(木) 06:25:35.94 ID:wsjwbbNAa.net]
>>735
大前提が違ってたな
コンパイルしただけでは実行ファイルは造られない
リンカとローダーを通して初めて実行可能なファイルになる

746 名前:デフォルトの名無しさん (ワッチョイ 07e5-+HDL) mailto:sage [2023/09/28(木) 07:43:47.93 ID:7Zdppbze0.net]
>>735
質問者さんは下記の概要を知ると、参考になるかもです

「組み込み開発でベンダーロックを避けるためにマルチハードにしたい開発チームが、対象ハードごとのgccをビルドして用意する手順」

ややこしいし大変なので、ザッとで十分です

参考までに私が買った本(全部読んだとは言ってない)
「LINUX組み込みシステム」
クレイグ・ホーラボウ
ピアソンエデュケーション

747 名前:デフォルトの名無しさん (ワッチョイ a310-WMZf) mailto:sage [2023/09/28(木) 08:41:31.76 ID:VP1D2tYa0.net]
PC-98用のDOSアプリをTOWNSやAT互換機のDOSで動かしてはいたなぁ。
BIOSコールや各ハード特有機能を使わないアプリに限定されるけど。

748 名前:デフォルトの名無しさん (ワッチョイ 3b15-cHxT) mailto:sage [2023/09/28(木) 09:51:32.79 ID:wMng62Lu0.net]
>>743
OSが同じなら動くのが当然
MS-DOSがアレだから普通は動かないけどw

749 名前:デフォルトの名無しさん (ワッチョイ 1e63-CSnM) mailto:sage [2023/09/28(木) 10:01:07.42 ID:9pgsrChg0.net]
MS-DOSのシステムコールって機種によらず共通でしょ

750 名前:デフォルトの名無しさん (ワッチョイ 0a1f-oBwi) [2023/09/28(木) 10:02:25.23 ID:uRtj8fwF0.net]
TOWNSはTownsOSだろ



751 名前:デフォルトの名無しさん (アウアウウー Sacf-j351) [2023/09/28(木) 10:04:03.81 ID:7+/lnWbqa.net]
NHKでタマにやってる「我が社の黒歴史」で
FM-TOWNSを取り上げて欲しいな

752 名前:デフォルトの名無しさん (ワッチョイ 0a1f-oBwi) [2023/09/28(木) 10:15:55.20 ID:uRtj8fwF0.net]
TownsOSはMacOSみたいなGUIを提供してたんだよな
今やWindows到来って時代にだ

753 名前:デフォルトの名無しさん (ワッチョイ 1e63-CSnM) mailto:sage [2023/09/28(木) 10:16:51.88 ID:9pgsrChg0.net]
TownsOSはMS-DOSを拡張したものだし、
チャレンジ精神を評価する事はあっても
黒歴史とするのはあんまりだ

754 名前:デフォルトの名無しさん (ワッチョイ 0a1f-oBwi) [2023/09/28(木) 10:20:51.20 ID:uRtj8fwF0.net]
>>749
番組見たら考え方変わるよw

755 名前:デフォルトの名無しさん (ワッチョイ 1e63-CSnM) mailto:sage [2023/09/28(木) 10:24:22.26 ID:9pgsrChg0.net]
「我が社の黒歴史」ってやるなら、
是非NHK自身をネタにしてください
ライブドア事件の時、
ニュースに飛びついたNHK社員が
一斉にインサイダー取引で株売買してました
家族にも教えてたそうです
弁護士による内部調査を実施しましたが
社員の多くが調査拒否してましたよ
どんだけ暇なんだろうって思いました

756 名前:デフォルトの名無しさん (ワッチョイ 5301-oBwi) [2023/09/28(木) 10:32:23.32 ID:Ev8os2Ag0.net]
あの番組は、黒歴史があるから今の発展がある
みたいなノリの番組だから、後がない企業は扱わないよw

757 名前:デフォルトの名無しさん (ワッチョイ 7f8e-se1G) mailto:sage [2023/09/28(木) 10:41:58.54 ID:XO3PoFmz0.net]
TownsOSのこと言うならWin3.1も大して変わらないと思う
どちらもMS-DOSの上で動くGUIシェルの中のひとつ

758 名前:デフォルトの名無しさん (ワッチョイ 1e63-CSnM) mailto:sage [2023/09/28(木) 10:42:15.16 ID:9pgsrChg0.net]
当時のTownsは386採用し、MS-DOSを拡張して32ビットアクセスを実装してました
DOSが64Kの壁を越えられない時代にギガ単位のメモリをリニアに使える環境を実現
これを使ったゲームが人気でしたね
今から見れば当たり前のことで、何それって時代になってしまいましたが
DOS上のゲームでもこの方式を独自に採用したのがありました
DESCENTが有名だったかな

https://ja.wikipedia.org/wiki/DOSエクステンダ

759 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 273e-ClgD) mailto:sage [2023/09/28(木) 10:51:11.28 ID:6irLEr1Q0.net]
富士通の公式サイトに富士通の歴史の一部として Towns の記述はあるよ。
結果的に廃れたけど黒歴史ということはない。 当時はそれなりにユーザもいた。

760 名前:デフォルトの名無しさん (アウアウウー Sacf-j351) [2023/09/28(木) 10:56:41.79 ID:7+/lnWbqa.net]
>>751
NHKはまだ産まれ変わってないから「わが社の黒歴史」に出る資格が無い



761 名前:デフォルトの名無しさん (ワンミングク MMfa-/HEw) [2023/09/28(木) 10:59:08.38 ID:A0Yya1hOM.net]
スレチですね

762 名前:デフォルトの名無しさん (アウアウウー Sacf-j351) [2023/09/28(木) 11:02:35.02 ID:7+/lnWbqa.net]
>>755
この前はYAMAHAのFM音源が「わが社の黒歴史」に出てたよ

763 名前:デフォルトの名無しさん (ワッチョイ 1e63-CSnM) mailto:sage [2023/09/28(木) 11:04:12.36 ID:9pgsrChg0.net]
16ビットの制約で64キロバイトメモリしか確保できない時代から
一気に4GBメモリがリニアにアクセスできるようになった時は感動しましたよ
64ビットでは、あんまり感動はなかったな、なんでだろう

764 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 273e-ClgD) mailto:sage [2023/09/28(木) 12:06:18.28 ID:6irLEr1Q0.net]
勉強してなかったからテストの点数が心配だなー チラッ チラッ

みたいな番組なわけだな。

765 名前:デフォルトの名無しさん (ワッチョイ 0afd-e2p4) mailto:sage [2023/09/28(木) 12:09:23.54 ID:MA2VSxCx0.net]
>>759
64KBを超える事より4GBを超えることの方が圧倒的に少ないからだな

766 名前:デフォルトの名無しさん (ワッチョイ 3b15-cHxT) mailto:sage [2023/09/28(木) 12:44:49.42 ID:wMng62Lu0.net]
ちょっと本気でプログラム組みだせばコードサイズ64KBなんてすぐ超える
一方1MBなんて集団でごちゃごちゃやってないかぎり超えない

767 名前:デフォルトの名無しさん (ワッチョイ 0a1f-oBwi) [2023/09/28(木) 12:53:02.94 ID:uRtj8fwF0.net]
アセンブラで組めばそんな大量のデータサイズにならんよ

768 名前:デフォルトの名無しさん (ワッチョイ 3b15-cHxT) mailto:sage [2023/09/28(木) 13:56:12.11 ID:wMng62Lu0.net]
データじゃなくてコードサイズの話なんだけど
ちょっと凝った仕様を入れようとすると64Kbくらいは簡単に超える
泣く泣く削るか無理して分割ロードにするか
8ビット時代はそんな感じだったな

769 名前:デフォルトの名無しさん (ワッチョイ 1eab-xvpL) mailto:sage [2023/09/28(木) 14:22:46.10 ID:+fR7sAVf0.net]
コード領域の自己書き換えでやりくりやりくり

770 名前:デフォルトの名無しさん (ワッチョイ a310-WMZf) mailto:sage [2023/09/28(木) 14:40:53.17 ID:VP1D2tYa0.net]
昔のPRGとかメニュー開くとCDアクセス始めるゲームとかあったなぁ。
メモリー足りず、フィールド、戦闘、メニュー毎にプログラム読み直してるのかと思った。



771 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 273e-ClgD) mailto:sage [2023/09/28(木) 15:31:33.20 ID:6irLEr1Q0.net]
Turbo C++ の MS-DOS 版にダイナミックロードを補助するライブラリが付いてなかったっけ?
うろおぼえだけど。

772 名前:デフォルトの名無しさん (スフッ Sdaa-TrDt) [2023/09/28(木) 18:41:56.40 ID:KRBURPw6d.net]
あったよ
うろ覚えだけど

773 名前:デフォルトの名無しさん (ワッチョイ 8a79-aeRl) mailto:sage [2023/09/28(木) 19:15:05.82 ID:0dpaiugf0.net]
>Turbo C++
TurboがC++だった頃なんてあったかな

774 名前:デフォルトの名無しさん (ワッチョイ 1e63-CSnM) mailto:sage [2023/09/28(木) 19:19:34.33 ID:9pgsrChg0.net]
あった
>1990年5月、ボーランドは Turbo C から Turbo C++ へと移行し、アマチュア向け・ローエンド製品を
>Turbo C++、プロ向け・ハイエンド製品を Borland C++ として2系統に展開した。

https://ja.wikipedia.org/wiki/Turbo_C

775 名前:デフォルトの名無しさん (ワッチョイ 6a36-WMZf) mailto:sage [2023/09/28(木) 20:46:13.07 ID:O4GqiEoW0.net]
DOSでも増設メモリに32bitレジスタでアクセス出来たのなら・・・

776 名前:デフォルトの名無しさん (ワッチョイ 0a64-gIzx) mailto:sage [2023/09/28(木) 22:44:00.88 ID:qNYo9AZZ0.net]
それがDOSエクステンダだろ
GO32には世話になった

777 名前:デフォルトの名無しさん (ワッチョイ 23ad-2pcI) [2023/10/02(月) 02:12:15.10 ID:hWT/DRlk0.net]
X68000 もよろしく

778 名前:デフォルトの名無しさん (アウアウウー Sa89-5C2y) [2023/10/05(木) 17:17:30.86 ID:WXXGTjkDa.net]
黒歴史度はFM-TOWNSとX68000とどっちがどっち?

779 名前:デフォルトの名無しさん (ワッチョイ 2379-Fe8P) mailto:sage [2023/10/05(木) 19:38:38.95 ID:k4EJU+WL0.net]
何が黒歴史だ
どっちも国産パソコンに革命起こしたんだよ

780 名前:デフォルトの名無しさん (ワッチョイ cb63-tvb5) mailto:sage [2023/10/05(木) 19:43:14.40 ID:4Dr5MGJz0.net]
TOWNSやX68000の話というのは、
PCやOSの話題にはなってもC言語の話題ではない



781 名前:デフォルトの名無しさん mailto:sage [2023/10/06(金) 19:26:21.98 ID:0FrwfOPH0.net]
>>775
パソコンでありながらゲームしか宣伝してなくて当時発達著しかったゲーム機に負けただけで革命もクソもねえw

782 名前:デフォルトの名無しさん mailto:sage [2023/10/06(金) 19:35:07.48 ID:UFkJ0Gsc0.net]
ゲーム機とPCで切磋琢磨してたんだろ
ゲーム機にだって栄枯盛衰はあぅたよ
そういえばプレステにLinux入れてアプリ作って動かしてた人いたなあ
プレステは高性能すぎて、特定国への輸出が規制を受けてた

783 名前:デフォルトの名無しさん mailto:sage [2023/10/06(金) 19:43:43.15 ID:UFkJ0Gsc0.net]
PlayStation3に採用されたCPUはCell、ソニーとIBM、東芝の共同開発だった。
この辺もWikiを読むと面白い

784 名前:デフォルトの名無しさん (ワッチョイ daad-iLfk) [2023/10/07(土) 05:34:11.31 ID:mvcCmF0H0.net]
あー。沢山繋げてスパコンみたいな。知らんけど。

785 名前:デフォルトの名無しさん mailto:sage [2023/10/07(土) 12:37:19.06 ID:2aizzJpQ0.net]
>>778
PCがグラフィックボードに力を入れだすのはウィンドウズ普及以降になる
ゲーム機にはニンテンドー64のRDRAMとかセガサターンのシンクロナスDRAMとかアーケードやシリコングラフィックCGマシンから取り入れられた新技術が投入されX68000やタウンズのかなう相手ではなかった

786 名前:デフォルトの名無しさん mailto:sage [2023/10/07(土) 12:51:58.85 ID:TufJ0SRx0.net]
X68やTOWNSはMD/SFCとの争い・・・
・・・PS1 ジャンピングフラッシュの元になったゲームはX68で作られたんだっけ?あとワイヤーフレームのスターウォーズも。

787 名前:デフォルトの名無しさん mailto:sage [2023/10/07(土) 13:51:13.10 ID:c4CFtcBt0.net]
(それって昔のPC板やレトロゲー板の範疇だからそろそろやめてくんないかなここはC言語スレ・・・)

788 名前:デフォルトの名無しさん mailto:sage [2023/10/07(土) 14:41:36.91 ID:/93XcW4W0.net]
年寄りは人の話を聞かないからな

789 名前:デフォルトの名無しさん [2023/10/07(土) 15:09:15.52 ID:mvcCmF0H0.net]
68000は素晴らしい。8086のようなセグメントのあるCPUはクソだ。

と当時は思ったものです。

790 名前:デフォルトの名無しさん mailto:sage [2023/10/07(土) 15:34:43.34 ID:BCZCKqNS0.net]
むしろ、そう言う話に持って行きたかった



791 名前:デフォルトの名無しさん [2023/10/07(土) 15:55:47.74 ID:9cx0ijSo0.net]
X68000は素でgccが動いてうらやましかった。
一方86はgo32で無理矢理動かしてた。
Cに戻してみた。

792 名前:デフォルトの名無しさん mailto:sage [2023/10/07(土) 15:58:51.83 ID:BCZCKqNS0.net]
レジスター数は羨ましかったな
あんだけあればレジスターだけでプログラム動かせそう、とか

793 名前:デフォルトの名無しさん [2023/10/07(土) 16:46:51.81 ID:mvcCmF0H0.net]
アセンブラやるとね、バイトの並びが上位桁が先に来るので人間に分かり易くて良い、みたいな話もあった。
68000 だけじゃなく 6809 とか 6800 とかの 8 bit CPU の頃からいわゆる68系はそうだったな。
Sun の Sparc もそうか。

794 名前:デフォルトの名無しさん mailto:sage [2023/10/07(土) 16:55:51.01 ID:tqmAUUbt0.net]
なんでリトルエンディアンになるの?

795 名前:デフォルトの名無しさん [2023/10/07(土) 17:19:33.66 ID:mvcCmF0H0.net]
80系は昔からリトルエンディアンだったな。アドレスの小さい方が桁の小さい方にした方がコンピュータ的には自然だと考えたのかも知れない。

796 名前:デフォルトの名無しさん mailto:sage [2023/10/07(土) 17:30:29.12 ID:2aizzJpQ0.net]
リトルエンディアンは同じアドレスから読み取ると
16ビットデータを8ビットレジスタで読んでもちゃんと下位8ビットが読める
ビッグエンディアンは上位8ビットが読み込まれてしまう
さらに68000は16ビット以上は奇数アドレスから読み込めないという制限があるのでハマることもある

797 名前:デフォルトの名無しさん mailto:sage [2023/10/07(土) 17:36:03.54 ID:qAlp08tM0.net]
リトルエンディアンの場合は、図を描くときに右から左、下から上に番地が増えるようにすると合理的なのよね

ダニーコーエンの、エンディアンの語源になった文書にもそんな図があったと思う。アスキーアートだけど

https://ja.m.wikipedia.org/wiki/ダニー・コーエン_(計算機科学者)

798 名前:デフォルトの名無しさん mailto:sage [2023/10/07(土) 17:36:48.91 ID:OGJgvxVr0.net]
8bitCPUの頃のCPUの加算器は16bit+16bitしかできなかった、32bitの加算は分割してやるしかない
加算を分割してやる時は下の桁からやる
上の桁からやると、下の桁で繰り上がりが発生したら上の桁に戻って繰り上がり処理することになるから
下の桁が前にあるのがリトルエンディアン、こっちの方が自然だと思う
ビッグエンディアンはデータを後ろから前にアクセスしていくことになる、それだけだって言えばそうだけど

799 名前:はちみつ餃子 mailto:sage [2023/10/07(土) 17:43:26.56 ID:pov02R//0.net]
キャストしやすさもあるな。
メモリ上にある int 型のデータを char にキャストするみたいなとき
リトルエンディアンなら単にその場所から 1 バイトを読みだせばいいだけだが、
ビッグエンディアンだとアドレスをずらして読みだすか
読みだしてからマスクするかになる。

まあそのへんは効率的に処理できる命令があったりするんだろうけど
そんなこと最初から考えずに済むならそのほうがいい。

800 名前:デフォルトの名無しさん [2023/10/07(土) 18:12:07.87 ID:mvcCmF0H0.net]
まあでもネットワークバイトオーダーはビッグエンディアンになっちゃってるんだよね。
これはこれで理由があるのかも知れないが、とにかく80系CPUだとひっくり返さねばならなくなった。
結局C言語だとそういったCPUの違いを吸収するために htonl(), ntohl() のようなマクロまたは関数を使うことになると。



801 名前:デフォルトの名無しさん mailto:sage [2023/10/07(土) 18:15:49.27 ID:BCZCKqNS0.net]
それは、そういう風に決めないと、処理出来ないからだろう

802 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 693e-B5Nq) mailto:sage [2023/10/07(土) 18:24:53.16 ID:pov02R//0.net]
通信系はなぁ……。 結局は通信相手と同じ規約を使うしか仕方がないから
個々のコンピュータ (アーキテクチャ) にとっては不自然になることもある。

モダンなプロトコルはリトルエンディアンを採用している事例もそれなりにあるよ。

803 名前:デフォルトの名無しさん (ワッチョイ 31b0-fCO4) mailto:sage [2023/10/07(土) 18:45:29.52 ID:2aizzJpQ0.net]
そのエンディアン変換が68000は面倒で
例えばZ80なら16ビットを上位バイト下位バイトレジスタ間で3命令で交換できるのに
68000はメモリに16ビット書き込み、8ビットシフト、メモリから8ビット読み出しという手順をしなければならない(確か)
万能のCPUなんてないものだと思ったよ

804 名前:デフォルトの名無しさん (スッップ Sdfa-sLGg) mailto:sage [2023/10/07(土) 19:39:28.37 ID:TKUMh5Zod.net]
「インディアン」は何かの差別用語に該当しないのな
戦争に負けるとはこういう事だぞお前ら

805 名前:デフォルトの名無しさん (ワッチョイ 7663-Hwqz) mailto:sage [2023/10/07(土) 19:41:36.75 ID:BCZCKqNS0.net]
由来はガリバー旅行記

806 名前:デフォルトの名無しさん (ワッチョイ 7663-Hwqz) mailto:sage [2023/10/07(土) 19:50:37.92 ID:BCZCKqNS0.net]
アメリカ発見したとき(これも本当はおかしいことなんですが)、
そこがインドだって思いこんた白人がつけた呼び方だから
本当は間違いなんですけどね
そのインディアンと、エンディアンは別の言葉です

807 名前:デフォルトの名無しさん mailto:sage [2023/10/07(土) 21:15:26.02 ID:dXS7C+xF0.net]
算用数字もリトルエンディアンだとよかったなあ

808 名前:デフォルトの名無しさん mailto:sage [2023/10/07(土) 21:15:43.32 ID:dXS7C+xF0.net]
算用数字もリトルエンディアンだとよかったなあ

809 名前:デフォルトの名無しさん (ワッチョイ 9120-5icV) mailto:sage [2023/10/07(土) 22:44:07.58 ID:S3fYgflU0.net]
>>799
68000で16bitのd0.wの値をエンディアン変換
ror.w #8,d0

68000で32bitのd0.lの値をエンディアン変換
ror.w #8,d0
swap d0
ror.w #8,d0

810 名前:デフォルトの名無しさん (ワッチョイ daad-iLfk) [2023/10/08(日) 00:21:50.43 ID:GlkvWXsG0.net]
そういや Oh! X が復刊するんだってよ。(単発で1冊出すだけだとは思うが)。
https://kibidango.com/project/2285/action/17185?ui_source=action&ui_campaign=177822&ui_medium=email

X68000Z 用のソフトを付けるそうだが8800円と妙に高い。完全にマニア向け(というか信者向け)の本だな。



811 名前:デフォルトの名無しさん (アウアウウー Sa39-OOOs) [2023/10/08(日) 10:00:50.20 ID:CrdCteTPa.net]
SJISがBEじゃないのはなんでだろうね
MSはアホだったのか?

812 名前:デフォルトの名無しさん (アウアウウー Sa39-OOOs) [2023/10/08(日) 10:01:26.67 ID:CrdCteTPa.net]
間違えた
SJISがLEじゃないのはなんでだろうね
漏れがアホだった

813 名前:デフォルトの名無しさん (ワッチョイ 7663-Hwqz) mailto:sage [2023/10/08(日) 10:27:48.16 ID:yFmeE5YY0.net]
質問の意味が分からなかったんだが
2バイト文字の上位、下位の順番のことかな?

814 名前:デフォルトの名無しさん (ラクッペペ MM0e-M0PL) mailto:sage [2023/10/08(日) 10:44:57.38 ID:Ss9cPRopM.net]
もともと日本メーカー(多分NEC)が策定したような気がする

815 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 693e-B5Nq) mailto:sage [2023/10/08(日) 11:24:23.52 ID:tCGlxsdd0.net]
JIS コードでの概念としては第一バイトが区、第二バイトが点に対応するようには設計されてる。
2バイト整数の上位と下位ではなく「第1バイト(区)」「第2バイト(点)」の組なんだよ。

Shift_JIS はアスキーコードと共存できるように JIS の配置をずらした。 (だから Shift と名前がついてる。)

816 名前:デフォルトの名無しさん (ワンミングク MMea-nQTY) [2023/10/08(日) 12:24:35.99 ID:hexAHbw2M.net]
分かったから他のスレ行けよ

817 名前:デフォルトの名無しさん (ワッチョイ da79-4iaA) mailto:sage [2023/10/08(日) 13:05:45.22 ID:SlOLtELZ0.net]
ここはCを知り尽くした老害の集いとみなせ
常に話題に新鮮さが求められる
流れを変えたくば新鮮なC言語の話を振ればよい

818 名前:デフォルトの名無しさん (アウアウウー Sa39-OOOs) [2023/10/08(日) 13:16:39.02 ID:CrdCteTPa.net]
wchar_t は何bit?

819 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 693e-B5Nq) mailto:sage [2023/10/08(日) 14:46:20.48 ID:tCGlxsdd0.net]
>>814
処理系定義。

820 名前:デフォルトの名無しさん (ワッチョイ daad-iLfk) [2023/10/08(日) 16:18:18.23 ID:c7bH/Jal0.net]
>>813
新鮮なCの話なんて、あるのか?w



821 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 693e-B5Nq) mailto:sage [2023/10/08(日) 16:26:29.67 ID:tCGlxsdd0.net]
C23 の話題なら……。
今回の変更は割とデカいし。

822 名前:デフォルトの名無しさん (ワッチョイ 9120-5icV) mailto:sage [2023/10/08(日) 18:52:25.18 ID:IT1htqzv0.net]
C11も大して使われてる気がしないところでC23なぁ

823 名前:デフォルトの名無しさん (ワッチョイ 0993-LlOc) mailto:sage [2023/10/08(日) 19:56:42.76 ID:hVEDEpG10.net]
いつだったかコミケの第何回かの略称と紛らわしかった思い出

824 名前:デフォルトの名無しさん (ワッチョイ 0aaf-ap/T) mailto:sage [2023/10/08(日) 22:56:49.03 ID:bFy9tmBW0.net]
SJISにエンディアンの問題なんかねーしw

825 名前:デフォルトの名無しさん (ワッチョイ ae5f-iLfk) mailto:sage [2023/10/09(月) 00:16:32.12 ID:v5yIEMGi0.net]
>>820
まあ強いて言うならSJISはビッグエンディアン固定だよね

826 名前:デフォルトの名無しさん (ワッチョイ 0aaf-ap/T) mailto:sage [2023/10/09(月) 00:31:56.49 ID:J9meIr3U0.net]
>>821
エンディアンというのは数値にしか成り立たない概念でしょ
UTF-16はエンディアンの区別があるけど、これは16bitの数値だからあって当然だけど、SJISは単なるバイトストリームでしょ
なのでエンディアンの区別は無いはずだけどね
SJISが16bitの数値として定義されてんなら、何かソースを教えてくれよ

827 名前:デフォルトの名無しさん (ワッチョイ 7a11-kEni) [2023/10/09(月) 01:36:54.19 ID:Epzok5Ad0.net]
C言語はOSの仕様とセットだから、どのOSのC言語か書かないと意味がない。

828 名前:デフォルトの名無しさん (ワッチョイ 7d10-GYY9) mailto:sage [2023/10/09(月) 07:56:20.38 ID:JBACiIYd0.net]
SJISにしろJISにしろ98/88で使おう(テキストVRAM書き込みや漢字ROMからの読み出し)
とするときはなんかよくわからん変換やらされた思い出・・・。

829 名前:デフォルトの名無しさん (ワッチョイ d5f3-lQHQ) mailto:sage [2023/10/09(月) 18:41:50.35 ID:iynFVAFm0.net]
>>817
constexpr、nullptr、auto
C++で便利だったやつが追加されるんだ

830 名前:デフォルトの名無しさん (ワッチョイ d5f3-lQHQ) mailto:sage [2023/10/09(月) 18:42:02.61 ID:iynFVAFm0.net]
>>817
constexpr、nullptr、auto
C++で便利だったやつが追加されるんだ



831 名前:デフォルトの名無しさん (ワッチョイ ae5f-iLfk) mailto:sage [2023/10/09(月) 19:19:32.46 ID:v5yIEMGi0.net]
>>822
文字コードは数値だと思ってたけど違うの?
ソースに似てるけどソートは出来るよ

832 名前:デフォルトの名無しさん (ワッチョイ ae5f-iLfk) mailto:sage [2023/10/09(月) 19:24:49.57 ID:v5yIEMGi0.net]
アナル可変長形式は数値じゃあないのか
勉強になったわセンキュー>>882

833 名前:デフォルトの名無しさん (ワッチョイ 7663-Hwqz) mailto:sage [2023/10/09(月) 19:30:25.37 ID:Slr0Hoys0.net]
コーヒーふきそうだった
責任取ってよね

834 名前:デフォルトの名無しさん (ワッチョイ daad-Mhb2) mailto:sage [2023/10/09(月) 19:34:22.38 ID:Oqw93GGy0.net]
アナル可変長形式ってどんな形式だべ?
太さによって広がりはするけど長さは……

835 名前:デフォルトの名無しさん (ワッチョイ 6ed5-IgUm) mailto:sage [2023/10/09(月) 19:58:17.35 ID:U5VU0viZ0.net]
SJISって1stバイトの最上位ビットが立ってるのをもって
後続バイトがペアになるわけだが
ここからエンディアンへの繋がりを見出だせない

836 名前:デフォルトの名無しさん (ワッチョイ 7663-Hwqz) mailto:sage [2023/10/09(月) 20:01:41.10 ID:Slr0Hoys0.net]
>最上位ビットが立ってる

もうちょっと複雑だったと思う
UJISとは違う

837 名前:デフォルトの名無しさん (ワッチョイ 7a36-GYY9) mailto:sage [2023/10/09(月) 23:50:22.00 ID:G12VbuWM0.net]
SJISはコード表見てて文字列を1バイトづつ見て行って
0x81~0x98、0xe0~0xeeが出てきたらSJIS文字だと判断するコード書いてた。

838 名前:デフォルトの名無しさん (ワッチョイ 7a36-GYY9) mailto:sage [2023/10/09(月) 23:55:28.00 ID:G12VbuWM0.net]
あと文字列操作コード書きやすいように1文字2バイトに変換(?)するコードも書いてた。

839 名前:デフォルトの名無しさん (ワッチョイ 0aaf-ap/T) mailto:sage [2023/10/10(火) 00:04:28.27 ID:vFMCesii0.net]
>>827
> SJISが16bitの数値として定義されてんなら、
と書いてあるだろ
数値だと思ってたけどとか、読解力が無さすぎて泣けてくる…
JISコードは16bitの数値(2byteコード)としても定義されてるけど、SJISはそれを巧妙にエンコードしたものと言えるだろう
なのでやはりバイトストリームだな

840 名前:デフォルトの名無しさん (ワッチョイ 7a36-GYY9) mailto:sage [2023/10/10(火) 00:41:46.82 ID:WRpVvMtq0.net]
テキストファイルの形式としてSJISはビッグエンディアンでなければならないって程度の認識。



841 名前:デフォルトの名無しさん (ワッチョイ 7a36-GYY9) mailto:sage [2023/10/10(火) 00:44:51.87 ID:WRpVvMtq0.net]
SJISを文字と数値の相対表と見るか、
テキストのファイル形式を含めた規格とみるか。

842 名前:デフォルトの名無しさん (ワッチョイ 5a7f-FHep) [2023/10/10(火) 01:54:11.03 ID:hSg/mMq/0.net]
いまどきキャラクタセットの操作を自作してしまうのはヤバいプログラマ

843 名前:デフォルトの名無しさん mailto:sage [2023/10/10(火) 09:46:25.05 ID:jpaIozT30.net]
昔書いたunicode対応のソースが最新コンパイラでエラー、ワーニングが山程出てきて心折れるんや・・・。

844 名前:デフォルトの名無しさん [2023/10/10(火) 10:47:51.74 ID:0SFeJAzN0.net]
文字列としてリトルエンデアンだと可変長文字コードが面倒な事になるでしょうに

845 名前:デフォルトの名無しさん [2023/10/10(火) 10:58:37.96 ID:vCJOXgr3a.net]
>>824
漢字ROMとVRAMはエンディアンというより(エンディアン)もあるが
ややこしかったのは右半分と左半分とかな

846 名前:デフォルトの名無しさん mailto:sage [2023/10/10(火) 11:36:08.74 ID:k8E2nUhl0.net]
>>840
"Aア"は0x41 0x83 0x41だけどこれがもし0x41 0x41 0x83だったら、0x41 0x41まで読んだところでこれが"AA"なのかどうかを次のバイトまで読まないと確定出来なくなるわけだよね

847 名前:デフォルトの名無しさん mailto:sage [2023/10/10(火) 14:45:56.30 ID:lY2q8v9P0.net]
>>835
どのあたりが巧妙なのか ついでに解説をお願い思案す

848 名前:デフォルトの名無しさん [2023/10/10(火) 15:06:58.22 ID:vCJOXgr3a.net]
x 巧妙に
o 泥臭く

EUC-JPで良かったんだよ

849 名前:デフォルトの名無しさん mailto:sage [2023/10/10(火) 17:44:06.68 ID:JaQe+SGi0.net]
EUC-JPにすると半角カナ文字が全滅するんだよな

850 名前:デフォルトの名無しさん mailto:sage [2023/10/10(火) 20:02:21.46 ID:SBkOlj5r0.net]
半角カナは全滅してほしかったし
今すぐにも全滅してほしい



851 名前:デフォルトの名無しさん [2023/10/10(火) 22:25:54.11 ID:8PzXep7k0.net]
もう面倒だから Unicode を UTF-8 で使え。

852 名前:デフォルトの名無しさん mailto:sage [2023/10/11(水) 00:45:18.47 ID:m71rV3Zb0.net]
euc-jpの半角カナは全滅じゃなくて、バイト数が多くなる、だったような。3バイトとか

853 名前:デフォルトの名無しさん mailto:sage [2023/10/11(水) 01:29:28.77 ID:cflt71CU0.net]
>>843
JIS X 0208はいわゆる半角文字も2byteコードで定義されてるが、それと半角カナをエスケープシーケンス無しで混在させる方法を定義したんだよ!
ほぼWikipediaの受け売りだw
詳しいことはWikipediaを見ろよ
つうかそんなことも分からん若造が増えたんだな…

854 名前:デフォルトの名無しさん [2023/10/11(水) 03:32:09.53 ID:RVlIgJ7N0.net]
>>848
2バイト。 0x8e が最初にあって、その次にシフトJISの半角仮名と同じコードが来る。

855 名前:デフォルトの名無しさん (ワッチョイ 7663-Hwqz) mailto:sage [2023/10/11(水) 09:52:13.46 ID:LeQSJgup0.net]
1バイトアルファベットも2バイト化して

856 名前:デフォルトの名無しさん (ワッチョイ 0a0d-HisN) [2023/10/11(水) 10:14:54.69 ID:NQyPw3h00.net]
文字コードも、32bitとか、64bitとか、メモリーアクセス単位に見合うサイズにしたらいいだけだよなぁ
可変長にする必要が全く無い

857 名前:デフォルトの名無しさん (ワッチョイ 7a36-GYY9) mailto:sage [2023/10/11(水) 10:43:08.13 ID:ZfRV8AUK0.net]
80年代プログラマ「1バイト、1ビットでも無駄にするんじゃねぇよ!!」

858 名前:デフォルトの名無しさん (ワッチョイ 85de-ap/T) mailto:sage [2023/10/11(水) 11:58:33.24 ID:cflt71CU0.net]
1文字に見える絵文字もUTF-8で41byteになったりするんで、1文字64bitにしようが可変長になる
なのでUTF-8かUTF-16にしておくのが無難
UTF-16は主な漢字は2byteで済むんで、何気にバランスが良い文字コードだと思えるようになってきた

859 名前:デフォルトの名無しさん mailto:sage [2023/10/11(水) 21:17:47.06 ID:DBrOrPS60.net]
>>824
表示コードだろ
SJISにしろJISにしろ表にすると空白部分がいっぱいあってROM容量がもったいない(当時は)から

860 名前:デフォルトの名無しさん mailto:sage [2023/10/11(水) 21:21:23.81 ID:DBrOrPS60.net]
>>852
まあ数百文字しか文章を書かないプログラマーの発想だねえw
数万文字や数万ページの文書になると保存や検索にリソース食ってもったいない



861 名前:デフォルトの名無しさん [2023/10/11(水) 22:12:46.43 ID:RVlIgJ7N0.net]
>>853
2KBに無理矢理詰め込むみたいなことを昔やったことあるな。ROMの容量に合わせてビット単位で詰め込む。

そういえば Apple ][ のモニタプログラムが2KB丁度で6502のアセンブラのソース見て物凄い詰め込み具合に感動した。
1バイトも無駄がなく2KBピッタリだった。

862 名前:デフォルトの名無しさん mailto:sage [2023/10/11(水) 23:09:10.07 ID:Oo4KNMoV0.net]
> 1バイトも無駄がなく2KBピッタリだった。

そんなことない。まだ詰めれるし空きもあった。

863 名前:デフォルトの名無しさん [2023/10/11(水) 23:34:38.65 ID:RVlIgJ7N0.net]
>>858
えー。なかったと思ったがなあ。それって Apple ][ plus とか、後に出た少し変えたやつでは?

864 名前:デフォルトの名無しさん mailto:sage [2023/10/11(水) 23:40:13.44 ID:m71rV3Zb0.net]
>>850
おお、指摘サンキューです

アップル2とか
マニアック過ぎて付いて行け


865 名前:デフォルトの名無しさん mailto:sage [2023/10/11(水) 23:42:44.40 ID:UuDrjcXU0.net]
アリスソフトのゲームはひらがながカタカナで入っててうふ~んだったな

866 名前:デフォルトの名無しさん (ワッチョイ 9120-5icV) [2023/10/12(木) 02:28:41.65 ID:5xqSIwyk0.net]
>>859
https://6502disassembly.com/a2-rom/OrigF8ROM.html
> feae: ea nop
> feaf: ea nop

↑空きの例

867 名前:デフォルトの名無しさん (ワッチョイ 7a26-vQFs) [2023/10/12(木) 06:14:09.61 ID:YEvWoXVk0.net]
linuxのファイルディスクリプタの操作に関する質問です。
別デバイスとのシリアル通信制御にselect関数を使用しています。
受信可能かタイムアウトかを判断しているんですが、別デバイスから電文が送られてからselect関数が受信可能を検知するまでに20msほどかかり、その後のreadしたサイズは32ビットほどです。
理想は5ms以内で受信可能を検知してほしいです。
ボーレートは80000bps(カスタム)
システムコールを使っている以上、デバイスドライバ。いじらないと難しいですかね?

868 名前:デフォルトの名無しさん (ワッチョイ 0941-LlOc) mailto:sage [2023/10/12(木) 07:17:12.28 ID:oHsanHa80.net]
むむむ
20msは遅いですね 特殊な環境?

869 名前:デフォルトの名無しさん [2023/10/12(木) 08:00:06.42 ID:YEvWoXVk0.net]
>>864
ラズパイです
32ビットではなく32バイトです
送っている電文も32バイトです

870 名前:デフォルトの名無しさん [2023/10/12(木) 08:06:20.25 ID:YEvWoXVk0.net]
ちなみにselect置かずに、ノンブロッキングでループでreadした場合も、少しずつreadできるわけではなく、20ms後に送った電文全てがreadで読み取れます



871 名前:デフォルトの名無しさん mailto:sage [2023/10/12(木) 08:47:57.58 ID:qyteNpVi0.net]
rawモードにしてないとかじゃないの

872 名前:デフォルトの名無しさん mailto:sage [2023/10/12(木) 09:10:29.66 ID:qyteNpVi0.net]
後は低遅延カーネルが使えるなら使うとか

873 名前:デフォルトの名無しさん (ワントンキン MMea-nQTY) [2023/10/12(木) 09:28:19.79 ID:aDAtXVNfM.net]
そもそもデータは実際どれくらいで到着してんのか確認はしたんだよな?
送信側が20ms毎にしか動いてないかとかその辺も

874 名前:デフォルトの名無しさん (アウアウウー Sa39-OOOs) [2023/10/12(木) 10:25:26.89 ID:u59ybXeVa.net]
16bit sensation 観てるけど
https://16bitsensation-al.com/
出て来るPC画面の編集中のアセンブラが
32bit用のコードじゃん

875 名前:デフォルトの名無しさん (ワッチョイ 7663-Hwqz) mailto:sage [2023/10/12(木) 10:58:22.07 ID:ULGeIkC90.net]
どの画面かよく分からなかった
使ってるPCはどうやら9801VMみたいだ

https://twitter.com/16bit_anime/status/1708133347308818759/photo/1

5インチフロッピーなんて、なつかし
(deleted an unsolicited ad)

876 名前:デフォルトの名無しさん [2023/10/12(木) 11:22:56.30 ID:m8bqtWD+0.net]
>>869
それは確認してます。

877 名前:デフォルトの名無しさん [2023/10/12(木) 11:23:04.80 ID:m8bqtWD+0.net]
>>869
それは確認してます。

878 名前:デフォルトの名無しさん mailto:sage [2023/10/12(木) 12:24:11.74 ID:CHwK2zqJ0.net]
>>870
アセンブラスレッドでやれ

879 名前:デフォルトの名無しさん [2023/10/12(木) 17:39:39.42 ID:m8bqtWD+0.net]
>>865
200バイト送ってみましたが、検知の時間差はあまりありませんでしたが、read1回で200バイト全部取れました…

880 名前:デフォルトの名無しさん (ワッチョイ da79-4iaA) mailto:sage [2023/10/12(木) 21:33:07.79 ID:ZXm8+EHB0.net]
ラズパイのスタックがバグってるだけだろ
他の環境でも試したのか?



881 名前:デフォルトの名無しさん (ワッチョイ 4677-HisN) [2023/10/13(金) 21:33:40.39 ID:9i9XasLe0.net]
パケットサイズ貯まるまで送信しないか
貯まらなくても時間で送信だったかなぁ

882 名前:デフォルトの名無しさん (ブーイモ MMfa-rRiV) mailto:sage [2023/10/13(金) 21:48:20.10 ID:tPyDzWZ1M.net]
>>877
その辺は設定で変えられるんだよ
rawモードにすれば両方無効になる

883 名前:デフォルトの名無しさん (ワッチョイ ae5f-iLfk) mailto:sage [2023/10/13(金) 22:00:39.18 ID:vGVgbb2n0.net]
1人日5万円くれたら解決してあげるよ

884 名前:デフォルトの名無しさん (ワッチョイ c914-cthS) mailto:sage [2023/10/14(土) 01:22:13.59 ID:tQyeYAE20.net]
つ5万円

885 名前:デフォルトの名無しさん mailto:sage [2023/10/14(土) 01:23:14.75 ID:Z8feDlim0.net]
プロになると、Linux は3回 shutdown しろと言う香具師がいるw

Windows に至っては、
shutdown はダメ、再起動しろってさw

どういうシステムやねんw

886 名前:デフォルトの名無しさん [2023/10/14(土) 02:10:30.63 ID:BgrcFKKf0.net]
>>862
それ何かの都合でどうしても必要だから NOP にしてあるのでは? まあでも開いてると言えば開いてるな。
とすると2KB未満であの機能が詰め込まれていることになって、余計に凄い感じするわけだが。

まあでも逆アセンブルが出来るのにその文字がソースに入ってなくて、一体どうやっているのかと延々と
プログラムを読んで、確か2バイトに3文字詰め込んでて(f9c0, fa00 の辺り)、当時それを見つけて驚いたな。
初心者だったからね。

887 名前:デフォルトの名無しさん (ワッチョイ 7b27-S8Dy) [2023/10/14(土) 12:58:59.76 ID:FvSW4+JI0.net]
3回shutdownは初めて聞いた
3回syncのことかな?

1回目が依頼、2回目が実行、3回目は祈り・・・

888 名前:デフォルトの名無しさん [2023/10/14(土) 23:20:34.47 ID:BgrcFKKf0.net]
2回以上連続syncはやったことないなあ

889 名前:881 mailto:sage [2023/10/15(日) 00:37:55.29 ID:1GgH9uvV0.net]
スマン。3回shutdown じゃないわ。
3回sync だった

Windows は高速スタートアップがあるから、
shutdownはメモリの内容をSSD に保持するから、復元されてしまうので、
再起動するのが正解らしい

890 名前:デフォルトの名無しさん (ワッチョイ c925-+xaX) mailto:sage [2023/10/15(日) 06:23:13.62 ID:RYkKDVjT0.net]
説明がヘタで何言ってるのかわからんが
このスレッドのテーマと関係ないだろ他でやれ



891 名前:デフォルトの名無しさん (ワッチョイ 1336-8seT) mailto:sage [2023/10/15(日) 21:52:14.34 ID:nkdZTM470.net]
一回目の sync に時間がかかるとその間にメモリの書き換えが起きてしまう可能性があるから、二度目の sync をする。ふつうはそこで満足する。どうしても心配ならもう一度 sync するわけだけど、そこまで心配なら別の方法を考えた方がいい。

892 名前:デフォルトの名無しさん (ワッチョイ 1379-3b5p) mailto:sage [2023/10/15(日) 21:54:23.57 ID:WV6g/2dS0.net]
888888888888888888888888888888888888888
888888う8888888888ん88888888888888888こ88
888888888888888888888888888888888888888

893 名前:デフォルトの名無しさん [2023/10/16(月) 10:05:31.11 ID:kgcCjrnKa.net]
CでWindowsのデバドラ描くなら
shutdownが高速スタートアップかそうじゃないかは重要じゃないか
cmd 起動して shutdown -s -t 0 をよくやる
これだけじゃなくて hybernate をあらかじめ off にしておく必要もある
powercfg.exe /hibernate

894 名前:デフォルトの名無しさん (ワッチョイ 29b7-S8Dy) [2023/10/17(火) 10:35:23.04 ID:QQA0GvA50.net]
>>887
1回目のsyncはコマンド実行後にすぐ返るけど、
2回目のsyncは1回目が終わるまでブロックされるんよ
だから書き込み保証の代わりになってたってわけ
3回目は祈り・・・

895 名前:デフォルトの名無しさん (ワッチョイ 8b63-iZeJ) mailto:sage [2023/10/17(火) 10:47:53.72 ID:+MFXb2Fe0.net]
祈りは聞き届けられました!

896 名前:デフォルトの名無しさん mailto:sage [2023/10/17(火) 12:31:38.91 ID:y7v373yJ0.net]
三菱UFJ銀行など10金融機関で約250万件の送金が滞った全国銀行データ通信システム(全銀システム)の障害は、各金融機関と同システムをつなぐ機器の容量(メモリー)不足が要因だったことがわかった。機器の更新で処理量が増え、想定の容量を超えてパンクした。事前のテストが不十分だった可能性もあり、検証が求められる。

897 名前:デフォルトの名無しさん mailto:sage [2023/10/17(火) 12:35:48.82 ID:y7v373yJ0.net]
記事読んでると、素人が作ったのかと思うほど粗雑に感じるが、
単に記事を書いた記者が素人だからかもしれない。

898 名前:デフォルトの名無しさん [2023/10/17(火) 13:14:23.15 ID:XZGXsIC3M.net]
またスレチかよわざとやってんのか?w

899 名前:デフォルトの名無しさん (アウアウウー Sadd-f0fU) [2023/10/17(火) 14:30:57.88 ID:vCPpyEw2a.net]
ルーターのNATテーブルが貧弱で
定期的に再起動しないといけないルーターがあったのを思い出した

900 名前:デフォルトの名無しさん (ワッチョイ 0bc2-T9H3) [2023/10/20(金) 15:45:46.46 ID:Ipe4ElpV0.net]
それなんてcorega?

ってフレーズも懐かしい・・・。



901 名前:デフォルトの名無しさん (ワッチョイ e95f-pCU2) mailto:sage [2023/10/20(金) 15:48:07.37 ID:v1uIJG0f0.net]
最近じゃ組み込み系もPythonになってるらしいな

902 名前:デフォルトの名無しさん (ワッチョイ 13ad-62ca) [2023/10/20(金) 18:19:30.36 ID:Zfs7dH680.net]
初耳だ

903 名前:デフォルトの名無しさん (ワッチョイ 13ad-62ca) [2023/10/20(金) 18:19:46.73 ID:Zfs7dH680.net]
初耳だ

904 名前:デフォルトの名無しさん (ラクッペペ MMeb-BOBA) mailto:sage [2023/10/20(金) 19:00:07.60 ID:OBgHVD6WM.net]
ArduinoとかはまだC/C++が使われているけどRaspberryPiあたりではPythonが使われている

905 名前:デフォルトの名無しさん (ワッチョイ c134-eijK) [2023/10/20(金) 20:37:45.65 ID:iiycX8pJ0.net]
ラズパイが組み込みって言われてもなぁ

906 名前:デフォルトの名無しさん (ワッチョイ 8b63-iZeJ) mailto:sage [2023/10/20(金) 20:52:13.36 ID:WNS0tsmN0.net]
コンパクトなバイナリーが作れるんだろうか
それともライブラリーが別途必要?

907 名前:デフォルトの名無しさん (ワッチョイ 2bb6-AzOG) [2023/10/20(金) 22:48:36.74 ID:gDJgEYng0.net]
Cでつくったもので自慢のものある?

908 名前:デフォルトの名無しさん (ワッチョイ ddf0-5RLD) mailto:sage [2023/10/21(土) 12:56:21.39 ID:Auba50wB0.net]
ラズパイの話するならPicoか否か書けよ

909 名前:デフォルトの名無しさん mailto:sage [2023/10/21(土) 13:34:03.99 ID:ifbOBJO10.net]
ラズパイの話するな

910 名前:デフォルトの名無しさん mailto:sage [2023/10/21(土) 13:40:58.48 ID:m23W7dra0.net]
>>903
通信プロクシとテストデータ作成ツール^^
しょうもない物しか作ってないわスマンな



911 名前:デフォルトの名無しさん (ワントンキン MM8a-xqvO) mailto:sage [2023/10/21(土) 21:29:19.14 ID:t2gg/cweM.net]
作ったものは数々あるが、
自慢できるものはない

912 名前:デフォルトの名無しさん [2023/10/21(土) 22:19:05.57 ID:9n8k9yEZ0.net]
恥の多いプログラムを作って来ました。

913 名前:デフォルトの名無しさん (アウアウウー Sa09-6i8i) [2023/10/22(日) 11:30:49.85 ID:GXjFDCr1a.net]
そもそも業務で造ったものは守秘義務あるからな

914 名前:デフォルトの名無しさん (ワッチョイ 7a79-Idv/) mailto:sage [2023/10/22(日) 12:04:50.59 ID:7Lbl94Rb0.net]
>>908
プログラマー失格やな!

915 名前:デフォルトの名無しさん (ワッチョイ d663-iKuA) mailto:sage [2023/10/22(日) 12:08:40.64 ID:+M4dXZ790.net]
作っていて、恥ずかしさを感じないとすれば、それこそ失格だ
人は失敗の中から多くを学ぶ

916 名前:デフォルトの名無しさん (スッップ Sd9a-ilqh) mailto:sage [2023/10/22(日) 12:41:16.58 ID:WtUZjflvd.net]
恥とかそんなのとは違う
ビジネスとはスピードと品質のトレードオフ
そのバランスを考えられないのがプロとして恥

917 名前:デフォルトの名無しさん (ワッチョイ dd14-PKJr) mailto:sage [2023/10/22(日) 12:41:36.43 ID:DsuvifSY0.net]
>>911
太宰治の人間失格とかけてんだろ
気付いてやれよ

918 名前:デフォルトの名無しさん (ワッチョイ 7aad-CfcT) [2023/10/22(日) 13:27:44.71 ID:lT9uYjte0.net]
>>900
それってLinuxではないOSで動く場合?
Linux入れちゃったらドライバとそれに対するライブラリだけの問題で言語は関係なくなるよね。

919 名前:デフォルトの名無しさん (ワッチョイ 7a79-Idv/) mailto:sage [2023/10/22(日) 13:30:41.44 ID:7Lbl94Rb0.net]
自分で調べろよそれぐらい…お前もプログラマー失格やな!

920 名前:デフォルトの名無しさん mailto:sage [2023/10/22(日) 19:09:03.13 ID:1z8BeiKk0.net]
生まれてすみません



921 名前:デフォルトの名無しさん mailto:sage [2023/10/22(日) 19:19:12.31 ID:+M4dXZ790.net]
いいってことよ

922 名前:デフォルトの名無しさん [2023/10/24(火) 16:01:52.72 ID:ju9L4gE1F.net]
おかえり

923 名前:デフォルトの名無しさん [2023/10/26(木) 00:49:54.03 ID:89nTklyv0.net]
C23でC11ぶりに更新ってC標準化委員会(?)だかはサボり過ぎじゃねーか。
C++なみとは言わんが5年ぐらいごとに見直せや。
nullptrとか入るの遅過ぎる。
deferも無いとかアホすぎる。

924 名前:デフォルトの名無しさん mailto:sage [2023/10/26(木) 02:57:54.97 ID:q3UKhsX80.net]
いつまでも未完成のサグラダファミリアみたいなC++とは違ってCは生まれた時から完成してるから
後々機能追加したところでそいつの自己満でしかない
未完成のC++から逆輸入されて良かったことなんて行コメント程度しかない

925 名前:デフォルトの名無しさん (スフッ Sd9a-dytz) [2023/10/26(木) 08:37:00.27 ID:FkoAeS+Vd.net]
コンパイラがC11のgets_s()関数に対応してないんですが、どうすればいいですか?

926 名前:デフォルトの名無しさん (スフッ Sd9a-dytz) [2023/10/26(木) 08:37:12.14 ID:FkoAeS+Vd.net]
コンパイラがC11のgets_s()関数に対応してないんですが、どうすればいいですか?

927 名前:デフォルトの名無しさん (ワッチョイ dd14-PKJr) mailto:sage [2023/10/26(木) 09:02:33.67 ID:nJ6kaeWr0.net]
あきら🍈

928 名前:デフォルトの名無しさん (スフッ Sd9a-9f78) [2023/10/26(木) 09:08:02.65 ID:FkoAeS+Vd.net]
>>923 あきらめてvisual studioでgets_s()関数を使えていますが、vscodeの普段使っているコンパイラでは
使えません

929 名前:デフォルトの名無しさん (スフッ Sd9a-9f78) [2023/10/26(木) 09:08:14.78 ID:FkoAeS+Vd.net]
>>923 あきらめてvisual studioでgets_s()関数を使えていますが、vscodeの普段使っているコンパイラでは
使えません

930 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 8e3e-exru) mailto:sage [2023/10/26(木) 09:11:27.20 ID:oN20rU1J0.net]
自分で書いたってそんなに時間はかからんだろう。
行がバッファより長いときや引数が条件を満たさないときに
制約ハンドラを呼ぶってだけだぞ。



931 名前:デフォルトの名無しさん [2023/10/26(木) 09:13:48.45 ID:FkoAeS+Vd.net]
>>926 結局gets()関数の代用はfgets()しかないというこですね

932 名前:デフォルトの名無しさん mailto:sage [2023/10/26(木) 09:38:07.39 ID:G4ruVh0t0.net]
自分で作れよ
Cってそういうもんだ

933 名前:デフォルトの名無しさん (スフッ Sd9a-9f78) [2023/10/26(木) 10:11:10.35 ID:FkoAeS+Vd.net]
>>928 自分で書きました 

934 名前:デフォルトの名無しさん (スッップ Sd9a-Habm) [2023/10/26(木) 11:50:48.14 ID:ZES507rzd.net]
>>920
そんなんだからリーナスだってぶち切れるんだぞ。

935 名前:デフォルトの名無しさん (スッップ Sd9a-SL8W) mailto:sage [2023/10/26(木) 13:16:49.71 ID:62xlwgird.net]
winでguiアプリ作る時とかCランタイムなんて全く使わないでしよ
今更Cで作るかは置いといて

936 名前:デフォルトの名無しさん (ワッチョイ f969-Dq0e) mailto:sage [2023/10/26(木) 13:20:48.32 ID:S8nCpIo20.net]
(σ・∀・)σゲッツ!!

937 名前:デフォルトの名無しさん (ワッチョイ d6ab-OCAv) mailto:sage [2023/10/26(木) 14:24:42.99 ID:Qn92XRBA0.net]
文字列周りのあれこれは Cランタイムのお世話も併用することが

938 名前:デフォルトの名無しさん (スフッ Sd9a-Cy5w) [2023/10/26(木) 15:12:00.43 ID:ES29OdTad.net]
TCHAR無視でASCIIzしか使わないならいけるかな
memcpyとかmallicとかも普通に使えるしな
TCHARのUNICODE版の文字列処理ってもうCランタイムと言うのは無理ありそう
末尾にに_s付いたのとか先頭にl付いたのとか
もう亜種増え過ぎで覚えられんくなった
あれはCランタイムじゃなくてwin32apiだわ

939 名前:デフォルトの名無しさん (ワッチョイ 8e5f-ANn9) mailto:sega [2023/10/26(木) 17:56:31.84 ID:SEjxiCyL0.net]
C言語でGC実装したライブラリあったよね
あれって今でも使われてんの?

940 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 8e3e-exru) mailto:sage [2023/10/26(木) 18:27:34.63 ID:oN20rU1J0.net]
>>935
Boehm GC のこと?



941 名前:デフォルトの名無しさん (ワッチョイ 8e5f-ANn9) mailto:sage [2023/10/26(木) 21:04:51.64 ID:SEjxiCyL0.net]
>>936
そうそうそれそれ
思い出したけど w3m とかで使ってたよな
w3mが現役ってことはboehmgcも現役なんかね

942 名前:デフォルトの名無しさん (ワッチョイ f969-Dq0e) mailto:sage [2023/10/26(木) 23:37:41.65 ID:S8nCpIo20.net]
Boehm GC使ってるぞ
つうかUnityのランタイムはBoehm GCが使われてる

943 名前:デフォルトの名無しさん mailto:sage [2023/10/26(木) 23:41:25.14 ID:S8nCpIo20.net]
Unity使ってるゲームはごまんとあるけど、敢えてGCを切ってるゲームも中には有るかも知れんが、ほとんどのゲームは裏でBoehm GCが動いている
要するに知らないだけで、Boehm GCはメチャクチャ使われてる
無知は罪だなw

944 名前:デフォルトの名無しさん mailto:sage [2023/10/26(木) 23:50:27.25 ID:S8nCpIo20.net]
> ほとんどのゲーム
ほとんどのUnity使ったゲームでだな
それと最近UnityのBoehm GCにインクリメンタルGCが追加された
それまではStop The World(STW)のインパクトが凄くて、みんな最後にはなるべくGCが発生しないようにするチューニングが待っていたw

945 名前:はちみつ餃子 mailto:sage [2023/10/27(金) 00:08:08.21 ID:heVGcbpM0.net]
Boehm GC はマシンスタックも走査するようなデザインだからアーキテクチャに依存する部分がいっぱいあるし、メンテナンスもし続けないとすぐ実情にあわなくなって破綻すると思う。
逆に言えば採用されてちゃんと動いているのはちゃんとメンテナンスされてるからだろう。
それなりに活発に利用も開発もされてると言えるんじゃないか。

プログラミング言語処理系のいくつかで採用事例を見たことはある。

946 名前:デフォルトの名無しさん mailto:sage [2023/10/27(金) 00:26:28.28 ID:u2CdPYGW0.net]
今も活発に開発されてるよ
まぁリリースは半年とか年一ぐらいだけどね

947 名前:デフォルトの名無しさん (ワッチョイ cee7-ANn9) mailto:sage [2023/10/27(金) 11:18:26.71 ID:dEbuX89/0.net]
そうなのかUnityすげーな
そもそもUnityがC言語だったのも知らんかったわ
C言語でGUIなゲーム作れるならやってみるわ
ありがとう

948 名前:デフォルトの名無しさん (ワッチョイ cd10-JD/u) mailto:sage [2023/10/27(金) 11:33:41.42 ID:9P66tx0i0.net]
ゲームのMOD管理や改造ツール探してると結構間違ってソース配布ページへ飛ばされる。
ファイル拡張子が*.cなトコは無いにしても、*.cppなとこは多いね。

949 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 8e3e-exru) mailto:sage [2023/10/27(金) 12:18:24.77 ID:heVGcbpM0.net]
>>943
dotNET が Unity の基礎にあるからユーザが使うレイヤでは C# が前提だよ。
ただ、それを実行するランタイムサポートの中には低レイヤ寄りの部分も当然あるし、
そこで Boehm GC が使われているって話。

C で書いたモジュールを呼び出すことは出来るんだけど…。
「C でゲームを作る」のがやりたいなら Unity は全然向いてない。

950 名前:デフォルトの名無しさん (ワッチョイ ddf4-U54k) mailto:sage [2023/10/27(金) 12:22:07.63 ID:gE38RsN70.net]
そもそもC言語でGUIゲーム作れるじゃんUnityじゃなくても



951 名前:デフォルトの名無しさん (ワッチョイ fade-UUkb) [2023/10/27(金) 13:36:32.37 ID:DWeOppJn0.net]
公開して

952 名前:デフォルトの名無しさん (ワッチョイ 999f-dytz) mailto:sage [2023/10/27(金) 13:59:41.03 ID:CZ4Htjtu0.net]
後悔しました

953 名前:デフォルトの名無しさん (ワッチョイ 7aad-iKuA) mailto:sage [2023/10/27(金) 15:35:27.52 ID:sXR1+sXw0.net]
航海します

954 名前:デフォルトの名無しさん (ワッチョイ c18f-BTDU) [2023/10/27(金) 21:03:53.47 ID:nBxrDXuS0.net]
Cでゲームかぁ
面倒くさそう

955 名前:デフォルトの名無しさん (ワッチョイ d663-iKuA) mailto:sage [2023/10/27(金) 21:16:42.74 ID:qIG6QpEs0.net]
Cじゃなくてもめんどくさそうって言い出しそう

956 名前:デフォルトの名無しさん (ワッチョイ dd14-PKJr) mailto:sage [2023/10/27(金) 21:30:02.47 ID:t+LCPq2M0.net]
Windowsのクロンダイク作ろうぜ
あれならもともとCのはず

957 名前:デフォルトの名無しさん (ワッチョイ d663-iKuA) mailto:sage [2023/10/27(金) 21:37:13.50 ID:qIG6QpEs0.net]
MS-DOSの頃はアマチュアの作ったゲームがたくさんあったな
ゲームメーカーの商品より優秀なのもあったし、
メーカーから訴えられた個人もいたな。
メーカー側が取り下げた様だが、
もしかしたら訴えた事実がなかったかも知れない
その後倒産したという噂を聞いた
Windowsになってからは、VBで作る人が多かった

958 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 8e3e-exru) mailto:sage [2023/10/27(金) 21:44:44.21 ID:heVGcbpM0.net]
アマチュアが作っているゲーム作品の数で言えば今のほうがずっと多いと思うが。

959 名前:デフォルトの名無しさん (ワッチョイ d663-iKuA) mailto:sage [2023/10/27(金) 22:25:12.50 ID:qIG6QpEs0.net]
そうなのか・・・
最近はゲームしてないので知らないんだw

960 名前:デフォルトの名無しさん (ワッチョイ 7a79-Idv/) mailto:sage [2023/10/27(金) 22:28:08.93 ID:M9GgCmOO0.net]
今はvやutuberに媚びたゲーム作れば配信で遊んでくれるから一気にプレイヤー数も増えるよ



961 名前:デフォルトの名無しさん (ワッチョイ 81f4-WJPr) mailto:sage [2023/10/28(土) 11:42:50.19 ID:vcHM6tqr0.net]
>>953
すっごい適当なことばっかり言うねw

962 名前:デフォルトの名無しさん (ワッチョイ 5359-g3nS) mailto:sage [2023/10/28(土) 12:43:38.00 ID:p7wdBTPe0.net]
>>957
Bio_100%とかタカリスなんて知らないせだいなんだろうな

963 名前:デフォルトの名無しさん (ワッチョイ 199f-CP9B) mailto:sage [2023/10/28(土) 13:20:46.38 ID:CS7+IID10.net]
ゲームエンジンもライブラリもろくになかった時代にC言語とアセンブラを駆使して
高レベルなゲームを作れるアマチュアプログラマがたくさんいた
(Unityで作るより高スキルが求められる)という話であって、
アマチュア/インディーズゲームのリリース数が論点というわけじゃないんじゃね?w

964 名前:デフォルトの名無しさん (ワッチョイ 215f-H9h+) mailto:sage [2023/10/28(土) 13:35:13.59 ID:t5G+utQT0.net]
1997年あたりにワイヤフレームだけどゴリゴリの3Dで8台で競艇するゲームは当時かなりオーパーツ感あった
波でグラグラゆれたり、あの当時でステージメイキングも確か出来たし、誰か知ってる人おらんじゃろうか

965 名前:デフォルトの名無しさん (ワッチョイ 5351-zW/F) [2023/10/28(土) 14:14:38.32 ID:wcF/YB9E0.net]
よそできけよ

966 名前:デフォルトの名無しさん (ワッチョイ 937c-cQ99) [2023/10/29(日) 00:56:56.68 ID:GrwAVmld0.net]
C言語標準規格、せめて5年毎ぐらいに見直してくれればなぁ。
そしたらとっくにnullptrは入ってただそうし。もしかしたら deferや lambdaも入ってたかもしれん。

967 名前:デフォルトの名無しさん (ワッチョイ 5351-zW/F) [2023/10/29(日) 08:16:14.69 ID:d4XtWcMl0.net]
規格に対してまあそういう考えの人がいるのも分かるが、全体としては改定に対しての需要というか声は小さかったってことでしょ

968 名前:デフォルトの名無しさん (ワッチョイ 1379-JwVi) mailto:sage [2023/10/29(日) 08:37:00.25 ID:x+5RB5aB0.net]
どれも今更すぎていらんわ
そういうの絶対必要って奴はとっくにC言語ではない何かを使ってるでしょ

969 名前:はちみつ餃子 mailto:sage [2023/10/29(日) 09:22:00.09 ID:C0ma4yse0.net]
>>962
C17 がわずかな保守で終わってることから察しなよ。
見直した結果として変更が要らんという判断をしたんだ。

C に defer を入れる意味はない。
提案として出ている以上は欲しいと思う人もいるんだろうけど。
あれは panic とかがあっても後始末するというところが価値なので
そういうのがない C で関数の終わりに後始末したけりゃ関数の終わりに書けばいい。
例外処理も含めて入れるってのだとなおさら無理だと思うし。
いまさらランタイムを分厚くする方向の機能を言語コアに入れるのは賛成を得られるはずがなさそう。

ラムダ式はまだ可能性がなくもなさそうに思うが……
C++ のラムダ式は暗黙のクラス定義の構文糖として定義することで詳細な規定を
大幅に別項目に丸投げ出来ている。
C で理屈をきちんと整理するのはちょっと難しくない?
キャプチャを全く諦めるならあり得そう。

970 名前:デフォルトの名無しさん mailto:sage [2023/10/29(日) 09:22:16.65 ID:+KTUg2vO0.net]
継続メンテナンスが必要なのはだいたいC89の頃のプロダクトだったりするので
C言語自体の規格アップデートはさほど必要とされていないのね



971 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9b3e-g5YV) mailto:sage [2023/10/29(日) 10:51:27.53 ID:C0ma4yse0.net]
モダンな機能が必要なら C++ を使えばいいって言えてしまうってのもあるしな。
C23 は刷新が大きいけど、新しい機能を入れるというよりは
あまりにも駄目すぎるところを (C++ の後追いをする形で) 改良するって感じだし。

972 名前: mailto:sage [2023/10/29(日) 15:22:27.72 ID:YxpLOPna0.net]
C99 からの無名構造体は廃止してほしいねえ、あれでC++との互換が失われた。
構造体にコンストラクタを記述できるようにした方がマシだったと思う…

973 名前: mailto:sage [2023/10/29(日) 15:22:33.47 ID:YxpLOPna0.net]
C99 からの無名構造体は廃止してほしいねえ、あれでC++との互換が失われた。
構造体にコンストラクタを記述できるようにした方がマシだったと思う…

974 名前:デフォルトの名無しさん mailto:sage [2023/10/29(日) 15:24:11.31 ID:V/yNBYFm0.net]
コンストラクタ用意したら、それはもはやCではない

975 名前:はちみつ餃子 mailto:sage [2023/10/29(日) 16:10:21.42 ID:C0ma4yse0.net]
>>968
コンストラクタこそ要らないだろ。
関数として書けば済む話だから。

ああいうのは色んな機能と連携して便利になるので
個々に見てしまうとたいして便利ではない。

976 名前:デフォルトの名無しさん (ワッチョイ 1379-JwVi) mailto:sage [2023/10/29(日) 17:23:22.94 ID:x+5RB5aB0.net]
>>968
Cでtypedef+無名構造体/共用体のペアはstruct tag書式より使われてると思うが
これはstructをいちいち書かされるC固有の仕様の問題であって、C++では最初から型宣言自体のやり方が違う
つまりCの仕様をC++に合わせる意味は無く、C++との互換性はどうでもいい

977 名前:デフォルトの名無しさん mailto:sage [2023/10/29(日) 22:25:46.25 ID:ce2BuRgD0.net]
>>965
例外の無いCでのdeferの意味は、単に後処理(デストラクタ)をコンストラクタ(Cではmallocや初期化関数)の直下に書けるという意味がある
関数の下に書けばいいといっても、gotoで飛ばしてんじゃ、プログラミング言語として欠陥が有ると思うよ
goto使うな→エラー処理で使えば綺麗に書けるよ!って、やっぱおかしいだろw

978 名前:デフォルトの名無しさん (ワッチョイ 1989-FUJr) mailto:sage [2023/10/29(日) 23:50:43.25 ID:eMkvRHiW0.net]
defer って分からんのですが、関数単位での atexit() みたいなもの?

979 名前:デフォルトの名無しさん (ワッチョイ d95d-kYJB) mailto:sage [2023/10/30(月) 00:11:39.03 ID:2SouKz/I0.net]
double* q = malloc(something);
defer { free(q); }
↑これ見れば一目瞭然だな
exitと関数やブロックを抜ける時に発動する
けど、Cは書かれた通りに動くという前提を少し逸脱してんだよね
それでも絶対便利ではある
難しい問題だな

980 名前:デフォルトの名無しさん (ワッチョイ 1989-FUJr) mailto:sage [2023/10/30(月) 00:12:01.02 ID:hHEGE8Ol0.net]
合ってるよね、うん

それ(他言語の defer 相当機能)って、問題解決にC言語を採用する環境では、OS上のプロセスの切り出し単位の設計、にマッピングすれば済む事ではないのかな?

建設的な議論の参考ネタとして:
perl言語が嫌われた理由の一つに「同じ事をいろんな書き方で書ける」言語設計ポリシーがあって、それは他人が書いたコードをメンテする立場だと「あらゆる書き方に精通してないとメンテできない」デメリットになり

pythonはそれを反面教師として「同じ事はだいたいみんな同じ書き方になるような言語設計を目指す」ポリシーにした、と認識してます



981 名前:デフォルトの名無しさん (ワッチョイ 1989-FUJr) mailto:sage [2023/10/30(月) 00:33:24.74 ID:hHEGE8Ol0.net]
ああ、ブロック単位なのね…

とすると、上手なC言語のプログラマー達が習慣的にやってきた方法は以下ですよね:

■実装すべき処理を関数にマッピングするとき(主処理、失敗時処理を)細かく分ける
■関数をイベントハンドラとして「登録する」流儀の ミドルレイヤを書いて、そのミドルシステム上で 実装対象の「意味のある処理単位」を書くよう、プロジェクト単位でコーディングルールを定め、守り&守らせ
■◯◯失敗時には△△を行う、を明確に設計し実装して、それが分かりやすい納入プログラムとする

で解決してきた、と思います。

つまり defer 機能がなくても同じ事をやる手法は既に確立している。
前のレスでの主張と合わせ、defer 機能を追加しないのが正解、と言いたいです

982 名前:デフォルトの名無しさん (ワッチョイ 9b5f-zW/F) mailto:sage [2023/10/30(月) 01:02:35.88 ID:tKZ3J0Lw0.net]
breakでいつでもブロックを離脱できればgotoより明確でスムーズでかっこよくdeferっぽいことできるよな

983 名前:デフォルトの名無しさん (ワッチョイ 937c-cQ99) [2023/10/30(月) 01:09:19.67 ID:SHIqNVOV0.net]
かっこいいかなぁ、、、

984 名前:デフォルトの名無しさん (ワッチョイ 1989-FUJr) mailto:sage [2023/10/30(月) 01:25:52.81 ID:hHEGE8Ol0.net]
>>978

{int rc=0; do{ ★始め
処理
rc=1; break; ★失敗した
処理
break; ★成功した
} while(0); if(rc) { ★
異常時処理
}} ★終り


とかそういう話?

こういうのを #define で「エセ構文糖」みたいに定義する人もいますよね。(自分はあまり好きじゃない。格好悪いと思う)

C言語用の単体テストフレームワークで unity ってのがあります。unity ではテストコード内で 独自の try ~ catch 風文法を書けるのですが、それがまさに (setjmp longjmp も使って) #define でエセ構文糖風に実装してました。需要があれば再度調べてここで概要報告しますw

985 名前:はちみつ餃子 mailto:sage [2023/10/30(月) 09:24:19.57 ID:I7fISnX+0.net]
>>975
Go の defer に倣うなら defer 文に書けるのは関数かメソッドの呼出し。
(式一般、文一般を書けるわけではない。)
呼出しは関数の末尾だが引数は書いてある場所で評価されるというルール。
C 風の文法で書くなら

double* q = malloc(something);
defer free(q);
q=NULL;
return;

というように書いても malloc した場所はちゃんと free されることになる。
このルールのおかげで前準備と後始末を近い場所に書けて「対応関係は」一目瞭然と言えるが、
そのために変則的な評価規則が入ってるわけ。
式単位での順序が入れ替わるってだけじゃなくて引数の評価と関数の呼び出しが
分離されるってだいぶん変な仕組みだよな。

986 名前:デフォルトの名無しさん [2023/10/30(月) 10:15:21.12 ID:xnp7PI6ya.net]
>>973-974
Nim の defer 良いよね

987 名前:デフォルトの名無しさん [2023/10/30(月) 10:15:44.95 ID:xnp7PI6ya.net]
>>973-974
Nim の defer 良いよね

988 名前:デフォルトの名無しさん mailto:sage [2023/10/30(月) 10:17:23.47 ID:hHEGE8Ol0.net]
正常ルートは終わる時 q==NULL なのに、その前の
defer free(q) したときのqの値でfree() するんですね

うへぇ…
誤解釈してバグ出しそう

てかこれは、ひねり出された意地悪サンプルで…実際のプログラミングでdefer式が効果的となる使用例ではない、ですよね?

989 名前:デフォルトの名無しさん mailto:sage [2023/10/30(月) 10:34:41.68 ID:hHEGE8Ol0.net]
この話で改めてあぶり出されるのは、
あるプログラミング言語を深く理解して「書ける」「読める」ようになることには「自分なりの 上手なエラー処理の書き方 を探して身に付ける」事が含まれる、って事ですよね。

それは人類の資産なんだけど、実際の存在場所は あまたのプログラマー達の脳内 であって、一朝一夕に書き換えられる物じゃない。
だから言語仕様を改定して新機能を足すのは、新言語を作る時よりは慎重になる必要がある、と解釈しました

990 名前:デフォルトの名無しさん [2023/10/30(月) 11:45:07.40 ID:Ccd5zWuDd.net]
nullptrはもっと早く入れるべきだった。



991 名前:はちみつ餃子 mailto:sage [2023/10/30(月) 11:57:46.53 ID:I7fISnX+0.net]
>>984
Go でどうだか知らんけど C に defer を入れたとしたらというテーマでの話なら
malloc と free を対応づけるのは考えられる用途の筆頭でしょ。

逆にこういう変則的な評価規則を持ち込まないとしたら、
つまり defer 文に書いたものが単に return の直前に評価されるだけということにしたら
途中で書き換えられる可能性が出てきて
前準備と後始末が対応づいているかどうか一目瞭然とはいかなくなる。

どこかしらでなんか汚い感じにはなるよ。
そういう汚さを受け入れてもなお欲しいほどの利便性かというとやっぱり疑問は残る。
汚さを受け入れていいなら goto の汚さを受け入れるのとそんなに差があるとも思えないし。

992 名前:デフォルトの名無しさん mailto:sage [2023/10/30(月) 12:40:32.59 ID:2SouKz/I0.net]
>>980
意地でもgoto使いたくない時にはそれでもいいけど、それの欠点は中にswitch文を書くと、breakで抜けれるのはswitch文からだけになる事だな
自分ではwhileを抜けた気になって実は抜けてないという、微妙なバグを生み出す可能性があるなw

993 名前:デフォルトの名無しさん mailto:sage [2023/10/30(月) 16:19:29.96 ID:hHEGE8Ol0.net]
>>988
do {...} while(0)
なので、必ず1回実行し、2回目はないです

994 名前:デフォルトの名無しさん mailto:sage [2023/10/30(月) 16:52:46.78 ID:bW5EQkS/0.net]
>>989
適当だけどこういうことでは?

{int rc=0; do{ ★始め
 処理1
 siwtch(x){
  case 0: rc=1; break; ★失敗した  ※siwtchから抜けるだけでwhileからは抜け出せていない
  case 1: break; ★成功だけど処理2は実行しない ※siwtchから抜けるだけでwhileからは抜け出せていない
  case 2: break; ★成功で処理2も行う
 }
 処理2
 break; ★成功した
 } while(0); if(rc) { ★
 異常時処理
}} ★終り

995 名前:デフォルトの名無しさん mailto:sage [2023/10/30(月) 16:58:35.91 ID:hHEGE8Ol0.net]
>>990
おっしゃる事、分かります。具体的に書いてくれてありがとうm(_ _)m

996 名前:デフォルトの名無しさん mailto:sage [2023/10/30(月) 17:01:08.71 ID:hHEGE8Ol0.net]
>>987
はい…
mallocとfreeを確保と解放の例とするのは異論ないです

deferより一つ上位の話は、エラー処理をバグなく、分かりやすく書こうというテーマだ、で合ってますよね。
その上で、deferがないとこんな面倒なのが、deferがあるとこんなに分かりやすい 例がよいのです

確保と解放の書き方検討で、私が検討するのは例えばこんな感じです:

■(1)ある意味のある処理単位が、リソースを 2個以上使う 場合を考えると、1個の場合より検討がよく進む。特に、
■■(1a)初期化が途中で失敗した場合、すでに確保が成功してしまった資源をどう解放するか
■■(1b)資源の変数は最初に、確保処理のエラー戻り値と同じ値で初期化をすると、スッキリする事が多い

■(2)正常ルートでの解放と、エラールートでの解放で、コードを共通とするか、別とするか。
■■(2a)確保、主、開放 の処理を、同じ「関数」で書くのと、別の「関数」に分けるのはどちらが良いか
■■(2b)「goto エラーラベル;」を好きか嫌いか

■(3)プログラマーによる解放処理の前の 「if(確保済みなら)」のガードが、必要なもの(fcloseなど)と、不要なもの(free)があるので、マニュアル確認は要る

もっと語りたいけど、レス分けます、というか時間を置きます。あまり一人が語りすぎると、嫌がる人もいますよね

997 名前:デフォルトの名無しさん mailto:sage [2023/10/30(月) 17:09:39.89 ID:hHEGE8Ol0.net]
てかキータで書いて、皆さんの意見を聞いて修正していったり、してみようかな…

998 名前:デフォルトの名無しさん mailto:sage [2023/10/30(月) 17:17:16.34 ID:hHEGE8Ol0.net]
とりあえず次スレ立てました。即死防止の保守書き込みは要らない、で良いのかな?

C言語なら俺に聞け 162
https://mevius.5ch.net/test/read.cgi/tech/1698653580/

999 名前:デフォルトの名無しさん (スプッッ Sd73-cQ99) [2023/10/30(月) 18:42:32.58 ID:Ccd5zWuDd.net]
>>994
乙。
あなたの男気に女気に惚れました。

1000 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9b3e-g5YV) mailto:sage [2023/10/30(月) 22:27:42.13 ID:I7fISnX+0.net]
Golang の defer はあくまで関数の終わりまで遅延させる (ブロックの終わりではない) ので
呼び出される defer の個数が動的になりうるんだな。
https://go.dev/tour/flowcontrol/13
この挙動も C には馴染まなさそうだな。



1001 名前:デフォルトの名無しさん (ワッチョイ 1379-JwVi) mailto:sage [2023/10/30(月) 22:37:34.66 ID:n3VNJX5I0.net]
俺は某画像ライブラリのリソーストラッカーみたいに開放が必要な物を全部紐付けて後で開放する仕掛けを使ってる
まあCには何にも縛られないのが良いんだし好きにしたらいいよ

1002 名前:デフォルトの名無しさん (ワッチョイ d95d-kYJB) mailto:sage [2023/10/30(月) 23:34:44.67 ID:2SouKz/I0.net]
構文的にはC#っぽく
using (double* p = malloc(...); free(p)) {
p を使う
}
でも良いかも知れない
これだと1ループのforに似ててCに良く馴染むな
もちろんreturnとかexitで脱出してもfreeは呼ばれる

1003 名前:デフォルトの名無しさん (ワントンキン MM53-wL8D) [2023/10/31(火) 10:19:02.32 ID:i2gAy2CGM.net]
そんなもんが規格に入るわけないんだから無駄話だろ

1004 名前:デフォルトの名無しさん (ワントンキン MM53-wL8D) [2023/10/31(火) 10:19:24.66 ID:i2gAy2CGM.net]
うめ

1005 名前:1001 [Over 1000 Thread ID:Thread.net]
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 192日 20時間 14分 5秒

1006 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<272KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef