- 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
- 2 名前:はちみつ餃子 mailto:sage [2022/08/04(木) 23:46:06.88 ID:hPtMGH660.net]
- 現時点んでの C2x 最新ドラフトはこっち
https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2912.pdf
- 3 名前:デフォルトの名無しさん mailto:sage [2022/08/04(木) 23:50:16.33 ID:nIz8Ddm70.net]
- 訂正ありがとう
- 4 名前:デフォルトの名無しさん mailto:sage [2022/08/08(月) 01:13:34.41 ID:/9Y6mnF30.net]
- n3047がC23の投票に掛けられる模様
- 5 名前:はちみつ餃子 mailto:sage [2022/08/08(月) 01:16:49.11 ID:JJ3NlnG00.net]
- おっ、こないだの会議の結果が反映されたドラフトが出てたのか。
- 6 名前:デフォルトの名無しさん mailto:sage [2022/08/13(土) 08:01:13.53 ID:
]
- [ここ壊れてます]
- 7 名前:2Qk1ejrP0.net mailto: 配列の初期化に変数使えるのはGCC拡張ってマジか・・・
これ↓ int arr[3] = { a, b, c }; 知らなかった・・・ [] - [ここ壊れてます]
- 8 名前:デフォルトの名無しさん mailto:sage [2022/08/13(土) 08:05:10.38 ID:2Qk1ejrP0.net]
- >>6
あれ? -std=c11 つけてコンパイルしてもエラーにならないな >>6は一応C標準てことでいいのかな?
- 9 名前:はちみつ餃子 mailto:sage [2022/08/13(土) 09:53:55.13 ID:RGh4OO0V0.net]
- >>6-7
言語仕様を確認してみたら、変数が静的記憶域期間を持つときは 初期化子に現れる全ての式が定数式でなければならない (変数を含められない) という制限はある。 自動記憶域期間なら初期化子に変数を使っても問題ない。 GCC でもそのような挙動になる。
- 10 名前:デフォルトの名無しさん mailto:sage [2022/08/13(土) 09:54:36.52 ID:F6UXSz0Jd.net]
- >>6
staticやグローバルにすると・・・
- 11 名前:はちみつ餃子 mailto:sage [2022/08/13(土) 10:02:52.43 ID:RGh4OO0V0.net]
- 関連する挙動を色々と試してたんだけど、
GCC では const 付きの変数の挙動が少し C++ 寄りに拡張されているっぽい。 C++ では const 付き変数の初期化子が定数式である場合にはその変数も定数式になるが、 C では単に代入できない変数という扱いのはずなんだけど、 GCC では定数式っぽい振る舞いをする場合がある (全面的に定数式扱いというわけではない) ように見える。
- 12 名前:デフォルトの名無しさん mailto:sage [2022/08/13(土) 17:52:01.55 ID:D+zbBXbXd.net]
- >>9
それが静的記憶域っちゅうこっちゃがなーー
- 13 名前:デフォルトの名無しさん mailto:sage [2022/08/13(土) 20:18:21.81 ID:F6UXSz0Jd.net]
- >>11
だからそれを言ってる
- 14 名前:デフォルトの名無しさん mailto:sage [2022/08/14(日) 00:23:10.64 ID:yTFzwOo0d.net]
- もう>>8に書いてあるじゃん
- 15 名前:デフォルトの名無しさん mailto:sage [2022/08/14(日) 00:37:06.28 ID:E4oXLohw0.net]
- あーなるほどstaticかぁ
お前らありがとん
- 16 名前:デフォルトの名無しさん mailto:sage [2022/08/14(日) 08:08:18.99 ID:BqkowVN+d.net]
- K&R Cでは配列の初期化子にも同様の制限があって
その理由は合理的だった その後ある事情で無理が通って道理が引っ込んだ
- 17 名前:デフォルトの名無しさん [2022/08/14(日) 11:44:40.04 ID:VI2zLni0a.net]
- staticには意味が複数あるのがC言語の挫折ポイントのひとつ
- 18 名前:はちみつ餃子 mailto:sage [2022/08/14(日) 12:08:31.19 ID:vdIvBFYd0.net]
- 予約語を増やさないという方針自体は互換性を損なわないために真っ当なものだと思うけど、
名前がかぶったら単に一括置換で対処できる程度のことでもあるしなぁ……。
- 19 名前:デフォルトの名無しさん mailto:sage [2022/08/14(日) 12:20:02.25 ID:1rNkdimaa.net]
- >>16
そんなので挫折するならもっと前に挫折するだろw
- 20 名前:デフォルトの名無しさん mailto:sage [2022/08/14(日) 12:34:09.99 ID:+OkjgujJ0.net]
- 挫折自慢大会が開催されました
- 21 名前:ハノン mailto:sage [2022/08/14(日) 13:14:34.32 ID:GttZqyyI0.net]
- Scheme 手習い、を挫折しました、いつ再トライしようかしら?
- 22 名前:はちみつ餃子 mailto:sage [2022/08/14(日) 15:10:21.65 ID:vdIvBFYd0.net]
- 自分の性分に合ったものは気合いを入れなくても割とスルっと出来ちゃったりするし、
そういうところから周りに広げていく形でやってけばいいんでないかな。 業務で必要とかならそうも言っておれんだろうけど。
- 23 名前:デフォルトの名無しさん [2022/08/14(日) 16:55:08.09 ID:YzvfyuVN0.net]
- Kotlinもよろしく
- 24 名前:デフォルトの名無しさん [2022/08/14(日) 17:14:45.00 ID:b9F5IowR0.net]
- 完全な文脈自由文法で設計されていれば、コンパイラも簡単に作れるけどな。
しかし、Javaのその特性は完全に無視され、誰にも気づかれなかった。 お前らも気づいていない。
- 25 名前:はちみつ餃子 mailto:sage [2022/08/14(日) 21:52:34.16 ID:vdIvBFYd0.net]
- 構文解析だけ簡単でもコンパイラが簡単なわけではないが……。
部分的にでも簡単であるに越したことは無いけどさ。
- 26 名前:デフォルトの名無しさん mailto:sage [2022/08/15(月) 06:53:02.58 ID:m+99U1QQd.net]
- いや宣言文→実行部のように決まっている文脈ガチガチのほうがコンパイラは作りやすい
- 27 名前:デフォルトの名無しさん mailto:sage [2022/08/15(月) 08:31:44.94 ID:zxOEKBbO0.net]
- 今時字句解析とか構文解析で難しいとかないでしょ
それなりのツールもあるからBNF書ければ自動生成できたりするし
- 28 名前:はちみつ餃子 mailto:sage [2022/08/15(月) 09:21:08.58 ID:DfKndVH30.net]
- >>26
言語仕様のほうも処理しやすいように寄せてきてるからだよ。 パーサジェネレータを前提として設計された言語仕様ならパーサジェネレータで処理しやすいのは当たり前の話。
- 29 名前:デフォルトの名無しさん mailto:sage [2022/08/15(月) 09:27:22.60 ID:zxOEKBbO0.net]
- >>27
難しいって一体どんな言語仕様を想定してるんだ?w
- 30 名前:はちみつ餃子 mailto:sage [2022/08/15(月) 09:47:41.49 ID:DfKndVH30.net]
- >>28
FORTRAN 77
- 31 名前:デフォルトの名無しさん mailto:sage [2022/08/15(月) 10:35:55.74 ID:zxOEKBbO0.net]
- >>29
字句解析と構文解析を一体でやらないといけないから面倒ではあるけど難しいという程じゃなくね? そもそも人間にとっても分かりにくい言語仕様を採用するのもどうかと思うが
- 32 名前:はちみつ餃子 mailto:sage [2022/08/15(月) 11:11:29.28 ID:DfKndVH30.net]
- >>30
今の主要なプログラミング言語はそう (処理段階の分離が極端に難しい仕様には) ならなかったという話をしてる。 だから昔のものから例になりそうなものを抽出しただけで、この頃の知見のまま設計された大きな言語があったら 現代的なツールでも扱いにくいだろうということ。
- 33 名前:デフォルトの名無しさん mailto:sage [2022/08/15(月) 11:28:00.05 ID:zxOEKBbO0.net]
- >>31
だから多少面倒なだけだろ そもそもスペース無視するとか予約語を識別子に使えるとか人間側にも優しくない仕様ででかい言語仕様とか頭おかしい
- 34 名前:はちみつ餃子 mailto:sage [2022/08/15(月) 11:39:32.94 ID:DfKndVH30.net]
- >>32
漠然と変だとは思ってたとしても、知見の確立がなかったとしたらそのまま進むしかしょうがないだろう。 まあ、そうなっていない世界でのもしもの話、実際に無かった以上は想像でしかないけどな。
- 35 名前:デフォルトの名無しさん mailto:sage [2022/08/15(月) 12:01:53.74 ID:zxOEKBbO0.net]
- >>33
そもそもFORTRAN77以前でも DO 100 I = 1. 5 なんて言う「代入文」を書く奴なんてほとんどいなかったわけで知見が確立しないまま言語仕様だけでかくなるとかまずありえんわ まあ妄想に浸りたいだけなら勝手にやっててくださいな
- 36 名前:デフォルトの名無しさん mailto:sage [2022/08/15(月) 12:48:46.30 ID:RzREpsfh0.net]
- ほとんどいない笑
たまにはいたんですね?
- 37 名前:デフォルトの名無しさん mailto:sage [2022/08/15(月) 13:28:30.95 ID:zxOEKBbO0.net]
- >>35
タイプミスとか、難読大会とか 想像力ないの?
- 38 名前:デフォルトの名無しさん [2022/08/16(火) 10:07:24.32 ID:6bNCuhdm0.net]
- 割り込みルーチン内で速度を稼ぐためにグローバル変数をローカル変数にコピーして
それを元に色々処理しようとするとうまくいかない グローバル変数を直接使って処理するとうまくいく こういうことはありえるのかな?
- 39 名前:デフォルトの名無しさん mailto:sage [2022/08/16(火) 10:11:26.14 ID:wezFOLPc0.net]
- ・・・グローバル変数の書き戻し忘れとか?
- 40 名前:デフォルトの名無しさん [2022/08/16(火) 11:20:38.26 ID:2x3mrzZQa.net]
- ポインタ便利ですね
- 41 名前:デフォルトの名無しさん mailto:sage [2022/08/16(火) 11:58:39.88 ID:dXh796NKd.net]
- すっごく抽象的でさっぱりわからんw
なんの割り込み? どううまくいかない?
- 42 名前:はちみつ餃子 mailto:sage [2022/08/16(火) 14:05:35.67 ID:+o+ePBjP0.net]
- >>37
書いたプログラムのロジックは誤ってないと仮定して、 コンパイラによる最適化が割り込みに配慮しないなら思ったような動作にならないということはあり得る。 ある変数が途中で変更されることはないと確信できる状況なら レジスタにロード済みの値を使いまわしたりするのはごく普通の動作。 場合によっては定数にまで畳み込まれることもある。 だけど、割り込みはそうしたメインの流れと関係なく問答無用でどこにでも割り込むから齟齬が生じる。 C99 までは割り込みや平行については言語仕様ではあまり取り決めず、 動作の詳細な部分は処理系まかせなものの volatile キーワードを付けた変数は最適化が抑制されるとか、 処理系の拡張で属性指定を付けれるとかいった機能を利用してどうにかしてきた。 (たぶん POSIX にはもうちょっと詳しい規定がありそうだと思うけど私はよく知らない。) C11 以降はスレッドまわりの整備が進んだので割り込みでも活用できる部分は多いと思うんだけど、 オプショナルな仕様なので C11 の処理系として必須なわけではないんよ。 おそらくは使っている処理系・実行環境で使っているお決まりのパターンがあると思うからそういうのを探して 真似するのが手っ取り早いと思う。
- 43 名前:デフォルトの名無しさん mailto:sage [2022/08/16(火) 19:21:50.20 ID:7tUZ32LZd.net]
- そういやそんな問題に悩んでた奴でvolatileの存在知らない奴がいたな
…大丈夫だよね?
- 44 名前:デフォルトの名無しさん (アウアウウー Saa5-oUG4) mailto:sage [[ここ壊れてます] .net]
- volatile で全ての問題が解決する訳じゃないけどな
知らないのはまずいな
- 45 名前:デフォルトの名無しさん [2022/08/17(水) 15:44:25.95 ID:VZh9Cr0g0.net]
- switch文がポンコツ過ぎて二分探索のif文で記述したくなります
case設定がへたくそなのでしょうか?
- 46 名前:デフォルトの名無しさん mailto:sage [2022/08/17(水) 16:18:24.97 ID:vNydwVZ40.net]
- C++にすらないoperator switch caseでも欲しいのかな
- 47 名前:デフォルトの名無しさん mailto:sage [2022/08/17(水) 16:34:24.35 ID:mlh+/a6xd.net]
- またも抽象化し過ぎの質問…
switchが上手くはまらなかったらelse if地獄でいいんだよ
- 48 名前:はちみつ餃子 mailto:sage [2022/08/17(水) 18:48:10.50 ID:ito9w61P0.net]
- >>44
具体的に何が不満なの?
- 49 名前:デフォルトの名無しさん mailto:sage [2022/08/17(水) 19:06:06.04 ID:cXiq2BCR0.net]
- スキルを磨く以外に、王道はありません
- 50 名前:デフォルトの名無しさん mailto:sage [2022/08/17(水) 19:37:59.93 ID:GqH3uV+md.net]
- 具体的にどうポンコツなのかわからんけど
例えばaが1だったら処理1、2だったら処理2、3-15だったら処理3、16なら処理4 それ以外は処理default if( a == 1 ){ 処理1 }else if( a == 2 ){ 処理2 }else if( a <= 15 ){ 処理3 }else if( a == 16 ){ 処理4 }else{ 処理default } こんなんで充分だよ
- 51 名前:デフォルトの名無しさん mailto:sage [2022/08/17(水) 21:42:31.43 ID:ZlUvKbke0.net]
- 流れを綺麗にしたいなら
enumやマクロでシンボリックな定数を定義、ロジックはビット演算に埋め込め
- 52 名前:デフォルトの名無しさん mailto:sage [2022/08/17(水) 22:05:39.48 ID:ISeM0IbeH.net]
- >>42
volatile で保証された気分になっている方が問題、ちゃんと pthread を使えよ
- 53 名前:はちみつ餃子 mailto:sage [2022/08/17(水) 22:10:35.67 ID:ito9w61P0.net]
- 割り込みは並行 (または並列) とは違うので pthread ほどの保証は過剰だと思う。
- 54 名前:デフォルトの名無しさん mailto:sage [2022/08/17(水) 22:19:02.41 ID:vZEBwtyc0.net]
- フォールスルーしないなら if else if else if .... って重ねてってもたいして変わらんしね
- 55 名前:デフォルトの名無しさん mailto:sage [2022/08/17(水) 22:23:36.57 ID:ZlUvKbke0.net]
- パーサとか書くなら抽象化のコストに見合うけど、もしそれほど複雑でないなら
caseラベルは各分枝に付き一つにしてしまい、分類は外部委託してしまうが楽 switch(var)→switch(CLASSFY(var)) case 'A': actionA;... パターン: アクション … の並びに落とし込むのが難しいなら、多分switchを使うべき問題ではない
- 56 名前:デフォルトの名無しさん mailto:sage [2022/08/17(水) 22:32:08.07 ID:cXiq2BCR0.net]
- swich case は条件に応じて分岐するジャンプテーブルなのでどの条件に対しても同じ重さ
if else if は書かれた順に評価し、実行するので、起こりそうな条件を前に持ってくると効率化できる、かも
- 57 名前:デフォルトの名無しさん mailto:sage [2022/08/17(水) 23:03:29.34 ID:YK1jCeWgM.net]
- >>55
switchも連続比較する事が基本で、caseラベルの値の最小値と最大値が一定の範囲内だったら最適化でジャンプテーブルになるかもってだけでしょ 絶体にテーブルジャンプさせたければ、自前でやるしかない
- 58 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 813e-5Ix7) mailto:sage [[ここ壊れてます] .net]
- リッチな処理系なら switch も常にただのテーブルということはない。 状況に応じて最適化は入る。
ただ、頻出する分岐がどれなのか予測してくれるほど十分に賢くは無いので 条件があり得る頻度によってチューニングが必要なら if に置き換えるしかしょうがないな。 GCC だとプロファイルを取ってその成果をもとに最適化することも出来る。 頻出する条件を __builtin_expect で指定するとその分岐を優先的に検査する (ようなコードを生成する) という便利機能もある。 手作業で微調整するのは不毛な感じがするから使えるものならコンパイラの賢い機能に頼るのもアリだと思う。 (試したことがないから細かいことは知らない。 たいした効果は無いかもしれない。)
- 59 名前:デフォルトの名無しさん mailto:sage [2022/08/18(木) 04:30:48.90 ID:X/mZUHYK0.net]
- まあ確かに>>49を
switch(a){ case 1: 処理1; break; case 2: 処理2; break; case 3..15: 処理3; break; case 16: 処理4; break; default: 処理default } みたいに書ければなぁって思わなくもない
- 60 名前:デフォルトの名無しさん mailto:sage [2022/08/18(木) 11:21:05.54 ID:ZfnRi5ov0.net]
- >>58
GCCの拡張だけどあるよ Clangでも使える https://wandbox.org/permlink/XQ2uCo7afhhQRyzH
- 61 名前:デフォルトの名無しさん mailto:sage [2022/08/18(木) 11:23:58.91 ID:C4YsUD/kd.net]
- たまーに、いちいちbreak文を書かなきゃいけないのがダルいなって思うことはあるな
ちょっと自分が作業中断すべきときかなって
- 62 名前:デフォルトの名無しさん mailto:sage [2022/08/18(木) 11:41:19.30 ID:DF4FCk1vd.net]
- >>59
コンパイル時定数なら利益なくね? case:3 case:4...case:15に展開するRANGE(3, 15)マクロで十分
- 63 名前:デフォルトの名無しさん mailto:sage [2022/08/18(木) 11:44:02.06 ID:u9P7LJR3a.net]
- >>59
なるほどさすが GCC やね、標準に取り込んで欲しいわ
- 64 名前:デフォルトの名無しさん mailto:sage [2022/08/18(木) 11:49:28.51 ID:DF4FCk1vd.net]
- caseラベルの値を数値(範囲)として扱うという発想が無かった
もう素直に比較しろよ
- 65 名前:デフォルトの名無しさん mailto:sage [2022/08/18(木) 11:52:35.74 ID:p/limWqpa.net]
- Ruby厨登場
↓
- 66 名前:デフォルトの名無しさん mailto:sage [2022/08/18(木) 13:33:09.96 ID:FzMciMIo0.net]
- caseは単なるラベル
- 67 名前:デフォルトの名無しさん (テテンテンテン MM26-6e26) mailto:sage [[ここ壊れてます] .net]
- for文の中でswitch使うと、forを抜けるbreakを書けないのがクソ
気付かず使うとデバッグ困難なバグになる落とし穴 switchをifにするか、forの外にgotoで飛ばすしかない switch文はC言語最大の設計ミス
- 68 名前:デフォルトの名無しさん mailto:sage [2022/08/18(木) 15:55:41.52 ID:C4YsUD/kd.net]
- gotoは悪って前提だな
gotoレス原理主義者?
- 69 名前:デフォルトの名無しさん mailto:sage [2022/08/18(木) 15:58:47.22 ID:X/mZUHYK0.net]
- そもそも多重ループからの脱出もできないし、ややこしい奴は素直にgoto使えってことだろ
- 70 名前:デフォルトの名無しさん mailto:sage [2022/08/18(木) 20:24:47.46 ID:+rK0/pUYd.net]
- switchからの脱出がbreakなのがおかしい
- 71 名前:デフォルトの名無しさん mailto:sage [2022/08/18(木) 20:48:40.52 ID:SQwD8GPSH.net]
- >>69
for からの脱出が break while/do while からの脱出が break で、あれば、 switch からの脱出も break であっても不適当とはいえないのではないですか?
- 72 名前:デフォルトの名無しさん [2022/08/18(木) 23:03:17.54 ID:1nHnTkCL0.net]
- 行儀良くまじめなんてできやしなかった
夜の校舎窓ガラス壊してまわった 逆らい続けあがき続けた早く自由になりたかった ひとつだけわかっていたこと この支配からの~break♪
- 73 名前:デフォルトの名無しさん mailto:sage [2022/08/18(木) 23:06:15.16 ID:4f/YBTxPM.net]
- Javaのswitch式を逆輸入して欲しい
評判が良いのかどうか分からんけど
- 74 名前:デフォルトの名無しさん [2022/08/19(金) 00:43:51.91 ID:Djh9jYCCa.net]
- endfor とか endwhile とか endcase とか悪夢でしかない
- 75 名前:デフォルトの名無しさん mailto:sage [2022/08/19(金) 01:50:19.99 ID:FEOcjYNtd.net]
- >>70
switchはループ制御文ではないのになんでwhileやforと同じなのか
- 76 名前:デフォルトの名無しさん (ワッチョイ c202-mhOm) mailto:sage [[ここ壊れてます] .net]
- break は今いるブロック (波括弧といてもいい) から一つ外のブロックに出る
という意味を持つ
- 77 名前:はちみつ餃子 mailto:sage [2022/08/19(金) 09:19:24.91 ID:FT/EuRcZ0.net]
- >>75
そんなわけないだろ。
- 78 名前:デフォルトの名無しさん mailto:sage [2022/08/19(金) 10:12:45.49 ID:FEOcjYNtd.net]
- それならif文からも脱出できるはずだができない
あくまでswitchが特例でループ文扱いされてるので脱出できる
- 79 名前:はちみつ餃子 mailto:sage [2022/08/19(金) 10:34:49.15 ID:FT/EuRcZ0.net]
- switch やループ構文はブロックとは独立した構文で、
これらを使うときにブロックを作らないことも出来るし、 逆に関係ないところでブロックを作ることも出来るので break をブロックと対応付けさせると変なことになるんだよな。 たとえば以下のコードでの break は実際には switch を抜けるだけなので printf は実行されるが、 ブロックを抜けるほうが自然だと思うか? #include <stdio.h> int main(void) { { switch(1) case 1: break; printf("hello\n"); } }
- 80 名前:デフォルトの名無しさん mailto:sage [2022/08/19(金) 12:00:39.57 ID:FEOcjYNtd.net]
- そんな極端な例でなくても…
case 1: if( x < 4 ){ ……… break; } ……… break; 普通によく書くと思うが このif文の中のbreakでもちゃんと一番内側のswitch文の外に飛んでいく switch(k){ case 1: { int tmp_x; //この中だけで使う一時変数 ……… break; } case 2: ……… } こんな書き方でも(あまりよくないけど)ブロックは無視してswitch文の外に飛んでいく
- 81 名前:デフォルトの名無しさん [2022/08/19(金) 18:10:20.82 ID:opjWCie4a.net]
- for の中の if の中の break で単に if から脱出されても
おまえなにしとんねん 開いた口が塞がらない状態になる罠
- 82 名前:デフォルトの名無しさん [2022/08/19(金) 18:16:48.08 ID:opjWCie4a.net]
- do{
やりたいこと }while(0); っていう構造に変換するマクロは良く使われるが switch(0) default: { やりたいこと } なんかもアリなんだな
- 83 名前:デフォルトの名無しさん mailto:sage [2022/08/20(土) 00:31:59.15 ID:YrrCECg9M.net]
- >>81
switchの方は初めて見た! 知らずに見たらちょっと考えちゃうよw
- 84 名前:デフォルトの名無しさん mailto:sage [2022/08/20(土) 13:41:46.51 ID:DoG0cN1P0.net]
- 考えるな
感じるんだ
- 85 名前:デフォルトの名無しさん mailto:sage [2022/08/20(土) 13:47:51.88 ID:zH67Kdp1d.net]
- 俺は()で囲むな
- 86 名前:デフォルトの名無しさん [2022/08/21(日) 07:14:13.14 ID:sPdtHxRX0.net]
- エロい人「割り込みの中で関数呼ぶな
なぜ??
- 87 名前:デフォルトの名無しさん mailto:sage [2022/08/21(日) 07:26:44.64 ID:calK6kMNd.net]
- バカな会社で働いてるから
- 88 名前:デフォルトの名無しさん mailto:sage [2022/08/21(日) 07:46:27.87 ID:3JIuIXQv0.net]
- >>85
環境によるけど割り込みに専用のスタック使ってるシステムとかだとそのスタックサイズはそれほど大きくなかったりするからかもね てかそのエロい人に聞けよ
- 89 名前:デフォルトの名無しさん mailto:sage [2022/08/21(日) 08:14:56.03 ID:lk6Yo6Bld.net]
- 再入可能でない関数ならわかるな
- 90 名前:デフォルトの名無しさん [2022/08/21(日) 09:42:18.04 ID:j3ukytx2a.net]
- stack8段しか無いcpuか
- 91 名前:デフォルトの名無しさん mailto:sage [2022/08/21(日) 10:25:51.63 ID:calK6kMNd.net]
- 割込はなるべく速く返さないといけないので
関数呼び出しのオーバーヘッドを嫌うというのもある
- 92 名前:デフォルトの名無しさん mailto:sage [2022/08/21(日) 16:28:21.98 ID:lk6Yo6Bld.net]
- だとすると>>86でFAだな
- 93 名前:デフォルトの名無しさん [2022/08/22(月) 09:18:01.26 ID:rymTPk3V0.net]
- 微妙なタイミング調整の_nop()マクロをオプティマイザが勝手に除去するのだがwwwwwwwwww
どうすりゃいいのよ
- 94 名前:デフォルトの名無しさん (ワッチョイ 7f01-cac/) mailto:sage [[ここ壊れてます] .net]
- >>92
インラインアセンブラ そもそも今時命令実行タイミングに依存する構成にするなよ...
- 95 名前:デフォルトの名無しさん mailto:sage [2022/08/22(月) 10:11:25.02 ID:xRj4VImad.net]
- Z80や6800でそんなことしてたけど
今時のCPUはnopでさえ速度が変動するからな
- 96 名前:はちみつ餃子 mailto:sage [2022/08/22(月) 10:15:31.51 ID:/BwQkwng0.net]
- インラインアセンブラも最適化の対象になることがある。
現代的な開発環境なら intrinsic 関数が提供されてないか?
- 97 名前:デフォルトの名無しさん [2022/08/22(月) 11:43:22.34 ID:sosiPY3F0.net]
- 最適化するなよw
そういうのを消すための最適化だろw
- 98 名前:デフォルトの名無しさん [2022/08/22(月) 13:53:48.03 ID:KX6mg0Ola.net]
- 最適化したら >>96 が消えました
- 99 名前:デフォルトの名無しさん mailto:sage [2022/08/25(木) 11:33:41.80 ID:sT5+wQDE0.net]
- インライン記述じゃなく別個にアセンブラソースファイルに書いてアセンブルしろってことだな。
- 100 名前:デフォルトの名無しさん mailto:sage [2022/08/25(木) 11:49:07.60 ID:iqB4j8J+0.net]
- スカイネット 「環境の最適化のため、人類を消去しました」
|

|