!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
C2x ドラフト
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2731.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言語なら俺に聞け 158
https://mevius.5ch.net/test/read.cgi/tech/1640401906/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
探検
C言語なら俺に聞け 159
レス数が900を超えています。1000を超えると表示できなくなるよ。
1デフォルトの名無しさん (ワンミングク MMa2-RRwJ)
2022/08/04(木) 23:32:27.83ID:yWVViPyIM808デフォルトの名無しさん (ラクッペペ MM8f-JsS5)
2022/12/10(土) 22:59:08.86ID:cw57tQlnM 組込み用の8ビットCPUでも同じような機能があるものもある
ダイレクトアドレッシング、ダイレクトページアドレッシングなど殆どは8ビットアドレスのゼロページ目をレジスタと見做して
メモリ経由することなく直接ALUで演算を行なうことが出来る
ダイレクトアドレッシング、ダイレクトページアドレッシングなど殆どは8ビットアドレスのゼロページ目をレジスタと見做して
メモリ経由することなく直接ALUで演算を行なうことが出来る
809デフォルトの名無しさん (ワッチョイ 7f63-KKgq)
2022/12/10(土) 23:32:50.32ID:FHzDIuwr0 レジスター配列とかプログラムコードをレジスタに置くとか
810デフォルトの名無しさん (ワッチョイ 27c2-aipL)
2022/12/11(日) 03:20:22.27ID:BIXjZcK80 >>804
左辺値がメモリアクセスを意味するのに?
左辺値がメモリアクセスを意味するのに?
811はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff3e-3TNT)
2022/12/11(日) 03:56:09.23ID:ftKoc+Hh0 >>810
言語仕様では抽象計算機での動作として記述される。 (C99 なら 5.1.2.3?を参照)
記憶域として書かれているものは抽象的な意味の上での記憶域であって、
実際のメモリにアクセスするかどうかはコンパイラの裁量。
register 指定は変数の意味に関与せず、抽象機械の動作の上ではごく普通に記憶域に割り当てられているのと同じ。
その上で register 指定は「可能な限り速いアクセスを期待する」というヒントであることと、アドレスが取れなくなるという制約が付く。
register 指定は抽象機械の上での記憶域をハードウェアのレジスタに割り当てるなどして高速化してくれたらうれしいなぁ (/ω・\)チラッ
という指定であって、言語の理屈の上ではアドレスを取れない以外の何の意味も持たない。
言語仕様では抽象計算機での動作として記述される。 (C99 なら 5.1.2.3?を参照)
記憶域として書かれているものは抽象的な意味の上での記憶域であって、
実際のメモリにアクセスするかどうかはコンパイラの裁量。
register 指定は変数の意味に関与せず、抽象機械の動作の上ではごく普通に記憶域に割り当てられているのと同じ。
その上で register 指定は「可能な限り速いアクセスを期待する」というヒントであることと、アドレスが取れなくなるという制約が付く。
register 指定は抽象機械の上での記憶域をハードウェアのレジスタに割り当てるなどして高速化してくれたらうれしいなぁ (/ω・\)チラッ
という指定であって、言語の理屈の上ではアドレスを取れない以外の何の意味も持たない。
812デフォルトの名無しさん (ワッチョイ 27c2-aipL)
2022/12/11(日) 06:45:02.24ID:BIXjZcK80 抽象計算機の記憶域がメモリではないって?
もういい、あんたとは話にならん
もういい、あんたとは話にならん
813はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff3e-3TNT)
2022/12/11(日) 06:47:07.10ID:ftKoc+Hh0 >>812
根本的には register 指定で左辺値でなくなったりはしないという話をしてるんで。
根本的には register 指定で左辺値でなくなったりはしないという話をしてるんで。
814デフォルトの名無しさん (ワッチョイ 27c2-aipL)
2022/12/11(日) 07:35:55.41ID:BIXjZcK80 その話の根拠に疑問を示したんだけど、例の屁理屈に逃げるんでもういい
815はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff3e-3TNT)
2022/12/11(日) 08:06:06.44ID:ftKoc+Hh0 >>814
言語仕様でそうなっているという以外に根拠が必要か?
言語仕様でそうなっているという以外に根拠が必要か?
816はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff3e-3TNT)
2022/12/11(日) 08:12:25.56ID:ftKoc+Hh0817デフォルトの名無しさん (ワッチョイ 27c2-aipL)
2022/12/11(日) 08:25:20.92ID:BIXjZcK80 >>815
しつこい
しつこい
818デフォルトの名無しさん (ワッチョイ df01-0RkQ)
2022/12/11(日) 09:45:19.90ID:B9k8N7vL0 >>805
そういうプロセッサーはあるよ(ディスコンしてるけど)
https://i.imgur.com/Lqs3ejR.jpg
Z80 の裏レジスタは裏側のレジスタを直接触れなくてモヤモヤしたけどこいつは他のバンクのレジスタも直接さわれるからちょっと便利
PCとかもメモリー空間に見えてるプロセッサーもあったような気がするけど具体的なプロセッサー名を思い出せない
>>806
それはちょっと話が違う
単にアドレッシングモードとしてゼロページやダイレクトページが短いコードで扱えると言うだけのことでメモリーはあくまでもメモリー
例えば6800はPSH AでAレジスタをスタックにプッシュ出来るけどゼロページの内容を直接プッシュ出来るわけじゃない
6502 のインダイレクト・インデックストYぐらいの機能ならまあベースレジスタをメモリー上に置けるとは言えるけど
そういうプロセッサーはあるよ(ディスコンしてるけど)
https://i.imgur.com/Lqs3ejR.jpg
Z80 の裏レジスタは裏側のレジスタを直接触れなくてモヤモヤしたけどこいつは他のバンクのレジスタも直接さわれるからちょっと便利
PCとかもメモリー空間に見えてるプロセッサーもあったような気がするけど具体的なプロセッサー名を思い出せない
>>806
それはちょっと話が違う
単にアドレッシングモードとしてゼロページやダイレクトページが短いコードで扱えると言うだけのことでメモリーはあくまでもメモリー
例えば6800はPSH AでAレジスタをスタックにプッシュ出来るけどゼロページの内容を直接プッシュ出来るわけじゃない
6502 のインダイレクト・インデックストYぐらいの機能ならまあベースレジスタをメモリー上に置けるとは言えるけど
819デフォルトの名無しさん (ワッチョイ df01-0RkQ)
2022/12/11(日) 09:47:13.53ID:B9k8N7vL0820デフォルトの名無しさん (スッップ Sdff-c2mE)
2022/12/11(日) 10:26:09.32ID:2yXQoOg9d IDコロコロ
821はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff3e-3TNT)
2022/12/11(日) 10:45:16.87ID:ftKoc+Hh0 >>819
べつに勝ち負けを競っているわけじゃない。
根拠 (この場合は言語仕様) に基づく解釈の妥当性がそれで変わることはないので納得しない誰かがいても不都合もない。
5ch に書き込むのはただの暇つぶしだ。
どうせほかに話題もないんだからしつこくてもいいんじゃね。
反応するかどうかは知らんけど。
べつに勝ち負けを競っているわけじゃない。
根拠 (この場合は言語仕様) に基づく解釈の妥当性がそれで変わることはないので納得しない誰かがいても不都合もない。
5ch に書き込むのはただの暇つぶしだ。
どうせほかに話題もないんだからしつこくてもいいんじゃね。
反応するかどうかは知らんけど。
822デフォルトの名無しさん (ワッチョイ e701-0RkQ)
2022/12/11(日) 11:25:34.59ID:RuZtb54i0 >>821
そういうレスは流石にしつこいわ
そういうレスは流石にしつこいわ
823デフォルトの名無しさん (ワッチョイ 87bb-3TNT)
2022/12/11(日) 15:02:48.86ID:51+9+dkC0 ブレークブレークw
824デフォルトの名無しさん (ワッチョイ 7f63-KKgq)
2022/12/11(日) 15:25:03.37ID:jc+ZhrAU0 みんな仲良くしなよ
825デフォルトの名無しさん (ワッチョイ a705-u86g)
2022/12/11(日) 17:37:29.66ID:kiLLcra70 ポインタは卒業した。コンパイラあるんだから、ググるより書いて結果を見たほうが早いぞ。
何十回も繰り返せばわかるはず。
何十回も繰り返せばわかるはず。
826デフォルトの名無しさん (ワッチョイ a705-u86g)
2022/12/11(日) 17:42:03.60ID:kiLLcra70 亀レスだが機械語を知らないと、いい高級言語は書けない、ってのはわからん。
機械語と高級言語は別物だろう。
機械語を簡単に理解できる知能水準の人は、高級言語を新しく学習したときも
たやすく理解できる、
というのが実態なのに、ネットでは背びれ尾ひれついて、「ハードウェアを知らないと、〜」みたいな
論調が市民権を得ているな。
機械語と高級言語は別物だろう。
機械語を簡単に理解できる知能水準の人は、高級言語を新しく学習したときも
たやすく理解できる、
というのが実態なのに、ネットでは背びれ尾ひれついて、「ハードウェアを知らないと、〜」みたいな
論調が市民権を得ているな。
827デフォルトの名無しさん (ワッチョイ df7c-KKgq)
2022/12/11(日) 18:08:31.63ID:3kpvLkL20 CやC++はアセンブラレベルが理解出来ないとそもそも実装が無茶苦茶だったりするけど
ポインタとかが無いJavaとかはそこまでアセンブラレベルでどうのこうのってのは無いが
それでもコンピュータ的な知識が皆無な奴は論理演算を理解出来なかったりするし
ビットシフトみたいなことやってると、何でこんな書き方しているの?みたいな事言う奴出てくるからなぁw
ポインタとかが無いJavaとかはそこまでアセンブラレベルでどうのこうのってのは無いが
それでもコンピュータ的な知識が皆無な奴は論理演算を理解出来なかったりするし
ビットシフトみたいなことやってると、何でこんな書き方しているの?みたいな事言う奴出てくるからなぁw
828デフォルトの名無しさん (ワッチョイ 7f63-KKgq)
2022/12/11(日) 18:39:34.39ID:jc+ZhrAU0 それがメモリー上二銅格納されてるか位は知っておいた方が良いよ
配列データをソートする時、どうやると効率的かがすぐ分かる
配列データをソートする時、どうやると効率的かがすぐ分かる
829デフォルトの名無しさん (ワッチョイ 7f63-KKgq)
2022/12/11(日) 18:40:10.49ID:jc+ZhrAU0 メモリー上にどう格納
830デフォルトの名無しさん (テテンテンテン MM8f-gr5V)
2022/12/11(日) 18:50:45.41ID:DhbhWaSTM 2の補数表現の知識は機械語の範疇だろう
スタックもそうだ
Cの仕様にスタックなんて言葉は出てこないからな
register指定も完全に機械語だ
タイマとか割り込みを扱う場合は機械語の知識も必要だな
setjmp longjmpも何が保存されてるのか理解するには機械語の知識が必要だ
要するに機械語の知識は必要だ
スタックもそうだ
Cの仕様にスタックなんて言葉は出てこないからな
register指定も完全に機械語だ
タイマとか割り込みを扱う場合は機械語の知識も必要だな
setjmp longjmpも何が保存されてるのか理解するには機械語の知識が必要だ
要するに機械語の知識は必要だ
831はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff3e-3TNT)
2022/12/11(日) 19:18:24.83ID:ftKoc+Hh0 >>825
ポインタ演算は未定義動作を簡単に引き起こせてしまうので
十分に理解できてない状態で実際に動作させてみるというのはあまりあてにならない。
ある程度は理解した上で実際にやってみたら納得しやすいってことならわかるけど。
ポインタ演算は未定義動作を簡単に引き起こせてしまうので
十分に理解できてない状態で実際に動作させてみるというのはあまりあてにならない。
ある程度は理解した上で実際にやってみたら納得しやすいってことならわかるけど。
832デフォルトの名無しさん (アウアウウー Sa6b-Fzhe)
2022/12/11(日) 19:19:01.91ID:HcYuyEaDa 何十年前の話題を蒸し返してるのか知らんけど今のコンパイラは賢いからregisterとか使う必要ないぞ
むしろ人間が余計な指示を出すことで効率が悪くなる可能性すらあるからハードウェアの知識が云々とかいう老害理論はパイプラインとかキャッシュとかを全て把握してから言ってくれ
君たちの時代は終わったんだよ
むしろ人間が余計な指示を出すことで効率が悪くなる可能性すらあるからハードウェアの知識が云々とかいう老害理論はパイプラインとかキャッシュとかを全て把握してから言ってくれ
君たちの時代は終わったんだよ
833デフォルトの名無しさん (ワッチョイ 7fcf-FUlb)
2022/12/11(日) 19:29:49.83ID:vn3Pz69o0 register なんてあてにならんもん、使ってる奴いなかったと思うよ
本当に速くしたい所は、それこそインラインアセンブラ使ったり
アセンブルしたルーチン呼んでたし
本当に速くしたい所は、それこそインラインアセンブラ使ったり
アセンブルしたルーチン呼んでたし
834デフォルトの名無しさん (アウアウウー Sa6b-Fzhe)
2022/12/11(日) 19:33:50.07ID:HcYuyEaDa >>833
コンパイラが本当に愚直な時は最適化無しで使ってたぞ
コンパイラが本当に愚直な時は最適化無しで使ってたぞ
835デフォルトの名無しさん (ワッチョイ 7fcf-FUlb)
2022/12/11(日) 19:38:52.22ID:vn3Pz69o0 それは失礼した
836はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff3e-3TNT)
2022/12/11(日) 19:39:00.70ID:ftKoc+Hh0 少なくとも gcc とか clang くらいのモダンな処理系ではコンパイラの判断のほうが賢いわな。
低レイヤのコードだと人手で指定を付けたいときもあるかもしれんが
そういう分野ではどうせ処理系の拡張がなきゃどうにもならんので
register キーワード程度のあやふやなものひとつを言語仕様に入れてもあまり役に立たない。
C++ では register は削除された (機能は削除されたがキーワードとしては予約語のまま) わけだし、
C でもその内に削除されるんじゃないかな。
低レイヤのコードだと人手で指定を付けたいときもあるかもしれんが
そういう分野ではどうせ処理系の拡張がなきゃどうにもならんので
register キーワード程度のあやふやなものひとつを言語仕様に入れてもあまり役に立たない。
C++ では register は削除された (機能は削除されたがキーワードとしては予約語のまま) わけだし、
C でもその内に削除されるんじゃないかな。
837デフォルトの名無しさん (アウアウウー Sa6b-VZV0)
2022/12/11(日) 20:04:06.71ID:8Gp9TgZBa register なんて要らんとか昔からずーっと言われてるけど
つけたらつけたで速くなったのその目で見たやつも居るでしょ?
gcc と gprof だけで頑張ってたとき確かに速くなったけど
だから register は有効有用使うべきとは言わないけどね
つけたらつけたで速くなったのその目で見たやつも居るでしょ?
gcc と gprof だけで頑張ってたとき確かに速くなったけど
だから register は有効有用使うべきとは言わないけどね
838デフォルトの名無しさん (ワッチョイ a7e6-JdnI)
2022/12/11(日) 21:31:25.77ID:OhnENqmv0 >>830
>setjmp longjmpも何が保存されてるのか理解するには機械語の知識が必要だ
基本スタックポインタとプログラムカウンタだけだと思っていましたが、まあレジスタ全部と他何を保存してましたっけ?
>setjmp longjmpも何が保存されてるのか理解するには機械語の知識が必要だ
基本スタックポインタとプログラムカウンタだけだと思っていましたが、まあレジスタ全部と他何を保存してましたっけ?
839ハノン ◆QZaw55cn4c (ワッチョイ a7e6-JdnI)
2022/12/11(日) 22:26:47.72ID:OhnENqmv0840デフォルトの名無しさん (テテンテンテン MM8f-gr5V)
2022/12/11(日) 22:34:58.44ID:IkAIpxjPM841デフォルトの名無しさん (ワッチョイ 27c2-aipL)
2022/12/12(月) 06:30:06.98ID:ychPXO7Q0 メジャーどころのCPUは大抵、戻り値はレジスタだね
842デフォルトの名無しさん (ラクッペペ MM8f-JsS5)
2022/12/12(月) 07:28:31.07ID:v0et11DOM843デフォルトの名無しさん (スフッ Sdff-qs7g)
2022/12/12(月) 14:27:00.05ID:Y3syqvcfd static記憶クラス指定子の理解はできますが、いざプログラムを組んでみると、使い方がわかりません。
844デフォルトの名無しさん (アウアウウー Sa6b-Fzhe)
2022/12/12(月) 14:36:59.78ID:jnrvptAKa >>841
CPU関係あるか?
CPU関係あるか?
845デフォルトの名無しさん (ワッチョイ 7fcf-FUlb)
2022/12/12(月) 14:37:08.19ID:RmZ1ojDx0 わかるものを使えばいいよ
846デフォルトの名無しさん (ワッチョイ 7f63-KKgq)
2022/12/12(月) 15:05:24.79ID:BWUj5Mhq0 意訳
メジャーどころのCPU(に対応したCコンパイラ)は大抵、戻り値はレジスタだね
ではないかと
VCだとコンパイルオプションで変化した記憶がある
メジャーどころのCPU(に対応したCコンパイラ)は大抵、戻り値はレジスタだね
ではないかと
VCだとコンパイルオプションで変化した記憶がある
847はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff3e-3TNT)
2022/12/12(月) 16:42:43.35ID:J7ftRWn10 >>844
呼び出し規約 (を含む ABI) の策定はアーキテクチャを設計したところが主導するもんじゃないのかな。
CPU の特性に反した使い方を基本にされても困るだろうし。
ざっと調べた感じだとよく使われている System V ABI はインテルが議長の委員会で決める体制っぽい。
マイクロソフト (Windows) は引数の渡し方がちょっと違う規約でやってて
文句も出てない (出てないよね?) からそんなに強い強制力があるわけでもないんだろうけど、
CPU ごとに常識的な使い方というものはあるだろう。
呼び出し規約 (を含む ABI) の策定はアーキテクチャを設計したところが主導するもんじゃないのかな。
CPU の特性に反した使い方を基本にされても困るだろうし。
ざっと調べた感じだとよく使われている System V ABI はインテルが議長の委員会で決める体制っぽい。
マイクロソフト (Windows) は引数の渡し方がちょっと違う規約でやってて
文句も出てない (出てないよね?) からそんなに強い強制力があるわけでもないんだろうけど、
CPU ごとに常識的な使い方というものはあるだろう。
848デフォルトの名無しさん (ワッチョイ 7fcf-FUlb)
2022/12/12(月) 16:59:57.60ID:RmZ1ojDx0 B言語でも戻り値はレジスタだったし
849デフォルトの名無しさん (アウアウウー Sa6b-Fzhe)
2022/12/12(月) 19:01:13.79ID:xR631HBma >>847
マイクロソフトが作ってるハードはSurfaceとかだろ?
マイクロソフトが作ってるハードはSurfaceとかだろ?
850デフォルトの名無しさん (ワッチョイ df36-KKgq)
2022/12/12(月) 19:19:51.33ID:m7KoqGgA0 DOS時代にグラフィックライブラリとかをMASMでアセンブルして出来たobjファイルを
Cコンパイラで作ったobjとをリンクさせて
Cからアセンブラのルーチン呼び出したりしてたけど、
COBOLやFORTRANで作った関数をリンクさせて
Cで呼び出したりも出来るの?
Cコンパイラで作ったobjとをリンクさせて
Cからアセンブラのルーチン呼び出したりしてたけど、
COBOLやFORTRANで作った関数をリンクさせて
Cで呼び出したりも出来るの?
851デフォルトの名無しさん (ワッチョイ 7f63-KKgq)
2022/12/12(月) 19:31:09.72ID:BWUj5Mhq0 FORTRANなら呼べると思うが、COBOLは分からない
FORTRANやCOBOLからならCの関数は呼べたと思う
FORTRANやCOBOLからならCの関数は呼べたと思う
852デフォルトの名無しさん (ワッチョイ df7c-KKgq)
2022/12/12(月) 19:34:09.58ID:2yJi4NkT0 objファイルは流石に無理があるけどDLLや静的ライブラリでも作れば良いだけでは?
gfortranならexe以外にもDLL等が作成出来る
gfortranならexe以外にもDLL等が作成出来る
853デフォルトの名無しさん (ワッチョイ 7f63-KKgq)
2022/12/12(月) 19:37:26.25ID:BWUj5Mhq0 受け渡しのデータ型も割と近くないかな?
854デフォルトの名無しさん (ワッチョイ a701-3npV)
2022/12/12(月) 19:39:34.73ID:qCai2YYC0 引数の積みかたやらスタックフレームの巻き戻しはどっちがやるか等の約束事が
シンプルに固定されてるDLLなら他所言語への持ち出しや持ち入れがやりやすいわね
シンプルに固定されてるDLLなら他所言語への持ち出しや持ち入れがやりやすいわね
855デフォルトの名無しさん (ワッチョイ a705-u86g)
2022/12/12(月) 20:17:18.59ID:munrOkPw0 >>828 まあ・・C言語を触るぐらいだから、一般的には大学とかのコンピュータサイエンス教科を
履修しているのが前提だろうから、そこはあえて省略したのですが・・
昔の高校生は頭がよかったけど。
今は「仕事でC言語を触らせてくれる身分」になるためには基本、情報系の大卒でしょうし・・
履修しているのが前提だろうから、そこはあえて省略したのですが・・
昔の高校生は頭がよかったけど。
今は「仕事でC言語を触らせてくれる身分」になるためには基本、情報系の大卒でしょうし・・
856デフォルトの名無しさん (ワッチョイ a705-u86g)
2022/12/12(月) 20:18:59.06ID:munrOkPw0 >>828 配列のソートってメモリ意識しますかね。フラグメンテーションとか考えたこともないな・・。
単純に演算オーダー(log O^n とか・・)そんな感じである程度予測を立てて、あとは扱うデータ次第かと。
単純に演算オーダー(log O^n とか・・)そんな感じである程度予測を立てて、あとは扱うデータ次第かと。
857はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff3e-3TNT)
2022/12/12(月) 21:58:34.14ID:J7ftRWn10 アルゴリズムのレベルではある程度の効率は事前に考えるけど
断片化とかキャッシュヒットとかはチューニングが必要な状況になるまで考えないな。
むしろ考慮したくなっても意識的に忘れるようにする。
いわゆる「早すぎる最適化」の一種だから。
当然ながら必要になったときには知っている必要はあるんだけどそんな機会は多くないよね。
普通の (アルゴリズムのレベルでは充分に配慮された) プログラムを書いて極端に効率が悪いようなら
メモリアロケータやキャッシュの設計のほうが悪い。
(そうは言っても目の前にあるものがそうなってるなら自分のほうが合わさないとしょうがないんだろうけどさ……)
断片化とかキャッシュヒットとかはチューニングが必要な状況になるまで考えないな。
むしろ考慮したくなっても意識的に忘れるようにする。
いわゆる「早すぎる最適化」の一種だから。
当然ながら必要になったときには知っている必要はあるんだけどそんな機会は多くないよね。
普通の (アルゴリズムのレベルでは充分に配慮された) プログラムを書いて極端に効率が悪いようなら
メモリアロケータやキャッシュの設計のほうが悪い。
(そうは言っても目の前にあるものがそうなってるなら自分のほうが合わさないとしょうがないんだろうけどさ……)
858ハノン ◆QZaw55cn4c (ワッチョイ a7e6-JdnI)
2022/12/12(月) 22:18:23.35ID:1Of7Vyge0 >>847
win32api はなぜ PASCAL にしたんでしょうかね?
win32api はなぜ PASCAL にしたんでしょうかね?
859ハノン ◆QZaw55cn4c (ワッチョイ a7e6-JdnI)
2022/12/12(月) 22:21:28.35ID:1Of7Vyge0 >>847
AMD64 は AMD が呼び出し規約まで決めちゃったけれども、普通は OS 屋が決めるものという気がしますけどね
AMD64 は AMD が呼び出し規約まで決めちゃったけれども、普通は OS 屋が決めるものという気がしますけどね
860はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff3e-3TNT)
2022/12/12(月) 23:05:07.66ID:J7ftRWn10 >>839
register というキーワードが将来に転用 (repurposing) 出来るようにというのは書かれている。
https://timsong-cpp.github.io/cppwp/n4659/diff.cpp14.dcl.dcl
auto という名前が新しい用途にぴったり (少なくとも不自然ではない) なので
それと同じくらいに register という名前が丁度良い場面というのは全く想像がつかないんだけど
思いもよらぬ形で上手いこと使われることはあるかもしれんね。
メンバ関数の宣言のときの default とか delete とかも考えたやつは天才じゃん……と私は思ったよ。
register というキーワードが将来に転用 (repurposing) 出来るようにというのは書かれている。
https://timsong-cpp.github.io/cppwp/n4659/diff.cpp14.dcl.dcl
auto という名前が新しい用途にぴったり (少なくとも不自然ではない) なので
それと同じくらいに register という名前が丁度良い場面というのは全く想像がつかないんだけど
思いもよらぬ形で上手いこと使われることはあるかもしれんね。
メンバ関数の宣言のときの default とか delete とかも考えたやつは天才じゃん……と私は思ったよ。
861デフォルトの名無しさん (ワッチョイ 7f63-KKgq)
2022/12/12(月) 23:08:20.90ID:BWUj5Mhq0 switch文のdefaultはたまに綴りを間違えてしまうw
862はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff3e-3TNT)
2022/12/12(月) 23:14:51.65ID:J7ftRWn10863デフォルトの名無しさん (スフッ Sdff-d44j)
2022/12/12(月) 23:35:39.10ID:zHXfNaq5d 転用とかややこしいだけだから勘弁
自動でautoだからあんまり気にすんなよ、ちなc++ではこんな意味だよと、またややこしい補足が増えるだけ
むしろアンスコ付きの変な名前の方がかえってキーワードなんだなと分かりやすい、ソースは醜くなるけど、それは今更
自動でautoだからあんまり気にすんなよ、ちなc++ではこんな意味だよと、またややこしい補足が増えるだけ
むしろアンスコ付きの変な名前の方がかえってキーワードなんだなと分かりやすい、ソースは醜くなるけど、それは今更
864デフォルトの名無しさん (ワッチョイ 7fcf-FUlb)
2022/12/13(火) 00:08:19.11ID:HbzfEbfW0 auto も B言語の名残りだか後方互換だかで、
Bではデータ型がなくて、変数=整数が文脈により、ポインタとしても使われた
その storage classesとして、automatic, external, internal の3種類があった
main() {
extrn putchar, n, v;
auto i, c, col, a;
(略)
putchar('*n*n');
}
v[2000];
n 2000;
という風に auto で変数を宣言していた
Bではデータ型がなくて、変数=整数が文脈により、ポインタとしても使われた
その storage classesとして、automatic, external, internal の3種類があった
main() {
extrn putchar, n, v;
auto i, c, col, a;
(略)
putchar('*n*n');
}
v[2000];
n 2000;
という風に auto で変数を宣言していた
865デフォルトの名無しさん (スフッ Sdff-d44j)
2022/12/13(火) 00:29:54.37ID:+JwZZYrvd 他に触る言語で明示的にauto宣言するのはbcかな、オモチャみたいなもんでPOSIXも有名無実で仕様なんぞ無いに等しいが
ポインタは明示的に触らないけど、エミュる時は配列の添字にauto変数(整数)突っ込むからむしろCよりBっぽい
ポインタは明示的に触らないけど、エミュる時は配列の添字にauto変数(整数)突っ込むからむしろCよりBっぽい
866デフォルトの名無しさん (ワッチョイ 7f63-KKgq)
2022/12/13(火) 00:36:12.95ID:FXPyPtyo0 可変長で必要に応じて伸び縮みする配列とか、
桁数制限無しの整数型や計算誤差のない実数型とか
誰か作って(人任せ)
桁数制限無しの整数型や計算誤差のない実数型とか
誰か作って(人任せ)
867デフォルトの名無しさん (ワッチョイ 27c2-aipL)
2022/12/13(火) 06:01:01.43ID:d0KqwuA/0 > 桁数制限無しの整数型
つGMP
つGMP
868デフォルトの名無しさん (アウアウウー Sa6b-0RkQ)
2022/12/13(火) 07:11:07.69ID:ZjPntofYa >>858
当時流行ってたからだろ
当時流行ってたからだろ
869デフォルトの名無しさん (ワッチョイ a7e6-JdnI)
2022/12/13(火) 07:11:26.57ID:4+XH+KhI0870デフォルトの名無しさん (テテンテンテン MM8f-gr5V)
2022/12/13(火) 13:48:16.74ID:aee1RRAhM 計算誤差の無い実数型って不可能だけどなw
decimalを使うと2進数は10進数の浮動小数点数を正確に表現出来ない問題を解消できる
ratio(分数)を使うと、1/3とかをそのまま保持出来るから誤差が出ない
ちなみに、Common Lispは分数を凄い簡単に扱えるしbignumも使える
Cでもそうなって欲しいもんだ
decimalを使うと2進数は10進数の浮動小数点数を正確に表現出来ない問題を解消できる
ratio(分数)を使うと、1/3とかをそのまま保持出来るから誤差が出ない
ちなみに、Common Lispは分数を凄い簡単に扱えるしbignumも使える
Cでもそうなって欲しいもんだ
871デフォルトの名無しさん (アウアウウー Sa6b-Fzhe)
2022/12/13(火) 13:59:48.87ID:7PNjtjtua なぜ分数や多倍長整数が必要な案件にCなんかを使うのか
872デフォルトの名無しさん (ワッチョイ 7f63-KKgq)
2022/12/14(水) 12:00:46.68ID:erx97Ujd0 虚数や複素数も扱えてたよね
あまり使い道はないかも知れないが
あまり使い道はないかも知れないが
873デフォルトの名無しさん (ワッチョイ 7f02-d44j)
2022/12/14(水) 13:40:07.30ID:XaqmHtNn0 区間を分割して評価、終了判定がintegerpで判定とか細かい所で色々楽はできるだろう
単にスケールしても済むし、何回もやるなら任意精度でない有理型くらい構造体とgcdさえ書ければ誰でも書けるだろ
用途が違うし別にclは推さんが、標準の一つであるcltl2はあらゆるプログラマに貴重な書
浮動小数点演算に関しても複素関数の豊富なプロット載せて定義やブランチカット選びの良し悪しにかなりページ割いて、その図の生成に使ったpsコード生成コードも載ってる
つーか>>866はbcって言って欲しいだけでしょ、おまえら釣られすぎ
単にスケールしても済むし、何回もやるなら任意精度でない有理型くらい構造体とgcdさえ書ければ誰でも書けるだろ
用途が違うし別にclは推さんが、標準の一つであるcltl2はあらゆるプログラマに貴重な書
浮動小数点演算に関しても複素関数の豊富なプロット載せて定義やブランチカット選びの良し悪しにかなりページ割いて、その図の生成に使ったpsコード生成コードも載ってる
つーか>>866はbcって言って欲しいだけでしょ、おまえら釣られすぎ
874デフォルトの名無しさん (ワッチョイ 7f02-d44j)
2022/12/14(水) 14:04:41.21ID:XaqmHtNn0 <cmath.h>徹底解剖みたいな文献って無いんだろうか
875デフォルトの名無しさん (ワッチョイ 7f02-d44j)
2022/12/14(水) 14:17:47.17ID:XaqmHtNn0 complex.hだった
最近触り始めたpythonでcmathだから素で間違えた
んでc++はmath.hが<cmath>と…
最近触り始めたpythonでcmathだから素で間違えた
んでc++はmath.hが<cmath>と…
876はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff3e-3TNT)
2022/12/14(水) 16:18:53.52ID:YAu9ihh40 math.h と cmath とは事情がややこしいので単に名前が変わっただけとは思わないほうがいい。
math.h の関数は多相化されてなくてマクロで多相化された版は tgmath.h にある。
cmath の多相化にはテンプレートが使われている。
math.h の関数は多相化されてなくてマクロで多相化された版は tgmath.h にある。
cmath の多相化にはテンプレートが使われている。
877デフォルトの名無しさん (ワッチョイ 7f02-d44j)
2022/12/14(水) 19:29:35.78ID:XaqmHtNn0 Cのtgmathの方が(実装的な意味で)エグいよね
よくマクロの真髄みたいに色んな実装が紹介されるし、ちゃんと動いてるんだろうけど
ちょっと訳がわからないものは避けたい…
_Genericでスッキリ書けたりしないのだろうか
よくマクロの真髄みたいに色んな実装が紹介されるし、ちゃんと動いてるんだろうけど
ちょっと訳がわからないものは避けたい…
_Genericでスッキリ書けたりしないのだろうか
878デフォルトの名無しさん (スププ Sdff-d44j)
2022/12/14(水) 20:13:04.33ID:h6lYzG45d ヘッダに直書きされてるから目につく機会が多いだけで、内部的にやっても同じロジックが隠れるだけか
気にし出せばきりがないようにも思う
気にし出せばきりがないようにも思う
879デフォルトの名無しさん (ワッチョイ 27c2-aipL)
2022/12/14(水) 20:45:14.60ID:QXbvEgmH0 >>874
<ccmath>?
<ccmath>?
880はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff3e-3TNT)
2022/12/15(木) 14:40:26.12ID:xFKc8Du50 >>877
_Generic で素直に分岐すれば問題なくかけるよ。
tgmath.h が規格に入ったとき (C99) は規格の範囲内でやる方法は無かったので
処理系の拡張を使ったり新たな拡張を作ったりしてなんとかなったのだがやっぱりそれは
あかんやろと思ったのか C11 で _Generic を入れることになった。
ただ、処理系は C99 に厳密なモードを持つことがあるからそのモードで動かしたときに
ヘッダ内の _Generic についていちいち警告なりエラーなりが出るのもよろしくないし、
#ifdef で分けるのも二度手間だし、
旧来通りの実装で残すのはそれなりに合理的なんだと思う。
ありがたいことに普通に使う分には標準ヘッダの実体を気にする必要はないのだから忘れておくのが幸せだろう。
_Generic で素直に分岐すれば問題なくかけるよ。
tgmath.h が規格に入ったとき (C99) は規格の範囲内でやる方法は無かったので
処理系の拡張を使ったり新たな拡張を作ったりしてなんとかなったのだがやっぱりそれは
あかんやろと思ったのか C11 で _Generic を入れることになった。
ただ、処理系は C99 に厳密なモードを持つことがあるからそのモードで動かしたときに
ヘッダ内の _Generic についていちいち警告なりエラーなりが出るのもよろしくないし、
#ifdef で分けるのも二度手間だし、
旧来通りの実装で残すのはそれなりに合理的なんだと思う。
ありがたいことに普通に使う分には標準ヘッダの実体を気にする必要はないのだから忘れておくのが幸せだろう。
881デフォルトの名無しさん (ワッチョイ 2a04-e5AJ)
2022/12/21(水) 10:08:23.47ID:537DsEmx0 // エラーを報告するための関数
// printfと同じ引数を取る
void error(char *fmt, ...) {
va_list ap;
va_start(ap, fmt);
vfprintf(stderr, fmt, ap);
fprintf(stderr, "\n");
exit(1);
}
これってprintfをerrorに変えただけって認識でok
// printfと同じ引数を取る
void error(char *fmt, ...) {
va_list ap;
va_start(ap, fmt);
vfprintf(stderr, fmt, ap);
fprintf(stderr, "\n");
exit(1);
}
これってprintfをerrorに変えただけって認識でok
882デフォルトの名無しさん (ワッチョイ 2a04-e5AJ)
2022/12/21(水) 10:08:47.18ID:537DsEmx0 すまん誤爆した
883デフォルトの名無しさん (ワッチョイ 2a04-e5AJ)
2022/12/21(水) 10:11:35.91ID:537DsEmx0 これってprintfをerrorに変えただけって認識でok?
error("引数の個数が正しくありません");と
fprintf(stderr, "引数の個数が正しくありません\n");
の違いを誰か教えてくれ
error("引数の個数が正しくありません");と
fprintf(stderr, "引数の個数が正しくありません\n");
の違いを誰か教えてくれ
884はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 3b3e-JDfe)
2022/12/21(水) 10:21:03.43ID:6CmfCawf0885デフォルトの名無しさん (ワッチョイ be63-e5AJ)
2022/12/21(水) 10:21:33.71ID:LOXcnIHB0 呼び出したら、死ぬ?
886デフォルトの名無しさん (スフッ Sd8a-evpg)
2022/12/21(水) 10:31:04.10ID:Fs8T+fBed そのerrorならexit以外そうじゃね
perror(msg)はもう少し賢くて
fprintf(stderror, "%s: %s\n", msg, strerror(errno))
相当(by k&r2e)
perror(msg)はもう少し賢くて
fprintf(stderror, "%s: %s\n", msg, strerror(errno))
相当(by k&r2e)
887デフォルトの名無しさん (ワッチョイ 2a04-e5AJ)
2022/12/21(水) 10:34:02.36ID:537DsEmx0 >>884
こんな時間にありがとう、助かる。
fprintf(stderr, "引数の個数が正しくありません\n");と同じってことやな
これにexitを加えて関数にしたのがerrorってことやね
わざわざerror関数にする必要性がわからんかったから助かったわ
こんな時間にありがとう、助かる。
fprintf(stderr, "引数の個数が正しくありません\n");と同じってことやな
これにexitを加えて関数にしたのがerrorってことやね
わざわざerror関数にする必要性がわからんかったから助かったわ
888デフォルトの名無しさん (ワッチョイ be63-e5AJ)
2022/12/21(水) 10:37:12.34ID:LOXcnIHB0 私なら、error()を呼び出した側でexit()呼ぶなあ
889デフォルトの名無しさん (スフッ Sd8a-evpg)
2022/12/21(水) 10:39:53.43ID:Fs8T+fBed ステータス選べるしな
わざわざexitに渡すステータス引数を拵えるくらいならexit読んだ方が早い
わざわざexitに渡すステータス引数を拵えるくらいならexit読んだ方が早い
890デフォルトの名無しさん (スフッ Sd8a-evpg)
2022/12/21(水) 10:51:42.39ID:Fs8T+fBed >>881
あ、地味にfprintf(stderr, "\n")でフラッシュしてるのに気付いた
あるいはfmtへの\n付け忘れ防止配慮か
基本stderrはこまめにフラッシュされるものと思ってるけど、fflushや"\n"で念を入れても損は無いな
あ、地味にfprintf(stderr, "\n")でフラッシュしてるのに気付いた
あるいはfmtへの\n付け忘れ防止配慮か
基本stderrはこまめにフラッシュされるものと思ってるけど、fflushや"\n"で念を入れても損は無いな
891はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 3b3e-JDfe)
2022/12/21(水) 11:33:17.33ID:6CmfCawf0 言語仕様では exit で終了とか main の終端に到達した場合に全てのオープンされているファイルはクローズする
(そのときに全ての出力ストリームをフラッシュする) というのは保証してる。
エラーが起きている状況でどこまで信用できるかよくわからんから念押ししても損はないだろうけど。
(そのときに全ての出力ストリームをフラッシュする) というのは保証してる。
エラーが起きている状況でどこまで信用できるかよくわからんから念押ししても損はないだろうけど。
892デフォルトの名無しさん (ワッチョイ 2a04-e5AJ)
2022/12/21(水) 15:19:19.23ID:537DsEmx0 http://codepad.org/noY0x7K2
これの70行目と79行目の*ってただただ関数でポインタを扱うよってだけ?
なんか関数ポインタと似ててどうなんやって思った
int (*func1)(char*, int);
これの70行目と79行目の*ってただただ関数でポインタを扱うよってだけ?
なんか関数ポインタと似ててどうなんやって思った
int (*func1)(char*, int);
893デフォルトの名無しさん (スップ Sd8a-UQjj)
2022/12/21(水) 15:23:54.32ID:WXW0EqS+d なんか質問者はexit呼ばないんだったら関数化しないでええやろって思ってそうで怖いな
設計方針次第でもあるが心配になるな
設計方針次第でもあるが心配になるな
894デフォルトの名無しさん (ワッチョイ 2a04-e5AJ)
2022/12/21(水) 15:35:25.72ID:537DsEmx0 >>893
今学習段階だからかなりの無知なんや、すまん
今学習段階だからかなりの無知なんや、すまん
895デフォルトの名無しさん (ワッチョイ 2a04-e5AJ)
2022/12/21(水) 15:51:20.06ID:537DsEmx0 あと上のURLのプログラムのcallocではメモリ解放してないけど大丈夫なのか?
896はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 3b3e-JDfe)
2022/12/21(水) 15:56:02.50ID:6CmfCawf0 >>892
返却値の型が Token* であるという意味。
でも文法的には * は宣言子に含まれていて Token の側じゃなく関数名がある側のグループなんよ。
だから右側に寄せて書く習慣になってる。
C の宣言の文法が無茶苦茶なのはイマサラな話なので……。
可変長引数の扱いも低レイヤの事情が見え隠れするような古の設計なので
歴史的事情を知らんとわけわからんのもしょうがないとは思う。
返却値の型が Token* であるという意味。
でも文法的には * は宣言子に含まれていて Token の側じゃなく関数名がある側のグループなんよ。
だから右側に寄せて書く習慣になってる。
C の宣言の文法が無茶苦茶なのはイマサラな話なので……。
可変長引数の扱いも低レイヤの事情が見え隠れするような古の設計なので
歴史的事情を知らんとわけわからんのもしょうがないとは思う。
897デフォルトの名無しさん (ワッチョイ 7e02-evpg)
2022/12/21(水) 16:08:16.37ID:5pWmYDMC0 一貫性が大事って意味ならそう思う、特にdiagnosticなエラー(最後まで残る)は
俺は手入力で適当なエラーメッセージ書くのは極力控えてる、例えば数学関数書いてるなら
errno = EDOM;
perror(__func__);
→my_func: Argument to the math function out of domain.
的な
手続き的なルーチン(main)なら__FILE__/__LINE__とかで
用意されてるシンボル定数で意味論が合うなら活用すべき
EDOMなんかは好きに使っていいけど、システム、IO関連のエラーは意味が直感的でなかったり、規約に厳密に従わないとerrno見るcallerが騙されたりでバグの素なので、ちゃんとマニュアル参照のこと
俺は手入力で適当なエラーメッセージ書くのは極力控えてる、例えば数学関数書いてるなら
errno = EDOM;
perror(__func__);
→my_func: Argument to the math function out of domain.
的な
手続き的なルーチン(main)なら__FILE__/__LINE__とかで
用意されてるシンボル定数で意味論が合うなら活用すべき
EDOMなんかは好きに使っていいけど、システム、IO関連のエラーは意味が直感的でなかったり、規約に厳密に従わないとerrno見るcallerが騙されたりでバグの素なので、ちゃんとマニュアル参照のこと
898デフォルトの名無しさん (ワッチョイ 2a04-e5AJ)
2022/12/21(水) 16:09:52.42ID:537DsEmx0899デフォルトの名無しさん (ワッチョイ 7e02-evpg)
2022/12/21(水) 16:10:45.37ID:5pWmYDMC0 ああ、当たり前だけどerrnoを上書きする前に気付いてないフラグ立ってないかif(!errno)チェックは忘れずに
割と立ってる事がある()
割と立ってる事がある()
900デフォルトの名無しさん (スップ Sd8a-UQjj)
2022/12/21(水) 16:16:43.94ID:WXW0EqS+d >>895
勿論使い終わったら解放する必要があるので解放関数を用意してあげよう
勿論使い終わったら解放する必要があるので解放関数を用意してあげよう
901デフォルトの名無しさん (ワッチョイ 6a01-6ae9)
2022/12/21(水) 17:55:00.19ID:j8NGwdcp0902デフォルトの名無しさん (スッップ Sd8a-kgXK)
2022/12/21(水) 18:13:15.89ID:3kYobt3Gd 今、息してるのか?
903デフォルトの名無しさん (ワッチョイ be63-e5AJ)
2022/12/21(水) 18:21:41.76ID:LOXcnIHB0 一日一回再起動すれば大丈夫
904デフォルトの名無しさん (ワッチョイ 4bc2-Kqkv)
2022/12/21(水) 21:42:34.64ID:MxQdxJ6G0 再起動なんてちまちましたことやってられるかい
電源ぶっこ抜いて入れ直すんだよ、それか蹴れば直る
電源ぶっこ抜いて入れ直すんだよ、それか蹴れば直る
905デフォルトの名無しさん (ワッチョイ f310-e5AJ)
2022/12/22(木) 11:43:33.39ID:kpFE4WK60 アプリ(強制)終了後に使ったファイル削除→このファイルは使用中です。
OSで保証されてないならアプリ側でやるしか無いじゃん。
OSで保証されてないならアプリ側でやるしか無いじゃん。
906デフォルトの名無しさん (ワンミングク MMda-6ae9)
2022/12/22(木) 13:27:28.75ID:LbsYIb+eM 誰かがこのPCを使っている
907デフォルトの名無しさん (スッップ Sd8a-kgXK)
2022/12/22(木) 13:35:11.18ID:KHPfY9lXd LANなら充分にあり得ることだな
レス数が900を超えています。1000を超えると表示できなくなるよ。
ニュース
- 空自機レーダー照射、音声データ公開 中国 ★3 [蚤の市★]
- 日銀「歴史的」利上げ迫る 35年ぶりの年間上げ幅、0.5%の壁を突破 [蚤の市★] [蚤の市★]
- 高市早苗首相、消費税減税に後ろ向き 足かせはレジシステム? 「責任ある積極財政」期待高いが [蚤の市★]
- 【YouTuber】バイク事故で入院のゆたぼん、振込で「お見舞金」募る [muffin★]
- 低所得層のマクドナルド離れが深刻に 広がる「ファストフード格差」の真相 米国 [少考さん★]
- 堀江貴文、キャッシュレス非対応の店にモヤッ 『PayPay』立ち上げの人物にまさかの直談判「現金決済しかできないんだけど…」 [冬月記者★]
- 中国がここまで過敏になるのは日本に前科があるから。盧溝橋、満州事変。ジャップの先制攻撃は挙げればキリがないけど [472617201]
- 統合失調症患者に「それはあなたが統合失調症だからそう思い込んでるだけですよ」と説得する方法、存在しない
- ぶっちゃけ天のうって昭和天のうのせいで全然ありがたみないよな
- 犬って顔くっつけて寝たがるよな
- 『猟友会がクマ駆除を嫌がるなら潰すべき。職務を放棄するハンターから免許や銃を没収して罰金を取ろう』の声、ネットで上がる [932029429]
- 【悲報】JA「全然米が売れなくて倉庫を圧迫してる。助けて!」米卸売り業者「安売りしたら赤字になる…助けて!」 [802034645]
