!extend:checked:vvvvv:1000:512
(新スレ立ての際上記コマンドを2行書き込んでください)
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/
C17
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4713.pdf
C11
http://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
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html
C FAQ 日本語訳
http://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
C言語なら俺に聞け 161
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 0f63-sFbk)
2023/04/21(金) 14:05:20.18ID:rqj2HSDF0583デフォルトの名無しさん (スプープ Sd1f-I+Vk)
2023/09/02(土) 11:49:29.07ID:+azsBNOBd584デフォルトの名無しさん (ワッチョイ cf63-yzHn)
2023/09/02(土) 11:59:23.66ID:R1w1jy3B0 安全かどうかは、環境によるんじゃ
585デフォルトの名無しさん (スプープ Sd1f-I+Vk)
2023/09/02(土) 12:34:31.87ID:DeBIPPsBd 「環境による」のは安全ではないんだよ
ここで取り上げられてるのは大元の公式文書なのであらゆる環境について言えることが書いてある
ここで取り上げられてるのは大元の公式文書なのであらゆる環境について言えることが書いてある
586デフォルトの名無しさん (ワッチョイ cf63-yzHn)
2023/09/02(土) 12:59:05.22ID:R1w1jy3B0 マイナーなCPUのことなんか気にしたことがなかったな
587はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 133e-A0va)
2023/09/02(土) 13:12:11.45ID:Ng1Dtdjk0 >>584
現在の文脈では「言語仕様をそう決めた理由」が主題。
だからその前提として言語仕様が保証している範囲がどこまでかを
理解しておく必要があって、そこで見当違いの主張に反論がされている
という話の流れ。
現在の文脈では「言語仕様をそう決めた理由」が主題。
だからその前提として言語仕様が保証している範囲がどこまでかを
理解しておく必要があって、そこで見当違いの主張に反論がされている
という話の流れ。
588デフォルトの名無しさん (スプープ Sd1f-I+Vk)
2023/09/02(土) 14:05:43.49ID:DeBIPPsBd589はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 133e-QWOy)
2023/09/02(土) 14:41:25.26ID:Ng1Dtdjk0 必要なら環境依存なことをしやすいのも C の良いところだが
不必要な依存は避けるに越したことはないわな
不必要な依存は避けるに越したことはないわな
590デフォルトの名無しさん (アウアウウー Sae7-fXI3)
2023/09/02(土) 14:45:40.34ID:mCX3wjBNa FILE *fp = fopen(...);
void *hoge = (void *)fp;
FILE *fuga = (FILE *)hoge;
みたいなことは禁止されてる?
void *hoge = (void *)fp;
FILE *fuga = (FILE *)hoge;
みたいなことは禁止されてる?
591デフォルトの名無しさん (スプープ Sd1f-I+Vk)
2023/09/02(土) 14:59:50.63ID:wu0IBgrgd どうしても必要ならやるしかない
ただfopenの戻り値でFILE構造体の安全性が保証されてるのにわざわざvoid*に代入してからFILE*に戻すのは
正統な金なのに闇銀行に預けて再びマネーロンダリングするような変な手間だ
ただfopenの戻り値でFILE構造体の安全性が保証されてるのにわざわざvoid*に代入してからFILE*に戻すのは
正統な金なのに闇銀行に預けて再びマネーロンダリングするような変な手間だ
592デフォルトの名無しさん (ラクッペペ MM7f-ymsf)
2023/09/02(土) 15:08:48.05ID:68c+QhTKM void *型って参照する先の変数のサイズが不明なので右辺値になるのは不可能な気がするけどな
キャストは無理でしょ
キャストは無理でしょ
593はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 133e-QWOy)
2023/09/02(土) 15:12:41.39ID:Ng1Dtdjk0594デフォルトの名無しさん (アウアウウー Sae7-fXI3)
2023/09/02(土) 15:26:23.14ID:mCX3wjBNa >>592
void じゃなくてもいいや
FILE *fp = fopen(...);
char *hoge = (char *)fp;
FILE *fuga = (FILE *)hoge;
みたいなことは禁止されてる?
void じゃなくてもいいや
FILE *fp = fopen(...);
char *hoge = (char *)fp;
FILE *fuga = (FILE *)hoge;
みたいなことは禁止されてる?
595デフォルトの名無しさん (スプープ Sd1f-I+Vk)
2023/09/02(土) 15:40:22.87ID:iw53wgLpd596デフォルトの名無しさん (ワッチョイ 7310-/gcr)
2023/09/02(土) 15:52:38.82ID:f6/YEIJg0 言葉をちゃんと使うとプログラマ意思疎通がよくなるのでは。
「void * が右辺値になるのは無理」って何だよ。ではなく、正常動作はプログラマの責任になる、って言いたかったんじゃないの?
>>590 みたいなコードは、これだけなら疑問に思うだろうが、こういうコードが有効になる事はあるよ。その一例は
「ここで言うFILE* みたいなモノが複数種類あり」
送信側 - 中継機能 - 受信側
のプログラム構造で送受信のペアは複数あり、中継機能には 実際の中身が何なのかは意識させたくない。
----
ポインタの話から外れて恐縮だが、
例としてタグ・レングス・バリュー形式ってのがあって、「中継者は送受信データがTLV形式の連続であることだけは知っていて」「TとLのサイズは一定」「タグの種類が何種類あるかなんて知らなくていい」
----
これにさらにポインタを含むデータ構造を通信可能にするには?って話で、ポインタ型をバッファ内インデックス値に変換して、ポインタが指す中身も通信データに含める、とか、
サブ構造がポインタ持ってたら再帰的に処理する、とか話は続くが
それはいいとして
>>590 みたいなコードは、現実にはあるよ。という話
「void * が右辺値になるのは無理」って何だよ。ではなく、正常動作はプログラマの責任になる、って言いたかったんじゃないの?
>>590 みたいなコードは、これだけなら疑問に思うだろうが、こういうコードが有効になる事はあるよ。その一例は
「ここで言うFILE* みたいなモノが複数種類あり」
送信側 - 中継機能 - 受信側
のプログラム構造で送受信のペアは複数あり、中継機能には 実際の中身が何なのかは意識させたくない。
----
ポインタの話から外れて恐縮だが、
例としてタグ・レングス・バリュー形式ってのがあって、「中継者は送受信データがTLV形式の連続であることだけは知っていて」「TとLのサイズは一定」「タグの種類が何種類あるかなんて知らなくていい」
----
これにさらにポインタを含むデータ構造を通信可能にするには?って話で、ポインタ型をバッファ内インデックス値に変換して、ポインタが指す中身も通信データに含める、とか、
サブ構造がポインタ持ってたら再帰的に処理する、とか話は続くが
それはいいとして
>>590 みたいなコードは、現実にはあるよ。という話
597はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 133e-QWOy)
2023/09/02(土) 16:04:16.63ID:Ng1Dtdjk0 >>594
オブジェクトを指すポインタは char* (またはその他の文字型をさすポインタ) へ変換することは許されるし文字配列として読んでもよい。 (読んだ結果としてどういうレイアウトになってるかはわからんけど。)
そしてもとの型に型変換したら変換前と等しいことも保証される。
オブジェクトを指すポインタは char* (またはその他の文字型をさすポインタ) へ変換することは許されるし文字配列として読んでもよい。 (読んだ結果としてどういうレイアウトになってるかはわからんけど。)
そしてもとの型に型変換したら変換前と等しいことも保証される。
598デフォルトの名無しさん (スプープ Sd1f-I+Vk)
2023/09/02(土) 16:06:19.94ID:Yxb8XUhFd599デフォルトの名無しさん (ワッチョイ 7310-/gcr)
2023/09/02(土) 16:12:48.48ID:f6/YEIJg0 うーん
まだまだ添削できる余地があるぞ…
ここはまあ無料掲示板だが、仕事では、自分には誤解をされやすい性質がある、と意識しなされ
まだまだ添削できる余地があるぞ…
ここはまあ無料掲示板だが、仕事では、自分には誤解をされやすい性質がある、と意識しなされ
600デフォルトの名無しさん (スプープ Sd1f-I+Vk)
2023/09/02(土) 16:50:14.84ID:JxIOKPq6d アハハ
なんだこの人w
なんだこの人w
601デフォルトの名無しさん (ワッチョイ cf63-yzHn)
2023/09/02(土) 17:10:38.18ID:R1w1jy3B0 ここでお金稼ぎしている人いたっけなw
602デフォルトの名無しさん (ワンミングク MM9f-hgj0)
2023/09/02(土) 21:43:01.25ID:5XlbVKpsM もりたぼ稼ごうとした人はいた
603デフォルトの名無しさん (ワッチョイ b35f-RK05)
2023/09/02(土) 22:10:43.72ID:9Zs5bzSj0 ポインタの宣言は、ポインタの型じゃなくて、ポインタが指しているアドレスの格納値をどう扱うつもりなのかを明示している。
void型のポインタは、ポインタだから、何型のポインタだから、64ビットだったり、32ビットだったりするものではない。
void型のポインタは、ポインタだから、何型のポインタだから、64ビットだったり、32ビットだったりするものではない。
604はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 133e-A0va)
2023/09/03(日) 13:47:13.05ID:ApaaLf4l0605デフォルトの名無しさん (スププ Sd1f-ETx6)
2023/09/04(月) 07:48:03.87ID:63U36j7Od >>594
void void * 登場前の C は
FILE *fp = fopen(...);
int *hoge = (int *)fp;
FILE *fuga = (FILE *)hoge;
だったんじゃないかな
void void * 登場前の C は
FILE *fp = fopen(...);
int *hoge = (int *)fp;
FILE *fuga = (FILE *)hoge;
だったんじゃないかな
606デフォルトの名無しさん (ワッチョイ 8310-g4sH)
2023/09/04(月) 07:53:14.39ID:YGQMN8Uj0 設計当時はアセンブラの代替言語。
607デフォルトの名無しさん (スッププ Sd1f-I+Vk)
2023/09/04(月) 09:48:09.59ID:R5PUsxPld >>605
基本はcharだからchar *hoge = (char *)fp;じゃない
なんならint hoge = (int )fp;でもよかった
ほとんどの場合intとポインタのサイズが同じだった
基本はcharだからchar *hoge = (char *)fp;じゃない
なんならint hoge = (int )fp;でもよかった
ほとんどの場合intとポインタのサイズが同じだった
608デフォルトの名無しさん (アウアウウー Sae7-fXI3)
2023/09/04(月) 10:04:32.23ID:/ASAZOX6a >>607 みたいなのがいるから void が出来たんだよ
609デフォルトの名無しさん (スプッッ Sd87-IP2U)
2023/09/04(月) 11:07:54.13ID:gab4BDOud 因果逆転だな
610デフォルトの名無しさん (ワッチョイ 7310-/gcr)
2023/09/04(月) 11:19:05.30ID:Ww8QJvvD0611デフォルトの名無しさん (ワッチョイ 7310-/gcr)
2023/09/04(月) 11:24:33.03ID:Ww8QJvvD0 そういえば、むかーしの情報処理試験には言語選択でマシン語ってのがあって、1メモリアドレス値が指すメモリは 8bit 幅ではなく、 16bit だったように記憶してる。
「特殊な環境を想定しやがって…」と思ったナカマいない?
「特殊な環境を想定しやがって…」と思ったナカマいない?
612デフォルトの名無しさん (ワッチョイ 8310-g4sH)
2023/09/04(月) 11:27:19.73ID:YGQMN8Uj0 試験用アセンブラはCASLだったっけ?
仮想環境で実在しない環境用言語だって。
仮想環境で実在しない環境用言語だって。
613はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 133e-A0va)
2023/09/04(月) 12:00:00.02ID:p8KSFCIf0614デフォルトの名無しさん (テテンテンテン MM7f-cJIa)
2023/09/04(月) 12:00:22.47ID:5denWoTkM メモリが8bitって何も出来ないぞw
615デフォルトの名無しさん (ラクッペペ MM7f-ymsf)
2023/09/04(月) 12:05:38.98ID:QM+pFggQM アドレス範囲ではなくてデータ長が16ビットだったと思う
616はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 133e-A0va)
2023/09/04(月) 12:09:35.09ID:p8KSFCIf0 >>611
C の仕様上の用語では「バイト」が 8bit とは限らない定義になっている。
C の仕様で想定する必要がある程度にはそういう環境もあったのだろうし、
主流ではないにしても特殊というほどの感じでもなかったんちゃうか?
まあ「昔」をいつ頃に想定するかにもよるだろうけど。
C の仕様上の用語では「バイト」が 8bit とは限らない定義になっている。
C の仕様で想定する必要がある程度にはそういう環境もあったのだろうし、
主流ではないにしても特殊というほどの感じでもなかったんちゃうか?
まあ「昔」をいつ頃に想定するかにもよるだろうけど。
617はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 133e-A0va)
2023/09/04(月) 12:24:06.96ID:p8KSFCIf0618デフォルトの名無しさん (ワッチョイ 93c9-oCRc)
2023/09/04(月) 14:04:31.55ID:F3cE7vUV0 7bitでアルファベットは表せてたしねぇ
文字集合で完結させてた RFC822
文字集合で完結させてた RFC822
619デフォルトの名無しさん (ワッチョイ 6f5f-ATpV)
2023/09/04(月) 20:56:26.82ID:MxCwE5tq0 実際に1バイトが8ビットじゃないマシンで仕事してた人いる?
経験談を聞いてみたい
つらそう
経験談を聞いてみたい
つらそう
620デフォルトの名無しさん (ワッチョイ b302-jP38)
2023/09/04(月) 21:41:24.34ID:TqSqVDXY0 何がつらいの?
621デフォルトの名無しさん (スッププ Sd1f-I+Vk)
2023/09/04(月) 22:35:30.73ID:yuyUlcPSd UNIXとか基本9ビットが見え隠れしてる気がする
ファイルのパーミッション---rwxrwxとか
C数値のデフォルトが8進数とか(9ビットなら8進数3ケタでまとまりがいい)
ファイルのパーミッション---rwxrwxとか
C数値のデフォルトが8進数とか(9ビットなら8進数3ケタでまとまりがいい)
622デフォルトの名無しさん (ワッチョイ cf63-yzHn)
2023/09/04(月) 22:55:40.14ID:ljnGjc/80 あれは9ビットだったのか
623デフォルトの名無しさん (テテンテンテン MM7f-cJIa)
2023/09/04(月) 23:38:31.34ID:5denWoTkM 1バイト9bitとか完全に都市伝説だろ…
1ワード(レジスタ)が36bitとかはLispマシーンで使われたりしてたけどね
1ワード(レジスタ)が36bitとかはLispマシーンで使われたりしてたけどね
624デフォルトの名無しさん (ワッチョイ 23f0-BDBD)
2023/09/06(水) 06:22:01.74ID:r3vK0XzD0 char が16bitの環境なら使ったことがある
625デフォルトの名無しさん (ワッチョイ 4301-yzHn)
2023/09/06(水) 07:02:16.45ID:Mh27mgbM0 そういうのってどんなCPUなの?
626デフォルトの名無しさん (ワッチョイ cfcf-ATpV)
2023/09/06(水) 09:37:16.14ID:EGh1VJfR0 とりあえずDSPなんかはそうでしょ
ワードマシンって言っちゃっていいか知らんけど、演算の速度をあげるためにワード幅を一番使いそうなビット数にして全部ワード単位でアクセスする設計にしてる
マニュアルにアドレス、char幅、int幅全部同じ何々ビットです注意してねみたいなのがご丁寧に書いてあったりするよ
ワードマシンって言っちゃっていいか知らんけど、演算の速度をあげるためにワード幅を一番使いそうなビット数にして全部ワード単位でアクセスする設計にしてる
マニュアルにアドレス、char幅、int幅全部同じ何々ビットです注意してねみたいなのがご丁寧に書いてあったりするよ
627デフォルトの名無しさん (スフッ Sd1f-ETx6)
2023/09/06(水) 11:10:12.82ID:QkmiSIQgd >>622
12bit以上必要だったはず
12bit以上必要だったはず
628デフォルトの名無しさん (ワッチョイ 7310-/gcr)
2023/09/06(水) 11:35:53.69ID:HQrnJbDO0629デフォルトの名無しさん (ワッチョイ cfab-oCRc)
2023/09/06(水) 12:07:23.88ID:TIQAYIu40630デフォルトの名無しさん (ラクッペペ MM7f-gKm6)
2023/09/06(水) 15:01:09.34ID:7li0jtwXM よく分からんけどDSPの内部レジスタって直接浮動少数点数が扱えるのか
floatは符号1bit + 指数部8bit +仮数部23bitの32bit長だっけ?
ただ浮動少数点数でビットシフトって面倒くさそう
floatは符号1bit + 指数部8bit +仮数部23bitの32bit長だっけ?
ただ浮動少数点数でビットシフトって面倒くさそう
631デフォルトの名無しさん (ワッチョイ 23f0-BDBD)
2023/09/06(水) 19:43:08.02ID:r3vK0XzD0 外部とやり取りが多少面倒
ファイルや通信関連
データ列をcharに8bitずつ入れるか
ケチって8bit x2 入れるか
なんかを考える必要がある
ファイルや通信関連
データ列をcharに8bitずつ入れるか
ケチって8bit x2 入れるか
なんかを考える必要がある
632デフォルトの名無しさん (ワッチョイ 23f0-BDBD)
2023/09/06(水) 19:43:50.40ID:r3vK0XzD0 私が使ったのはDSPでした
633デフォルトの名無しさん (ワッチョイ 23f0-BDBD)
2023/09/06(水) 19:45:03.72ID:r3vK0XzD0 昔の大型計算機でcharが64bitのがあったはず
634デフォルトの名無しさん (ワッチョイ cf63-yzHn)
2023/09/06(水) 20:55:53.98ID:6iN9QRCz0 最初のUNIX開発マシン、DECの PDP-7 は18ビットだった
635はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 133e-QWOy)
2023/09/07(木) 00:34:19.14ID:n7kUX99P0 C の仕様では正数型の表現にパディングビットの存在を許しているんだけど値の表現に関わらない無意味なビット(特殊なフラグとかに使うのか?)が存在するアーキテクチャも、見たことはないけど C の仕様で想定している以上はたぶんあるんだろうな……
636はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 133e-QWOy)
2023/09/07(木) 00:34:47.43ID:n7kUX99P0 誤植
正数→整数
正数→整数
637デフォルトの名無しさん (ワッチョイ 23f0-BDBD)
2023/09/07(木) 08:06:18.17ID:YzioMxaL0 >>635
小数なら身近にあるね
小数なら身近にあるね
638デフォルトの名無しさん (ワッチョイ ff97-EEOY)
2023/09/07(木) 12:49:26.03ID:6eZunc+30 隣で寝ている
639デフォルトの名無しさん (ワッチョイ 0f01-e7Rb)
2023/09/16(土) 10:51:51.48ID:S5cqLcA00640デフォルトの名無しさん (アウアウウー Sa53-HRje)
2023/09/16(土) 12:25:15.03ID:RATZO/gia しね
641デフォルトの名無しさん (ワッチョイ 0f01-R46v)
2023/09/16(土) 12:35:05.81ID:n1ZKqkE80 >>639
PayPayに変換できるって知らなかった
PayPayに変換できるって知らなかった
642デフォルトの名無しさん (ワッチョイ 7f63-VRQG)
2023/09/16(土) 12:38:47.03ID:NMUMDiAt0 あそこはEUから莫大な賠償金請求されたから、必死なんだろう
643デフォルトの名無しさん (ワッチョイ 3fad-xbk3)
2023/09/16(土) 12:48:52.21ID:8u+hT5wA0 >>639
グロ
グロ
644デフォルトの名無しさん (ワッチョイ 4fb0-gBtz)
2023/09/22(金) 10:15:48.77ID:wJrbx3oK0 なあ、いつから子関数内で宣言した自動変数を戻り値に使って親関数で参照してもアクセスエラーにならなくなったんだ?
特に構造体とか
特に構造体とか
645デフォルトの名無しさん (ワッチョイ 7f63-VRQG)
2023/09/22(金) 10:51:22.61ID:tfij4Zir0 自動変数を参照渡ししてるのか?
646デフォルトの名無しさん (ワッチョイ 3f65-V30e)
2023/09/22(金) 11:07:25.29ID:8SLDLfd50 アクセスエラーってのが実行時の話なら動作環境教えてくれないとなんとも
647デフォルトの名無しさん (ワッチョイ 4f93-uKg7)
2023/09/22(金) 11:08:43.04ID:X0VLPMl/0 すんません何を言ってるのか分からん
自動変数のアドレスを返す話?
OSとかコンパイラとか色々わからないと空虚な話になりそう、ってのと(特殊な環境なのでは)
エラーになって欲しいのにならなくて
同僚がアホで困ってて
強制的にエラーにしたいって話?
自動変数のアドレスを返す話?
OSとかコンパイラとか色々わからないと空虚な話になりそう、ってのと(特殊な環境なのでは)
エラーになって欲しいのにならなくて
同僚がアホで困ってて
強制的にエラーにしたいって話?
648デフォルトの名無しさん (ワッチョイ 0f10-NfV8)
2023/09/22(金) 11:13:15.28ID:z1xJQo5k0 数年に1回ほぼVC++でほぼCのコード書いてコンパイルしてるけど、
なんか最新版入れる度にデフォのエラー基準厳しくなっていく・・・。
変数定義をgoto(エラー処理)ですっ飛ばからエラーって・・・昔のCみたいに関数先頭に記述を移動する羽目に・・・
警告でいいやん。
なんか最新版入れる度にデフォのエラー基準厳しくなっていく・・・。
変数定義をgoto(エラー処理)ですっ飛ばからエラーって・・・昔のCみたいに関数先頭に記述を移動する羽目に・・・
警告でいいやん。
649デフォルトの名無しさん (ワッチョイ 7f63-VRQG)
2023/09/22(金) 11:16:56.77ID:tfij4Zir0 構造体で返すにしても、呼出元って用意した変数なり構造体で受け取るんだろう
650デフォルトの名無しさん (ワッチョイ 3fad-d4nU)
2023/09/22(金) 11:27:24.08ID:ZXfr4S/70 >>644
構造体の変数を戻り値に使うことは結構最初の頃から出来たと思うが、昔のマイコンは遅かったのでなるべく使わないで呼ぶ側で変数作ってそのポインタ渡してそこに値入れてもらうみたいな事してたよ。
なんで遅いのかっていうと、参照などという高度なワザは使ってなくて他のintとかの変数と同様に構造体の内容をコピーしているだけだからだ。
構造体の変数を戻り値に使うことは結構最初の頃から出来たと思うが、昔のマイコンは遅かったのでなるべく使わないで呼ぶ側で変数作ってそのポインタ渡してそこに値入れてもらうみたいな事してたよ。
なんで遅いのかっていうと、参照などという高度なワザは使ってなくて他のintとかの変数と同様に構造体の内容をコピーしているだけだからだ。
651デフォルトの名無しさん (ワッチョイ 7f63-VRQG)
2023/09/22(金) 11:28:55.72ID:tfij4Zir0 共用体で渡したときは、どのメンバー使ってコピーするの?
652デフォルトの名無しさん (アウアウウー Sa53-9C00)
2023/09/22(金) 12:01:20.53ID:dkRHHNCea 池沼か
653デフォルトの名無しさん (ワッチョイ 4fb0-gBtz)
2023/09/22(金) 12:15:37.49ID:wJrbx3oK0654デフォルトの名無しさん (ブーイモ MM5f-C+1d)
2023/09/22(金) 12:21:54.90ID:+zFc5v5MM 初期K&Rじゃ構造体returnはなくてポータブルC以降じゃね?
655はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 4f3e-7CbB)
2023/09/22(金) 14:01:49.98ID:jd4xXbI20 構造体を返却値にするときは、
一般的なパソコンでの呼出し規約 (Windows や System V ABI) では
呼出し側で領域を用意してそのアドレスを暗黙の引数として渡す仕組みになってる。
用意された領域の上に最初から値を直接に構築できることもあるので
そういうときはコピーコストは発生しない。
単純な関数、かつモダンなコンパイラを使ってるときは余計な工夫をする必要はないよ。
一般的なパソコンでの呼出し規約 (Windows や System V ABI) では
呼出し側で領域を用意してそのアドレスを暗黙の引数として渡す仕組みになってる。
用意された領域の上に最初から値を直接に構築できることもあるので
そういうときはコピーコストは発生しない。
単純な関数、かつモダンなコンパイラを使ってるときは余計な工夫をする必要はないよ。
656デフォルトの名無しさん (ワッチョイ 4fb0-gBtz)
2023/09/22(金) 14:35:59.04ID:wJrbx3oK0 戻り値に構造体を使いたいんですぅ
657デフォルトの名無しさん (ワッチョイ 7fab-fp56)
2023/09/22(金) 14:53:23.56ID:HzXlnxdE0 参照てか自動変数へのポインタを戻してたってこと?
struct foo * hoge()
{
struct foo body;
retrun &body;
}
これ未定義だからどうとでもなってしまうんじゃなかったかな…
コンパイラが気を利かしてエラーや警告にするのも
そのまま実行コードを生成して想定外の動きをするのも
struct foo * hoge()
{
struct foo body;
retrun &body;
}
これ未定義だからどうとでもなってしまうんじゃなかったかな…
コンパイラが気を利かしてエラーや警告にするのも
そのまま実行コードを生成して想定外の動きをするのも
658デフォルトの名無しさん (アウアウウー Sa53-9C00)
2023/09/22(金) 15:05:47.80ID:dkRHHNCea >>656
これでいいだろ
struct Hoge *fuga(struct Hoge *param0, int param1, char *param2){
何かする
return param0;
}
これでいいだろ
struct Hoge *fuga(struct Hoge *param0, int param1, char *param2){
何かする
return param0;
}
659デフォルトの名無しさん (ワッチョイ 4fb0-gBtz)
2023/09/22(金) 15:07:59.94ID:wJrbx3oK0 受ける側が用意しなあかんかぁ
660デフォルトの名無しさん (ワッチョイ 7fab-fp56)
2023/09/22(金) 15:08:23.02ID:HzXlnxdE0 >>657 のは、OS側のメモリに対する不正アクセスに引っかかって
エラー発報になるのは少ないんじゃないかな?
(戻りの自動変数のポインタが不正アクセスになる可能性は低い)
構造体の中にさらにポインタをつかってて、ゴミなポインタ値で実体見に行ってやっと上記が発動する
struct foo {
struct foo* next;
int body;
};
こんなので ret->next->body; とやったら *ret の内容がゴミ = ret->next も不定な値
ret->next->body でメモリの不正アクセス
エラー発報になるのは少ないんじゃないかな?
(戻りの自動変数のポインタが不正アクセスになる可能性は低い)
構造体の中にさらにポインタをつかってて、ゴミなポインタ値で実体見に行ってやっと上記が発動する
struct foo {
struct foo* next;
int body;
};
こんなので ret->next->body; とやったら *ret の内容がゴミ = ret->next も不定な値
ret->next->body でメモリの不正アクセス
661デフォルトの名無しさん (ワッチョイ 4fb0-gBtz)
2023/09/22(金) 15:09:39.40ID:wJrbx3oK0 割り込み処理があると簡単に死ぬよ
662デフォルトの名無しさん (ワッチョイ 7fab-fp56)
2023/09/22(金) 15:10:08.95ID:HzXlnxdE0 ハイコストなのをわかってて実体をそのまま返すことはあった
複素数を取り扱う Complex 構造体で 式の形式にしたくて ね
複素数を取り扱う Complex 構造体で 式の形式にしたくて ね
663デフォルトの名無しさん (ワッチョイ 7fab-fp56)
2023/09/22(金) 15:11:28.51ID:HzXlnxdE0 >>661
割り込み想定するなら呼び出し元で器渡しとけって話にしかならんじゃろ
割り込み想定するなら呼び出し元で器渡しとけって話にしかならんじゃろ
664デフォルトの名無しさん (スッップ Sd5f-8KNq)
2023/09/22(金) 15:14:27.76ID:wMC0ce2ad665デフォルトの名無しさん (ワッチョイ 7fab-fp56)
2023/09/22(金) 15:27:37.08ID:HzXlnxdE0 ID:wJrbx3oK0 がどういう環境で愚痴ってるのかはわからんけど
「割り込みハンドラ内でいろいろやるのをCで記述してるんだけど…」とかだったら
極力スタックは少なくしたい って話に行き着くけども
それならなおさら器は呼び出し側で用意すべし になるよなぁ
最悪関数呼び出しのオーバーヘッドも嫌って きもいマクロ関数が並ぶことも
「割り込みハンドラ内でいろいろやるのをCで記述してるんだけど…」とかだったら
極力スタックは少なくしたい って話に行き着くけども
それならなおさら器は呼び出し側で用意すべし になるよなぁ
最悪関数呼び出しのオーバーヘッドも嫌って きもいマクロ関数が並ぶことも
666はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 4f3e-7CbB)
2023/09/22(金) 15:30:18.99ID:jd4xXbI20 似たような話題が出たことがあるような気がしたので思い返してみると C++ スレの話だったわ。
コピーの省略 (copy elision) が保証される場合がどう実装されているのかという話題で
オブジェクトを構築すべき場所を呼び出し側が暗黙に渡してるから
最初からそこに構築される (のでコピーする必要がない) というのが一般的な実装で、
たぶん C の構造体受け渡しで実績があったから C++ では言語仕様として取り込めたんだな。
コピーの省略 (copy elision) が保証される場合がどう実装されているのかという話題で
オブジェクトを構築すべき場所を呼び出し側が暗黙に渡してるから
最初からそこに構築される (のでコピーする必要がない) というのが一般的な実装で、
たぶん C の構造体受け渡しで実績があったから C++ では言語仕様として取り込めたんだな。
667デフォルトの名無しさん (アウアウウー Sacf-PB4I)
2023/09/23(土) 10:05:20.89ID:i9fpyxKga thisのことですか
668はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 273e-ClgD)
2023/09/23(土) 10:39:49.55ID:ALqEUzvh0669デフォルトの名無しさん (ワッチョイ 3b93-gtrM)
2023/09/23(土) 18:43:05.31ID:lGebHJu00 c言語にthisは無い
670デフォルトの名無しさん (スッップ Sdaa-cHxT)
2023/09/23(土) 19:21:52.16ID:h4supWEzd thisはポインタなので実体を返すとか言う話とは関係ない
671デフォルトの名無しさん (ワッチョイ 8661-gIzx)
2023/09/23(土) 21:37:44.48ID:wNThSPil0 x86-64のABIでは、16byte未満はレジスタで渡されて、それ以上はメモリコピーが発生する、それだけ
672デフォルトの名無しさん (ワッチョイ bb48-NSUt)
2023/09/24(日) 01:41:30.54ID:XDqOvN5B0 PODっていうんだっけ
構造体が値わたしになるやつ
これはC++だったかな?Cはよくわからん
構造体が値わたしになるやつ
これはC++だったかな?Cはよくわからん
673デフォルトの名無しさん (アウアウウー Sacf-PB4I)
2023/09/24(日) 09:28:36.38ID:2YTVyUlCa レジスタが64bit=8bytes
レジスタが128bit=16bytes
たしかにレジスタで全部返せるな
レジスタが128bit=16bytes
たしかにレジスタで全部返せるな
674デフォルトの名無しさん (ワッチョイ 1e63-CSnM)
2023/09/24(日) 09:55:18.81ID:D6DOZoEp0 そのうち無限長レジスタ出てくるだろ
675デフォルトの名無しさん (ワッチョイ 8a79-aeRl)
2023/09/24(日) 11:19:45.97ID:Cw9+et/n0 映画化決定 鬼滅の刃 - 無限長レジスタ編
676はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 273e-ClgD)
2023/09/24(日) 11:48:58.25ID:wtxuVbIF0 >>672
C++ 的にはクラスが一定の条件を満たすと C の構造体と互換性があるような性質を持つ。
それが POD。
C++ の POD のことも慣例で構造体と呼んでると思うので、
C の構造体 ≒ C++ の POD みたいな感じ。
POD は値渡しがどうこうとは無関係。
C++ 的にはクラスが一定の条件を満たすと C の構造体と互換性があるような性質を持つ。
それが POD。
C++ の POD のことも慣例で構造体と呼んでると思うので、
C の構造体 ≒ C++ の POD みたいな感じ。
POD は値渡しがどうこうとは無関係。
677デフォルトの名無しさん (スッップ Sdaa-cHxT)
2023/09/24(日) 18:47:28.19ID:zJPvjQK3d678デフォルトの名無しさん (ワッチョイ 0761-+HDL)
2023/09/24(日) 19:03:57.96ID:SWucSPIu0 Plain Old Data だね。
ちゃんとした英語だと、dの繰り返しを避けて Plain Ol' Data とするらしい
最新のC++はPODっていう呼び名を廃止したんじゃ無かった?
ちゃんとした英語だと、dの繰り返しを避けて Plain Ol' Data とするらしい
最新のC++はPODっていう呼び名を廃止したんじゃ無かった?
679はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 273e-ClgD)
2023/09/24(日) 19:10:57.73ID:wtxuVbIF0 >>678
概念は廃止した (性質をスタンダードレイアウトとトリビアルに分割して説明している) けど std::is_pod がまだ有るので
「POD がなくなった」と言えるかどうかはちょっと微妙なところ。
概念は廃止した (性質をスタンダードレイアウトとトリビアルに分割して説明している) けど std::is_pod がまだ有るので
「POD がなくなった」と言えるかどうかはちょっと微妙なところ。
680デフォルトの名無しさん (ワッチョイ 3b93-gtrM)
2023/09/24(日) 19:39:45.99ID:iqjAJ+9f0 >>674
無限では無いけど VLIW って聞いた事無いのかw❤
無限では無いけど VLIW って聞いた事無いのかw❤
681デフォルトの名無しさん (ワッチョイ 1ecf-WMZf)
2023/09/24(日) 19:54:27.01ID:9leOLZhk0 >>680
レジスタ長を関係あるか?
レジスタ長を関係あるか?
682デフォルトの名無しさん (ワッチョイ 0a30-gIzx)
2023/09/24(日) 22:05:30.32ID:/fHwRuZw0 >>680
Very Long Instruction Word(超長い命令長)で、レジスタ関係無し
Very Long Instruction Word(超長い命令長)で、レジスタ関係無し
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 外務省局長は無言で厳しい表情…日中の高官協議終了か 高市首相“台湾”発言で中国が強硬対応 発言撤回求めたか… [BFU★]
- 中国国営メディア「沖縄は日本ではない」… ★6 [BFU★]
- 政府、株式の配当など金融所得を高齢者の医療保険料や窓口負担に反映する方針を固めた [バイト歴50年★]
- 【中国外務省】日中関係悪化は高市氏に責任と名指しで非難… [BFU★]
- 中国国営メディア「沖縄は日本ではない」…★7 [BFU★]
- バービー、 台湾有事の発言の波紋で「たまったもんじゃない」「高市さんに真意は聞きたい」「国民に向けて説明してほしい」 [muffin★]
- 日本政府「高市総理の発言は問題ないと伝え、中国総領事のSNS投稿は問題があると中国に伝えました😊」 [931948549]
- 高市早苗、岸田政権(当時)に「台湾有事は日本の有事か」という質問をしていた [175344491]
- 【悲報】高市早苗周辺「支持層が離れるので今更発言を撤回できない」 [935793931]
- 【感動】山上徹也「頑張れ、お兄ちゃんが守ってやる」妹へのメールが公開
- 青椒肉絲、牛肉ではなく豚肉を使うのが本物だった
- 【悲報】中国→日本行きの航空チケット、高市有事の影響で50万人分がキャンセルされる [834922174]
