1 名前:デフォルトの名無しさん mailto:sage [2022/08/04(木) 23:32:27.83 ID:yWVViPyIM.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 C2x ドラフト www.open-std.org/jtc1/sc22/wg14/www/docs/n2731.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言語なら俺に聞け 158 https://mevius.5ch.net/test/read.cgi/tech/1640401906/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
792 名前:デフォルトの名無しさん mailto:sage [2022/12/09(金) 15:41:02.97 ID:8zaQFmsV0.net] 何らかの要因でテンパって煮詰まってコーディングしてて 変なものができてしまうこと、皆さんも経験あるのでは
793 名前:はちみつ餃子 mailto:sage [2022/12/09(金) 17:25:23.52 ID:Qnrm7z6h0.net] >>776 スタックから消えるというか、言語仕様的な用語でいうと生存期間が終了していることになる。 そんでオブジェクトを生存期間の外部で参照したときの動作は未定義なので何が起こるかわからん。 C でいう未定義ってのは「何が起きてもいい」なのでデータが壊れる (意味不明の値が読みだされる) だけでは済まないかもしれない。
794 名前:デフォルトの名無しさん mailto:sage [2022/12/09(金) 17:34:59.55 ID:i/ZE6Izl0.net] 恋と同じで、はかなく消える運命
795 名前:デフォルトの名無しさん [2022/12/10(土) 01:00:03.41 ID:ap6EnRqC0.net] >>776 すぐ消えないことがあるので読めてしまうかも知れない。しかし何かをすると一瞬にして破壊されて終わるかも知れない。 あてにしてはいけない。 ていうかこの頃のコンパイラってそういうのは警告出したりエラー扱いにしない?
796 名前:デフォルトの名無しさん mailto:sage [2022/12/10(土) 08:35:32.63 ID:0yWWcyiC0.net] コンパイル時に常に摘出できるわけじゃないし
797 名前:デフォルトの名無しさん mailto:sage [2022/12/10(土) 08:43:06.25 ID:VZKCrGXt0.net] いやバグは睾丸みたいに摘出はできないだろ
798 名前:デフォルトの名無しさん mailto:sage [2022/12/10(土) 11:08:12.32 ID:8LaJbp4o0.net] warning C4172: ローカル変数またはテンポラリのアドレスを返します: hoge VS2022
799 名前:デフォルトの名無しさん mailto:sage [2022/12/10(土) 11:18:10.60 ID:W5v0KihFa.net] >>787 https://learn.microsoft.com/ja-jp/cpp/error-messages/compiler-warnings/compiler-warning-level-1-c4172?view=msvc-170
800 名前:デフォルトの名無しさん mailto:sage [2022/12/10(土) 11:34:37.41 ID:FHzDIuwr0.net] そういうときはレジスタ変数のアドレスを返すようにコーディングしなさい
801 名前:デフォルトの名無しさん mailto:sage [2022/12/10(土) 11:49:59.77 ID:n733SMJ50.net] staticの出番は?
802 名前:デフォルトの名無しさん [2022/12/10(土) 12:13:19.32 ID:9jPqI4Xva.net] そして>>773 の仕様となるのであった…
803 名前:デフォルトの名無しさん mailto:sage [2022/12/10(土) 12:55:16.29 ID:8LaJbp4o0.net] int *fuga(void){ register int i = 123; return &i; } error C2103: '&' レジスタ変数のアドレスを得ようとしました。 ふむ
804 名前:デフォルトの名無しさん [2022/12/10(土) 13:24:22.34 ID:HjLF/vvU0.net] >>788 説明とコードが対応してる気がしない どういうこと?
805 名前:デフォルトの名無しさん mailto:sage [2022/12/10(土) 13:32:02.53 ID:GuAR5Ny/0.net] >>348 レジスタに割り当てた変数には左辺値はないよ だって、ハードウェアのレジスタだから
806 名前:デフォルトの名無しさん mailto:sage [2022/12/10(土) 13:43:23.28 ID:VZKCrGXt0.net] 言いたいことはわかるけど日本語が変 左辺値はメモリアクセスを意味する式なので レジスタに左辺値がないのではなく 記憶クラスがregisterの変数の識別子は左辺値ではない
807 名前:デフォルトの名無しさん [2022/12/10(土) 13:46:04.91 ID:HjLF/vvU0.net] >>789 への疑問やろ
808 名前:デフォルトの名無しさん mailto:sage [2022/12/10(土) 14:05:33.41 ID:lr6mtoK80.net] >>793 floatからdoubleへ変換したうえでその参照を返してる パッと見分かり辛くて人間の認知への挑戦かと思うなw
809 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff3e-3TNT) mailto:sage [2022/12/10(土) 15:12:06.94 ID:brInbnm70.net] >>792 register 指定が付いたらアドレスを取る操作自体が出来なくなるように制限されてるよ。 配列を register 付きで宣言したらなにも出来なさ過ぎてワロタwwwというのはよくあるネタ。 (言語仕様的には配列 (の要素) へのアクセスもポインタ演算の構文等になってるから暗黙にアドレスを取る操作。) >>794-795 左辺値であるかどうかと記憶クラスは関係ない。 必ずしもメモリにアクセスすることを意味しない。 register 宣言でアドレスを取れなくなるのは左辺値でなくなるからではなく & のオペランドは register 付きで宣言されたものであってはならないという直接的な制約。 どこをどう見ても左辺値の定義自体には register 指定は関係しない。 更に C99 の 6.5.3.2 から単項 & の制約について抜粋 > The operand of the unary & operator shall be either a function designator, the result of a > [] or unary * operator, or an lvalue that designates an object that is not a bit-field and is > not declared with the register storage-class specifier. JIS の日本語だとこうなってる。 > 単項&演算子のオペランドは,関数指示子,[]演算子若しくは単項*演算子の結果,又は左辺値でな > ければならない。左辺値の場合,ビットフィールドでもなく,register記憶域クラス指定子付きで宣言 > されてもいないオブジェクトを指し示さなければならない。 左辺値のときは register 指定されていてはいけないというのは逆に言えば register 指定されている左辺値というものも存在することを示唆する。
810 名前:デフォルトの名無しさん (ワッチョイ 27c2-aipL) mailto:sage [2022/12/10(土) 15:19:28.45 ID:VZKCrGXt0.net] > register 指定されている左辺値というものも存在することを示唆する。 具体例ある?
811 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff3e-3TNT) mailto:sage [2022/12/10(土) 15:24:22.50 ID:brInbnm70.net] >>799 具体例というか、 register 指定は左辺値か右辺値かの定義に無関係なので 左辺値なものは register 指定されていようがいまいが左辺値って話。 変数の宣言のときに register 指定を付けたら全て register 指定のついた左辺値だよ。
812 名前:デフォルトの名無しさん mailto:sage [2022/12/10(土) 15:44:01.19 ID:VZKCrGXt0.net] メモリにアクセスすることを意味するでしょ。 6.3.2.1 左辺値 左辺値が評価されたときにオブジェクトを指し示していなければ,動作は未定義とする。 3.14 オブジェクト(object) その内容によって,値を表現することができる実行環境中の記憶域の部分。 参考オブジェクトを参照する場合,オブジェクトは,特定の型をもっていると解釈してもよい(6.3.2.1 参照)。 なんでそういう決まりになっているのかを理解せずに条文の字面に書いてあることだけ表面的に言う人とは歯車が噛み合わないな。
813 名前:デフォルトの名無しさん mailto:sage [2022/12/10(土) 15:50:02.57 ID:gyOVa4Se0.net] >>792 みたいなのはレジスタ変数じゃなくてもやっちゃダメだけどw
814 名前:デフォルトの名無しさん mailto:sage [2022/12/10(土) 15:51:48.45 ID:zHuXawkZa.net] 昔の CPU はレジスタが少なくて なんでもかんでも register 付けて宣言すると CPU の持ってる実 register 数以上に宣言してしまうことが多い では使い切った後の変数はどこに割り当てられる
815 名前:フか? [] [ここ壊れてます]
816 名前:はちみつ餃子 mailto:sage [2022/12/10(土) 16:30:03.16 ID:brInbnm70.net] >>801 話を >>794 といっしょくたにしたのが誤りだった。 すまぬ。 > ハードウェアのレジスタだから の続きで > メモリアクセスを意味する式なので をハードウェア的なメモリアクセスの意味で解釈してしまった。 むしろそんなん関係なく言語仕様上の意味で反論してたんだね。 (後から読む人のために補足すると C の言語仕様でいう実行環境は言語仕様で規定する仮想的な実行環境の ことであって実際の機械語とどう対応づけるか規定されない。 どういう機械語が生成されるかは 言語の意味の根拠にならないので言語仕様で再解釈しようとしたのが >>795 だと私は解釈した。) が、言語仕様の解釈として > registerの変数の識別子は左辺値ではない の部分が誤っているということには変わりないよ。
817 名前:デフォルトの名無しさん mailto:sage [2022/12/10(土) 21:03:51.14 ID:iVr3EzOTM.net] レジスターにもアドレスを割り当てておいたら良かったかも
818 名前:デフォルトの名無しさん mailto:sage [2022/12/10(土) 22:47:45.19 ID:37vQL6PeM.net] 昔6800系CPUはメモリの固定番地をレジスターと同格に扱うダイレクトメモリアドレッシングで見かけのレジスタ数を増やしていた
819 名前:デフォルトの名無しさん (ワッチョイ 7f63-KKgq) mailto:sage [2022/12/10(土) 22:55:13.62 ID:FHzDIuwr0.net] レジスタを指すポインタをインクリメントすると、別のレジスタの値を書き換えられる、とか
820 名前:デフォルトの名無しさん (ラクッペペ MM8f-JsS5) mailto:sage [2022/12/10(土) 22:59:08.86 ID:cw57tQlnM.net] 組込み用の8ビットCPUでも同じような機能があるものもある ダイレクトアドレッシング、ダイレクトページアドレッシングなど殆どは8ビットアドレスのゼロページ目をレジスタと見做して メモリ経由することなく直接ALUで演算を行なうことが出来る
821 名前:デフォルトの名無しさん (ワッチョイ 7f63-KKgq) mailto:sage [2022/12/10(土) 23:32:50.32 ID:FHzDIuwr0.net] レジスター配列とかプログラムコードをレジスタに置くとか
822 名前:デフォルトの名無しさん mailto:sage [2022/12/11(日) 03:20:22.27 ID:BIXjZcK80.net] >>804 左辺値がメモリアクセスを意味するのに?
823 名前:はちみつ餃子 mailto:sage [2022/12/11(日) 03:56:09.23 ID:ftKoc+Hh0.net] >>810 言語仕様では抽象計算機での動作として記述される。 (C99 なら 5.1.2.3?を参照) 記憶域として書かれているものは抽象的な意味の上での記憶域であって、 実際のメモリにアクセスするかどうかはコンパイラの裁量。 register 指定は変数の意味に関与せず、抽象機械の動作の上ではごく普通に記憶域に割り当てられているのと同じ。 その上で register 指定は「可能な限り速いアクセスを期待する」というヒントであることと、アドレスが取れなくなるという制約が付く。 register 指定は抽象機械の上での記憶域をハードウェアのレジスタに割り当てるなどして高速化してくれたらうれしいなぁ (/ω・\)チラッ という指定であって、言語の理屈の上ではアドレスを取れない以外の何の意味も持たない。
824 名前:デフォルトの名無しさん mailto:sage [2022/12/11(日) 06:45:02.24 ID:BIXjZcK80.net] 抽象計算機の記憶域がメモリではないって? もういい、あんたとは話にならん
825 名前:はちみつ餃子 mailto:sage [2022/12/11(日) 06:47:07.10 ID:ftKoc+Hh0.net] >>812 根本的には register 指定で左辺値でなくなったりはしないという話をしてるんで。
826 名前:デフォルトの名無しさん mailto:sage [2022/12/11(日) 07:35:55.41 ID:BIXjZcK80.net] その話の根拠に疑問を示したんだけど、例の屁理屈に逃げるんでもういい
827 名前:はちみつ餃子 mailto:sage [2022/12/11(日) 08:06:06.44 ID:ftKoc+Hh0.net] >>814 言語仕様でそうなっているという以外に根拠が必要か?
828 名前:はちみつ餃子 mailto:sage [2022/12/11(日) 08:12:25.56 ID:ftKoc+Hh0.net] clang で抽象構文木を見る機能があったわ。 lvalue ってなってるだろ。 https://wandbox.org/permlink/j4csi19c5wVPE8ff
829 名前:デフォルトの名無しさん mailto:sage [2022/12/11(日) 08:25:20.92 ID:BIXjZcK80.net] >>815 しつこい
830 名前:デフォルトの名無しさん mailto:sage [2022/12/11(日) 09:45:19.90 ID:B9k8N7vL0.net] >>805 そういうプロセッサーはあるよ(ディスコンしてるけど) https://i.imgur.com/Lqs3ejR.jpg Z80 の裏レジスタは裏側のレジスタを直接触れなくてモヤモヤしたけどこいつは他のバンクのレジスタも直接さわれるからちょっと便利 PCとかもメモリー空間に見えてるプロセッサーもあったような気がするけど具体的なプロセッサー名を思い出せない >>806 それはちょっと話が違う 単にアドレッシングモードとしてゼロページやダイレクトページが短いコードで扱えると言うだけのことでメモリーはあくまでもメモリー 例えば6800はPSH AでAレジスタをスタックにプッシュ出来るけどゼロページの内容を直接
831 名前:プッシュ出来るわけじゃない 6502 のインダイレクト・インデックストYぐらいの機能ならまあベースレジスタをメモリー上に置けるとは言えるけど [] [ここ壊れてます]
832 名前:デフォルトの名無しさん mailto:sage [2022/12/11(日) 09:47:13.53 ID:B9k8N7vL0.net] >>817 しつこいのは君かと そもそも左辺値なんて言語仕様で定義されてるんだから仕様書で反論できない時点でお前の負け
833 名前:デフォルトの名無しさん mailto:sage [2022/12/11(日) 10:26:09.32 ID:2yXQoOg9d.net] IDコロコロ
834 名前:はちみつ餃子 mailto:sage [2022/12/11(日) 10:45:16.87 ID:ftKoc+Hh0.net] >>819 べつに勝ち負けを競っているわけじゃない。 根拠 (この場合は言語仕様) に基づく解釈の妥当性がそれで変わることはないので納得しない誰かがいても不都合もない。 5ch に書き込むのはただの暇つぶしだ。 どうせほかに話題もないんだからしつこくてもいいんじゃね。 反応するかどうかは知らんけど。
835 名前:デフォルトの名無しさん mailto:sage [2022/12/11(日) 11:25:34.59 ID:RuZtb54i0.net] >>821 そういうレスは流石にしつこいわ
836 名前:デフォルトの名無しさん (ワッチョイ 87bb-3TNT) mailto:sage [2022/12/11(日) 15:02:48.86 ID:51+9+dkC0.net] ブレークブレークw
837 名前:デフォルトの名無しさん mailto:sage [2022/12/11(日) 15:25:03.37 ID:jc+ZhrAU0.net] みんな仲良くしなよ
838 名前:デフォルトの名無しさん mailto:sage [2022/12/11(日) 17:37:29.66 ID:kiLLcra70.net] ポインタは卒業した。コンパイラあるんだから、ググるより書いて結果を見たほうが早いぞ。 何十回も繰り返せばわかるはず。
839 名前:デフォルトの名無しさん mailto:sage [2022/12/11(日) 17:42:03.60 ID:kiLLcra70.net] 亀レスだが機械語を知らないと、いい高級言語は書けない、ってのはわからん。 機械語と高級言語は別物だろう。 機械語を簡単に理解できる知能水準の人は、高級言語を新しく学習したときも たやすく理解できる、 というのが実態なのに、ネットでは背びれ尾ひれついて、「ハードウェアを知らないと、〜」みたいな 論調が市民権を得ているな。
840 名前:デフォルトの名無しさん mailto:sage [2022/12/11(日) 18:08:31.63 ID:3kpvLkL20.net] CやC++はアセンブラレベルが理解出来ないとそもそも実装が無茶苦茶だったりするけど ポインタとかが無いJavaとかはそこまでアセンブラレベルでどうのこうのってのは無いが それでもコンピュータ的な知識が皆無な奴は論理演算を理解出来なかったりするし ビットシフトみたいなことやってると、何でこんな書き方しているの?みたいな事言う奴出てくるからなぁw
841 名前:デフォルトの名無しさん mailto:sage [2022/12/11(日) 18:39:34.39 ID:jc+ZhrAU0.net] それがメモリー上二銅格納されてるか位は知っておいた方が良いよ 配列データをソートする時、どうやると効率的かがすぐ分かる
842 名前:デフォルトの名無しさん mailto:sage [2022/12/11(日) 18:40:10.49 ID:jc+ZhrAU0.net] メモリー上にどう格納
843 名前:デフォルトの名無しさん mailto:sage [2022/12/11(日) 18:50:45.41 ID:DhbhWaSTM.net] 2の補数表現の知識は機械語の範疇だろう スタックもそうだ Cの仕様にスタックなんて言葉は出てこないからな register指定も完全に機械語だ タイマとか割り込みを扱う場合は機械語の知識も必要だな setjmp longjmpも何が保存されてるのか理解するには機械語の知識が必要だ 要するに機械語の知識は必要だ
844 名前:はちみつ餃子 mailto:sage [2022/12/11(日) 19:18:24.83 ID:ftKoc+Hh0.net] >>825 ポインタ演算は未定義動作を簡単に引き起こせてしまうので 十分に理解できてない状態で実際に動作させてみるというのはあまりあてにならない。 ある程度は理解した上で実際にやってみたら納得しやすいってことならわかるけど。
845 名前:デフォルトの名無しさん mailto:sage [2022/12/11(日) 19:19:01.91 ID:HcYuyEaDa.net] 何十年前の話題を蒸し返してるのか知らんけど今のコンパイラは賢いからregisterとか使う必要ないぞ むしろ人間が余計な指示を出すことで効率が悪くなる可能性すらあるからハードウェアの知識が云々とかいう老害理論はパイプラインとかキャッシュとかを全て把握してから言ってくれ 君たちの時代は終わったんだよ
846 名前:デフォルトの名無しさん mailto:sage [2022/12/11(日) 19:29:49.83 ID:vn3Pz69o0.net] register なんてあてにならんもん、使ってる奴いなかったと思うよ 本当に速くしたい所は、それこそインラインアセンブラ使ったり アセンブルしたルーチン呼んでたし
847 名前:デフォルトの名無しさん mailto:sage [2022/12/11(日) 19:33:50.07 ID:HcYuyEaDa.net] >>833 コンパイラが本当に愚直な時は最適化無しで使ってたぞ
848 名前:デフォルトの名無しさん mailto:sage [2022/12/11(日) 19:38:52.22 ID:vn3Pz69o0.net] それは失礼した
849 名前:はちみつ餃子 mailto:sage [2022/12/11(日) 19:39:00.70 ID:ftKoc+Hh0.net] 少なくとも gcc とか clang くらいのモダンな処理系ではコンパイラの判断のほうが賢いわな。 低レイヤのコードだと人手で指定を付けたいときもあるかもしれんが そういう分野ではどうせ処理系の拡張がなきゃどうにもならんので register キーワード程度のあやふやなものひとつを言語仕様に入れてもあまり役に立たない。 C++ では register は削除された (機能は削除されたがキーワードとしては予約語のまま) わけだし、 C でもその内に削除されるんじゃないかな。
850 名前:デフォルトの名無しさん mailto:sage [2022/12/11(日) 20:04:06.71 ID:8Gp9TgZBa.net] register なんて要らんとか昔からずーっと言われてるけど つけたらつけたで速くなったのその目で見たやつも居るでしょ? gcc と gprof だけで頑張ってたとき確かに速くなったけど だから register は有効有用使うべきとは言わないけどね
851 名前:デフォルトの名無しさん mailto:sage [2022/12/11(日) 21:31:25.77 ID:OhnENqmv0.net] >>830 >setjmp longjmpも何が保存されてるのか理解するには機械語の知識が必要だ 基本スタックポインタとプログラムカウンタだけだと思っていましたが、まあレジスタ全部と他何を保存してましたっけ?
852 名前:ハノン mailto:sage [2022/12/11(日) 22:26:47.72 ID:OhnENqmv0.net] >>836 >C++ では register は削除された (機能は削除されたがキーワードとしては予約語のまま) auto のように別の形で復活しそうですね あと、asm はどうなりましたか?
853 名前:デフォルトの名無しさん mailto:sage [2022/12/11(日) 22:34:58.44 ID:IkAIpxjPM.net] >>838 基本レジスタ全部だな(OSが使うレジスタは含まず) 他は無いはずだけど ただ、戻り値にレジスタを使ってる場合は、そのレジスタは書き換えられてるだろう
854 名前:デフォルトの名無しさん mailto:sage [2022/12/12(月) 06:30:06.98 ID:ychPXO7Q0.net] メジャーどころのCPUは大抵、戻り値はレジスタだね
855 名前:デフォルトの名無しさん mailto:sage [2022/12/12(月) 07:28:31.07 ID:v0et11DOM.net] 呼出規約 https://ja.wikipedia.org/wiki/%E5%91%BC%E5%87%BA%E8%A6%8F%E7%B4%84
856 名前:デフォルトの名無しさん mailto:sage [2022/12/12(月) 14:27:00.05 ID:Y3syqvcfd.net] static記憶クラス指定子の理解はできますが、いざプログラムを組んでみると、使い方がわかりません。
857 名前:デフォルトの名無しさん mailto:sage [2022/12/12(月) 14:36:59.78 ID:jnrvptAKa.net] >>841 CPU関係あるか?
858 名前:デフォルトの名無しさん mailto:sage [2022/12/12(月) 14:37:08.19 ID:RmZ1ojDx0.net] わかるものを使えばいいよ
859 名前:デフォルトの名無しさん mailto:sage [2022/12/12(月) 15:05:24.79 ID:BWUj5Mhq0.net] 意訳 メジャーどころのCPU(に対応したCコンパイラ)は大抵、戻り値はレジスタだね ではないかと VCだとコンパイルオプションで変化した記憶がある
860 名前:はちみつ餃子 mailto:sage [2022/12/12(月) 16:42:43.35 ID:J7ftRWn10.net] >>844 呼び出し規約 (を含む ABI) の策定はアーキテクチャを設計したところが主導するもんじゃないのかな。 CPU の特性に反した使い方を基本にされても困るだろうし。 ざっと調べた感じだとよく使われている System V ABI はインテルが議長の委員会で決める体制っぽい。 マイクロソフト (Windows) は引数の渡し方がちょっと違う規約でやってて 文句も出てない (出てないよね?) からそんなに強い強制力があるわけでもないんだろうけど、 CPU ごとに常識的な使い方というものはあるだろう。
861 名前:デフォルトの名無しさん mailto:sage [2022/12/12(月) 16:59:57.60 ID:RmZ1ojDx0.net] B言語でも戻り値はレジスタだったし
862 名前:デフォルトの名無しさん mailto:sage [2022/12/12(月) 19:01:13.79 ID:xR631HBma.net] >>847 マイクロソフトが作ってるハードはSurfaceとかだろ?
863 名前:デフォルトの名無しさん mailto:sage [2022/12/12(月) 19:19:51.33 ID:m7KoqGgA0.net] DOS時代にグラフィックライブラリとかをMASMでアセンブルして出来たobjファイルを Cコンパイラで作ったobjとをリンクさせて Cからアセンブラのルーチン呼び出したりしてたけど、 COBOLやFORTRANで作った関数をリンクさせて Cで呼び出したりも出来るの?
864 名前:デフォルトの名無しさん mailto:sage [2022/12/12(月) 19:31:09.72 ID:BWUj5Mhq0.net] FORTRANなら呼べると思うが、COBOLは分からない FORTRANやCOBOLからならCの関数は呼べたと思う
865 名前:デフォルトの名無しさん mailto:sage [2022/12/12(月) 19:34:09.58 ID:2yJi4NkT0.net] objファイルは流石に無理があるけどDLLや静的ライブラリでも作れば良いだけでは? gfortranならexe以外にもDLL等が作成出来る
866 名前:デフォルトの名無しさん mailto:sage [2022/12/12(月) 19:37:26.25 ID:BWUj5Mhq0.net] 受け渡しのデータ型も割と近くないかな?
867 名前:デフォルトの名無しさん (ワッチョイ a701-3npV) mailto:sage [2022/12/12(月) 19:39:34.73 ID:qCai2YYC0.net] 引数の積みかたやらスタックフレームの巻き戻しはどっちがやるか等の約束事が シンプルに固定されてるDLLなら他所言語への持ち出しや持ち入れがやりやすいわね
868 名前:デフォルトの名無しさん mailto:sage [2022/12/12(月) 20:17:18.59 ID:munrOkPw0.net] >>828 まあ・・C言語を触るぐらいだから、一般的には大学とかのコンピュータサイエンス教科を 履修しているのが前提だろうから、そこはあえて省略したのですが・・ 昔の高校生は頭がよかったけど。 今は「仕事でC言語を触らせてくれる身分」になるためには基本、情報系の大卒でしょうし・・
869 名前:デフォルトの名無しさん mailto:sage [2022/12/12(月) 20:18:59.06 ID:munrOkPw0.net] >>828 配列のソートってメモリ意識しますかね。フラグメンテーションとか考えたこともないな・・。 単純に演算オーダー(log O^n とか・・)そんな感じである程度予測を立てて、あとは扱うデータ次第かと。
870 名前:はちみつ餃子 mailto:sage [2022/12/12(月) 21:58:34.14 ID:J7ftRWn10.net] アルゴリズムのレベルではある程度の効率は事前に考えるけど 断片化とかキャッシュヒットとかはチューニングが必要な状況になるまで考えないな。 むしろ考慮したくなっても意識的に忘れるようにする。 いわゆる「早すぎる最適化」の一種だから。 当然ながら必要になったときには知っている必要はあるんだけどそんな機会は多くないよね。 普通の (アルゴリズムのレベルでは充分に配慮された) プログラムを書いて極端に効率が悪いようなら メモリアロケータやキャッシュの設計のほうが悪い。 (そうは言っても目の前にあるものがそうなってるなら自分のほうが合わさないとしょうがないんだろうけどさ……)
871 名前:ハノン mailto:sage [2022/12/12(月) 22:18:23.35 ID:1Of7Vyge0.net] >>847 win32api はなぜ PASCAL にしたんでしょうかね?
872 名前:ハノン mailto:sage [2022/12/12(月) 22:21:28.35 ID:1Of7Vyge0.net] >>847 AMD64 は AMD が呼び出し規約まで決めちゃったけれども、普通は OS 屋が決めるものという気がしますけどね
873 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff3e-3TNT) mailto:sage [2022/12/12(月) 23:05:07.66 ID:J7ftRWn10.net] >>839 register というキーワードが将来に転用 (repurposing) 出来るようにというのは書かれている。 https://timsong-cpp.github.io/cppwp/n4659/diff.cpp14.dcl.dcl auto という名前が新しい用途にぴったり (少なくとも不自然ではない) なので それと同じくらいに register という名前が丁度良い場面というのは全く想像がつかないんだけど 思いもよらぬ形で上手いこと使われることはあるかもしれんね。 メンバ関数の宣言のときの default とか delete とかも考えたやつは天才じゃん……と私は思ったよ。
874 名前:デフォルトの名無しさん (ワッチョイ 7f63-KKgq) mailto:sage [2022/12/12(月) 23:08:20.90 ID:BWUj5Mhq0.net] switch文のdefaultはたまに綴りを間違えてしまうw
875 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff3e-3TNT) mailto:sage [2022/12/12(月) 23:14:51.65 ID:J7ftRWn10.net] >>861 あれの問題点は綴りを間違えてもラベルという扱いになってしまってエラーとして検出されないところなんよね。 処理系やオプションによっては使われていないラベルとして警告が出たりはするんだけど。
876 名前:デフォルトの名無しさん (スフッ Sdff-d44j) mailto:sage [2022/12/12(月) 23:35:39.10 ID:zHXfNaq5d.net] 転用とかややこしいだけだから勘弁 自動でautoだからあんまり気にすんなよ、ちなc++ではこんな意味だよと、またややこしい補足が増えるだけ むしろアンスコ付きの変な名前の方がかえってキーワードなんだなと分かりやすい、ソースは醜くなるけど、それは今更
877 名前:デフォルトの名無しさん (ワッチョイ 7fcf-FUlb) mailto:sage [2022/12/13(火) 00:08:19.11 ID:HbzfEbfW0.net] 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 で変数を宣言していた
878 名前:デフォルトの名無しさん (スフッ Sdff-d44j) mailto:sage [2022/12/13(火) 00:29:54.37 ID:+JwZZYrvd.net] 他に触る言語で明示的にauto宣言するのはbcかな、オモチャみたいなもんでPOSIXも有名無実で仕様なんぞ無いに等しいが ポインタは明示的に触らないけど、エミュる時は配列の添字にauto変数(整数)突っ込むからむしろCよりBっぽい
879 名前:デフォルトの名無しさん (ワッチョイ 7f63-KKgq) mailto:sage [2022/12/13(火) 00:36:12.95 ID:FXPyPtyo0.net] 可変長で必要に応じて伸び縮みする配列とか、 桁数制限無しの整数型や計算誤差のない実数型とか 誰か作って(人任せ)
880 名前:デフォルトの名無しさん mailto:sage [2022/12/13(火) 06:01:01.43 ID:d0KqwuA/0.net] > 桁数制限無しの整数型 つGMP
881 名前:デフォルトの名無しさん mailto:sage [2022/12/13(火) 07:11:07.69 ID:ZjPntofYa.net] >>858 当時流行ってたからだろ
882 名前:デフォルトの名無しさん mailto:sage [2022/12/13(火) 07:11:26.57 ID:4+XH+KhI0.net] >>866 >桁数制限無しの整数型 https://mevius.5ch.net/test/read.cgi/tech/1434079972/84
883 名前:デフォルトの名無しさん mailto:sage [2022/12/13(火) 13:48:16.74 ID:aee1RRAhM.net] 計算誤差の無い実数型って不可能だけどなw decimalを使うと2進数は10進数の浮動小数点数を正確に表現出来ない問題を解消できる ratio(分数)を使うと、1/3とかをそのまま保持出来るから誤差が出ない ちなみに、Common Lispは分数を凄い簡単に扱えるしbignumも使える Cでもそうなって欲しいもんだ
884 名前:デフォルトの名無しさん mailto:sage [2022/12/13(火) 13:59:48.87 ID:7PNjtjtua.net] なぜ分数や多倍長整数が必要な案件にCなんかを使うのか
885 名前:デフォルトの名無しさん mailto:sage [2022/12/14(水) 12:00:46.68 ID:erx97Ujd0.net] 虚数や複素数も扱えてたよね あまり使い道はないかも知れないが
886 名前:デフォルトの名無しさん mailto:sage [2022/12/14(水) 13:40:07.30 ID:XaqmHtNn0.net] 区間を分割して評価、終了判定がintegerpで判定とか細かい所で色々楽はできるだろう 単にスケールしても済むし、何回もやるなら任意精度でない有理型くらい構造体とgcdさえ書ければ誰でも書けるだろ 用途が違うし別にclは推さんが、標準の一つであるcltl2はあらゆるプログラマに貴重な書 浮動小数点演算に関しても複素関数の豊富なプロット載せて定義やブランチカット選びの良し悪しにかなりページ割いて、その図の生成に使ったpsコード生成コードも載ってる つーか>>866 はbcって言って欲しいだけでしょ、おまえら釣られすぎ
887 名前:デフォルトの名無しさん mailto:sage [2022/12/14(水) 14:04:41.21 ID:XaqmHtNn0.net] <cmath.h>徹底解剖みたいな文献って無いんだろうか
888 名前:デフォルトの名無しさん mailto:sage [2022/12/14(水) 14:17:47.17 ID:XaqmHtNn0.net] complex.hだった 最近触り始めたpythonでcmathだから素で間違えた んでc++はmath.hが<cmath>と…
889 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff3e-3TNT) mailto:sage [2022/12/14(水) 16:18:53.52 ID:YAu9ihh40.net] math.h と cmath とは事情がややこしいので単に名前が変わっただけとは思わないほうがいい。 math.h の関数は多相化されてなくてマクロで多相化された版は tgmath.h にある。 cmath の多相化にはテンプレートが使われている。
890 名前:デフォルトの名無しさん mailto:sage [2022/12/14(水) 19:29:35.78 ID:XaqmHtNn0.net] Cのtgmathの方が(実装的な意味で)エグいよね よくマクロの真髄みたいに色んな実装が紹介されるし、ちゃんと動いてるんだろうけど ちょっと訳がわからないものは避けたい… _Genericでスッキリ書けたりしないのだろうか
891 名前:デフォルトの名無しさん mailto:sage [2022/12/14(水) 20:13:04.33 ID:h6lYzG45d.net] ヘッダに直書きされてるから目につく機会が多いだけで、内部的にやっても同じロジックが隠れるだけか 気にし出せばきりがないようにも思う
892 名前:デフォルトの名無しさん mailto:sage [2022/12/14(水) 20:45:14.60 ID:QXbvEgmH0.net] >>874 <ccmath>?