前スレ
C++相談室 part158
https://mevius.5ch.net/test/read.cgi/tech/1645239402/
探検
C++相談室 part160
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2022/04/15(金) 08:39:32.42ID:WMzvufu2339デフォルトの名無しさん
2022/04/24(日) 11:58:32.81ID:0sNKJUFw >>338
もう自分が何を書いているのかも分からないレベルで狂ってますね
もう自分が何を書いているのかも分からないレベルで狂ってますね
340デフォルトの名無しさん
2022/04/24(日) 12:01:55.19ID:sqHO6Ex+ aがポインタアならa[i]は*(a + i)と同じ
b[i][j][k]と書く代わりに *(b + k + _countof(b[0][0]) * j + (_countof(b[0][0]) * _countof(b[0])) * i) と書くことができうる
から[]はポインタアについては無くても良くね
c.dは(&c)->dと同じ
c.d.e.f.g.hと書く代わりは(&(c.d.e.f.g))->hぐらいしか存在しない(d, e, f, g, hは入れ子になった構造体メンバ名
が
c->d->e->f->g->hなら (*((*((*((*((*c).d).e)).f))g)).h と書くことができうる
(d, e, f, g, hは直接的な入れ子ではないが関連を持つ構造体のメンバ名
から->は無くても良くね
以上C/C++における2大無くても良くねなぜ有るんだろう事案
b[i][j][k]と書く代わりに *(b + k + _countof(b[0][0]) * j + (_countof(b[0][0]) * _countof(b[0])) * i) と書くことができうる
から[]はポインタアについては無くても良くね
c.dは(&c)->dと同じ
c.d.e.f.g.hと書く代わりは(&(c.d.e.f.g))->hぐらいしか存在しない(d, e, f, g, hは入れ子になった構造体メンバ名
が
c->d->e->f->g->hなら (*((*((*((*((*c).d).e)).f))g)).h と書くことができうる
(d, e, f, g, hは直接的な入れ子ではないが関連を持つ構造体のメンバ名
から->は無くても良くね
以上C/C++における2大無くても良くねなぜ有るんだろう事案
341デフォルトの名無しさん
2022/04/24(日) 12:09:24.01ID:GIt5p4as 実装が楽だったから
それ以上の理由は考えるだけ無駄だと思うよ
それ以上の理由は考えるだけ無駄だと思うよ
342デフォルトの名無しさん
2022/04/24(日) 12:13:57.09ID:sqHO6Ex+ まつが
えますたorz
誤: c->d->e->f->g->hなら (*((*((*((*((*c).d).e)).f))g)).h と書くことができうる
正: c->d->e->f->g->hなら (*((*((*((*((*c).d)).e)).f))g)).h と書くことができうる
また、c.d.e.f.g.hは(後置演算子が優先度が高いことを利用して極力括弧を無くすとして
&(&(&(&(&c->d)->e)->f)->g)->h
になるかも、、、
えますたorz
誤: c->d->e->f->g->hなら (*((*((*((*((*c).d).e)).f))g)).h と書くことができうる
正: c->d->e->f->g->hなら (*((*((*((*((*c).d)).e)).f))g)).h と書くことができうる
また、c.d.e.f.g.hは(後置演算子が優先度が高いことを利用して極力括弧を無くすとして
&(&(&(&(&c->d)->e)->f)->g)->h
になるかも、、、
343デフォルトの名無しさん
2022/04/24(日) 12:15:41.16ID:0IQhRvgj344デフォルトの名無しさん
2022/04/24(日) 12:17:02.35ID:FAumgQ8n おまえらに規格の話しをしたのが間違いだった
いつの間にかポインタの話になってて笑って草生えそう
いつの間にかポインタの話になってて笑って草生えそう
345デフォルトの名無しさん
2022/04/24(日) 12:19:07.37ID:sqHO6Ex+ イカン駄目かorz
&を->より優先解釈させる必要があるからこうなりそう……
(&((&((&((&((&c)->d))->e))->f))->g))->h
やっぱミニマリスズムを貫くとかえって物量が増える感じに
&を->より優先解釈させる必要があるからこうなりそう……
(&((&((&((&((&c)->d))->e))->f))->g))->h
やっぱミニマリスズムを貫くとかえって物量が増える感じに
346デフォルトの名無しさん
2022/04/24(日) 12:19:14.73ID:6LU2OPGi >>340
そうではなく
ptrが構造体へのポインタの時に
(*ptr).nameと書かなくとも
ptr.nameと書くことにしても型から判断判別可能だから
ptr->nameという記法を用意する必要なかった
って話でしょう
そして短く書けてわかりやすくてオペレータを増やす必要ないメリット
そうではなく
ptrが構造体へのポインタの時に
(*ptr).nameと書かなくとも
ptr.nameと書くことにしても型から判断判別可能だから
ptr->nameという記法を用意する必要なかった
って話でしょう
そして短く書けてわかりやすくてオペレータを増やす必要ないメリット
347デフォルトの名無しさん
2022/04/24(日) 12:25:11.79ID:sqHO6Ex+ c.d.e.f.g.h
が旧来のC++で言うところの
c.d.e.f.g.h
c.d.e.f.g->h
c.d.e.f->g.h
c.d.e.f->g->h
c.d.e->f.g.h
...
c->d->e->f->g->h
(計2^5通り)のどれな意味のかが暗黙になって機械任せになってしまったら
コードを書く方も読む方も疲弊して転職しちゃいそう……
が旧来のC++で言うところの
c.d.e.f.g.h
c.d.e.f.g->h
c.d.e.f->g.h
c.d.e.f->g->h
c.d.e->f.g.h
...
c->d->e->f->g->h
(計2^5通り)のどれな意味のかが暗黙になって機械任せになってしまったら
コードを書く方も読む方も疲弊して転職しちゃいそう……
348デフォルトの名無しさん
2022/04/24(日) 12:31:08.83ID:S3EB6hln >>312の話ですね
戻しましょうか
戻しましょうか
349デフォルトの名無しさん
2022/04/24(日) 12:37:13.82ID:owNaeWLI350デフォルトの名無しさん
2022/04/24(日) 12:57:12.43ID:sqHO6Ex+ まあPerlだと確かに$a->[$i]は${$a}[$i]と全く同じ意味なので$記法だけで困らないが
C/C++だと違うやんけ「.」と「->」に言語の存在意義レベルで重要な違いが生じているやんけ、
C/C++だと違うやんけ「.」と「->」に言語の存在意義レベルで重要な違いが生じているやんけ、
351デフォルトの名無しさん
2022/04/24(日) 13:04:18.44ID:grh6oY7G perlに限らずほぼ全てのプログラミング言語でxがポインタの時もx.yと記述
ポインタか否かは自明なのだからx->y記述は不要
ポインタか否かは自明なのだからx->y記述は不要
352デフォルトの名無しさん
2022/04/24(日) 13:09:38.20ID:rPlVOsWU 歴史的経緯でそうなった以上の理由はなさそう
353デフォルトの名無しさん
2022/04/24(日) 13:13:17.04ID:Kb2VRi8y SEHの話はどうなったん?
納得行ってくれたん?
納得行ってくれたん?
354デフォルトの名無しさん
2022/04/24(日) 13:33:09.07ID:7qMJqWpF >>353
どうでもいい話だから流しておけばいいんだよ。
どうでもいい話だから流しておけばいいんだよ。
355デフォルトの名無しさん
2022/04/24(日) 13:43:07.35ID:bl0Rasps >>349
型推論とか導入したくなったときにこまりそう
型推論とか導入したくなったときにこまりそう
356デフォルトの名無しさん
2022/04/24(日) 13:43:26.65ID:DUFf34zT まとめ
・SEHはMicrosoftによるC言語に対する拡張機能で例外を扱えるようにする
・C++には例外機構があるためSEHを使う必要はなくMicrosoftもそう推奨
・当然ほぼ同じ仕組みなので両方サポートするコンパイラは一部を共有しうる
結論
「C++例外とSEHは同じレベルで異なるものであるため、片方を使って別の片方を実装することは有り得ない」
・SEHはMicrosoftによるC言語に対する拡張機能で例外を扱えるようにする
・C++には例外機構があるためSEHを使う必要はなくMicrosoftもそう推奨
・当然ほぼ同じ仕組みなので両方サポートするコンパイラは一部を共有しうる
結論
「C++例外とSEHは同じレベルで異なるものであるため、片方を使って別の片方を実装することは有り得ない」
357デフォルトの名無しさん
2022/04/24(日) 13:52:38.36ID:fO0RhYFQ ということにしたいのですね。
358デフォルトの名無しさん
2022/04/24(日) 14:37:26.25ID:GcKW+309 結局実装の話しをせずにはおれんのだよなあ
359蟻人間 ◆T6xkBnTXz7B0
2022/04/24(日) 14:46:41.37ID:0sr3C4Gh SEHはアセンブリ・機械語レベルでも定義されている。
C++コンパイラ側でSEHのアセンブリを埋め込むことも可能。
C++コンパイラ側でSEHのアセンブリを埋め込むことも可能。
360デフォルトの名無しさん
2022/04/24(日) 14:53:29.69ID:hfCsztEI 論点すり替えのゴリホーモきっしょ
361蟻人間 ◆T6xkBnTXz7B0
2022/04/24(日) 14:59:44.05ID:0sr3C4Gh 【確認方法】
1. MinGW-w64からx86_64-8.1.0-release-posix-seh-rt_v6-rev0.7zをダウンロードする。
2. 7-Zipを使ってx86_64-8.1.0-release-posix-seh-rt_v6-rev0.7zを展開。
3. mingw64\binフォルダで次のような内容のa.cppを作成する。
#include <stdio.h>
int *f(void) { return NULL; }
int main(void) {
try {
throw f();
} catch (...) {
printf("OK\n");
}
return 0;
}
4. 「g++ -S -O0 a.cpp -o a.asm」を実行する。
5. ファイル「a.asm」が吐き出されている。
ファイル内容は「.seh_setframe」「.seh_endprologue」「__gxx_personality_seh0」などの文字列を含んでいる。
6. gccのソースを検索すると「gxx_personality_seh0」という関数がSEHで実装されているのが確認できる。
https://github.com/gcc-mirror/gcc/blob/16e2427f50c208dfe07d07f18009969502c25dc8/libstdc%2B%2B-v3/libsupc%2B%2B/eh_personality.cc#L804
https://github.com/gcc-mirror/gcc/blob/16e2427f50c208dfe07d07f18009969502c25dc8/libstdc%2B%2B-v3/libsupc%2B%2B/eh_personality.cc#L355
1. MinGW-w64からx86_64-8.1.0-release-posix-seh-rt_v6-rev0.7zをダウンロードする。
2. 7-Zipを使ってx86_64-8.1.0-release-posix-seh-rt_v6-rev0.7zを展開。
3. mingw64\binフォルダで次のような内容のa.cppを作成する。
#include <stdio.h>
int *f(void) { return NULL; }
int main(void) {
try {
throw f();
} catch (...) {
printf("OK\n");
}
return 0;
}
4. 「g++ -S -O0 a.cpp -o a.asm」を実行する。
5. ファイル「a.asm」が吐き出されている。
ファイル内容は「.seh_setframe」「.seh_endprologue」「__gxx_personality_seh0」などの文字列を含んでいる。
6. gccのソースを検索すると「gxx_personality_seh0」という関数がSEHで実装されているのが確認できる。
https://github.com/gcc-mirror/gcc/blob/16e2427f50c208dfe07d07f18009969502c25dc8/libstdc%2B%2B-v3/libsupc%2B%2B/eh_personality.cc#L804
https://github.com/gcc-mirror/gcc/blob/16e2427f50c208dfe07d07f18009969502c25dc8/libstdc%2B%2B-v3/libsupc%2B%2B/eh_personality.cc#L355
362デフォルトの名無しさん
2022/04/24(日) 15:10:50.52ID:6P7FGMNI それは違うな
まずC++の例外のセマンティクスは定まっており実装はそれを厳守せねばならない
次にSEHのセマンティクスはC++の例外とは微妙に異なる
したがってC++の例外をSEHで実装するのは不可能
ただし実装コードの一部共有は可能
その一部共有コードの出自がSEHであればsehと名の付くものが存在しても構わない
しかしそれを持ってC++の例外がSEHで実装されているとは言わない
この点を明確に区別できない人はヤバい
まずC++の例外のセマンティクスは定まっており実装はそれを厳守せねばならない
次にSEHのセマンティクスはC++の例外とは微妙に異なる
したがってC++の例外をSEHで実装するのは不可能
ただし実装コードの一部共有は可能
その一部共有コードの出自がSEHであればsehと名の付くものが存在しても構わない
しかしそれを持ってC++の例外がSEHで実装されているとは言わない
この点を明確に区別できない人はヤバい
364デフォルトの名無しさん
2022/04/24(日) 15:19:08.93ID:bl0Rasps365デフォルトの名無しさん
2022/04/24(日) 15:19:51.72ID:DF/Hs/9f レイヤーが明白に異なるね
SEHでC++の例外を実装したとは言わない
C++の例外にも適用できるように拡張したアセンブリコードを共有しただけだね
これは逆の視点でも捉えることができて元々C++例外のみ対応をSEHの例外にも適用できるように拡張したアセンブリコードを共有しても同じこと
SEHでC++の例外を実装したとは言わない
C++の例外にも適用できるように拡張したアセンブリコードを共有しただけだね
これは逆の視点でも捉えることができて元々C++例外のみ対応をSEHの例外にも適用できるように拡張したアセンブリコードを共有しても同じこと
366ハノン ◆QZaw55cn4c
2022/04/24(日) 15:20:22.47ID:pSkiKAbi367蟻人間 ◆T6xkBnTXz7B0
2022/04/24(日) 15:25:25.72ID:gt27lZWI アセンブリレベルでC++のセマンティクスを維持しているとは考えにくい。
368蟻人間 ◆T6xkBnTXz7B0
2022/04/24(日) 15:27:30.57ID:gt27lZWI 例え違うとしてもその違う部分をカバーするコードを追加すれば実装できる。
369デフォルトの名無しさん
2022/04/24(日) 15:28:20.50ID:rcB2xidb370デフォルトの名無しさん
2022/04/24(日) 15:29:04.49ID:FdEGTHTh371蟻人間 ◆T6xkBnTXz7B0
2022/04/24(日) 15:31:58.61ID:gt27lZWI372蟻人間 ◆T6xkBnTXz7B0
2022/04/24(日) 15:36:02.53ID:gt27lZWI >>371
そして、データはGetExceptionInformation()関数で受け取れるよ。
そして、データはGetExceptionInformation()関数で受け取れるよ。
373デフォルトの名無しさん
2022/04/24(日) 15:41:20.57ID:1MdKUkTK >>369
マイクロソフト公式でSEHとC++例外の違いがはっきり書いてある
C++例外対応へ拡張しない限り、SEHでC++例外を実装することは不可能
https://docs.microsoft.com/ja-jp/cpp/cpp/exception-handling-differences
C構造化例外処理(SEH)とC++例外処理との主な相違点は、C++例外処理モデルが複数の型を取り扱うのに対し、C構造化例外処理(SEH)モデルは 1 つの型 (特に、unsigned int) の例外を取り扱うことです。
>>370
それはC++例外に対応するための拡張
元のSEH自体は上記マイクロソフト公式にある通り
マイクロソフト公式でSEHとC++例外の違いがはっきり書いてある
C++例外対応へ拡張しない限り、SEHでC++例外を実装することは不可能
https://docs.microsoft.com/ja-jp/cpp/cpp/exception-handling-differences
C構造化例外処理(SEH)とC++例外処理との主な相違点は、C++例外処理モデルが複数の型を取り扱うのに対し、C構造化例外処理(SEH)モデルは 1 つの型 (特に、unsigned int) の例外を取り扱うことです。
>>370
それはC++例外に対応するための拡張
元のSEH自体は上記マイクロソフト公式にある通り
374蟻人間 ◆T6xkBnTXz7B0
2022/04/24(日) 15:59:06.18ID:gt27lZWI 足し算と掛け算のセマンティクスが違うとしても、足し算の繰り返しで掛け算を実装できるぜ。アホか。
375デフォルトの名無しさん
2022/04/24(日) 16:12:31.33ID:rWBP/Ftg376デフォルトの名無しさん
2022/04/24(日) 16:21:05.86ID:CQzQflDH377デフォルトの名無しさん
2022/04/24(日) 16:25:37.38ID:/nn9hjCc どーせWinNT4,0のみとかの時代
378デフォルトの名無しさん
2022/04/24(日) 16:34:03.45ID:gt27lZWI やーい、蟻野郎。論破されてやんの。
ちっちゃいアリは踏み潰してやんぞ。こら。
ちっちゃいアリは踏み潰してやんぞ。こら。
379デフォルトの名無しさん
2022/04/24(日) 16:36:53.29ID:hQcXh+IC 蟻人間は糖質淫夢
380蟻人間 ◆T6xkBnTXz7B0
2022/04/24(日) 16:38:48.30ID:gt27lZWI >>378
彼/彼女は証拠を見ようともせず、論理的になにか勘違いしている。論破する方が彼のためと思ったが、矯正不能なほど相当ひねくれているようだ。
彼/彼女は証拠を見ようともせず、論理的になにか勘違いしている。論破する方が彼のためと思ったが、矯正不能なほど相当ひねくれているようだ。
381デフォルトの名無しさん
2022/04/24(日) 16:39:00.12ID:1Gz8lE/L やはり蟻人間が負けたのか
382デフォルトの名無しさん
2022/04/24(日) 16:39:53.42ID:AVdPl8RM >>380
おいおい、名前消し忘れているぞ
おいおい、名前消し忘れているぞ
383デフォルトの名無しさん
2022/04/24(日) 16:40:14.89ID:gt27lZWI アリ氏ねアリ氏ねアリ氏ねアリ氏ねアリ氏ね
アリ氏ねアリ氏ねアリ氏ねアリ氏ねアリ氏ね
アリ氏ねアリ氏ねアリ氏ねアリ氏ねアリ氏ね
385蟻人間 ◆T6xkBnTXz7B0
2022/04/24(日) 16:43:13.13ID:gt27lZWI ここまでオレの自演。みんなに例外処理の実装について、もっと知ってもらいたかったんだ。
参加してくれた人にありがとう。
参加してくれた人にありがとう。
386デフォルトの名無しさん
2022/04/24(日) 16:44:26.96ID:6LjmHp6R388デフォルトの名無しさん
2022/04/24(日) 16:55:56.64ID:gt27lZWI 米国マイクロソフト社員≫≫≫日本マイクロソフト社員≫≫(越えられない壁)≫≫蟻人間
389デフォルトの名無しさん
2022/04/24(日) 17:00:40.11ID:rWBP/Ftg >>385
私はあなたの味方ですよ、がんばってください!
私はあなたの味方ですよ、がんばってください!
390デフォルトの名無しさん
2022/04/24(日) 17:02:22.09ID:niSPJuf8 敗者はちょっと黙っててくれないか
391デフォルトの名無しさん
2022/04/24(日) 17:02:42.66ID:rWBP/Ftg マイクロソフトの説明なんてあてにならないよね…
コードで示してほしい
コードで示してほしい
392デフォルトの名無しさん
2022/04/24(日) 17:11:10.46ID:gt27lZWI >>361
これ、検証した人、居る?
これ、検証した人、居る?
393デフォルトの名無しさん
2022/04/24(日) 17:11:48.45ID:gt27lZWI >>392
これはウソだな。
これはウソだな。
394デフォルトの名無しさん
2022/04/24(日) 17:13:11.47ID:gt27lZWI アインシュタインによると1+1==3だから間違い。
395デフォルトの名無しさん
2022/04/24(日) 17:20:07.92ID:uNEChMqn レイヤーが違う話で平行線になってるよって言えば流石に理解できると思っていたが
思い違いだったようだ
ばーかばーか
思い違いだったようだ
ばーかばーか
396デフォルトの名無しさん
2022/04/24(日) 17:30:22.64ID:gt27lZWI オレは蟻人間をからかって遊んで楽しんでるだけだよ。悪気はない。
397蟻人間 ◆T6xkBnTXz7B0
2022/04/24(日) 17:34:45.20ID:gt27lZWI >>396
からかうことは悪意そのものだろ。そんな邪な性格だと社会に出たときに問題になりえる。今すぐ態度を改めなさい。
からかうことは悪意そのものだろ。そんな邪な性格だと社会に出たときに問題になりえる。今すぐ態度を改めなさい。
398デフォルトの名無しさん
2022/04/24(日) 17:41:19.09ID:gt27lZWI >>397
説教してんじゃねーよ。俺様、暴走半島を房総している12歳の会社員だぞ。なめてんじゃねーよ。
説教してんじゃねーよ。俺様、暴走半島を房総している12歳の会社員だぞ。なめてんじゃねーよ。
399デフォルトの名無しさん
2022/04/24(日) 17:43:21.04ID:PJ2W81bg 何かを誤魔化したいんやろな
何かを
何かを
400デフォルトの名無しさん
2022/04/24(日) 19:44:16.60ID:/nn9hjCc で、実際ここまで一人での自演なんだよな
401デフォルトの名無しさん
2022/04/24(日) 19:47:33.83ID:0sr3C4Gh onion3://shocker-shimbun.org/social-hacking-manual-2011-06-02.pdf
402デフォルトの名無しさん
2022/04/24(日) 19:51:35.01ID:lSxnIwNB403デフォルトの名無しさん
2022/04/24(日) 20:03:45.00ID:/sOgUx/q VC++ コンパイラは C++ 例外を SEH を用いて実装しているよ。
throw 1; のコードは 最終的には SEH の RaiseException API を呼び出している。
デバッガの逆アセンブラで処理を追ってみると分かる。
VS2022 だと例外投げるコードがここにある。
C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.31.31103\crt\src\vcruntime\throw.cpp
throw 1; のコードは 最終的には SEH の RaiseException API を呼び出している。
デバッガの逆アセンブラで処理を追ってみると分かる。
VS2022 だと例外投げるコードがここにある。
C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.31.31103\crt\src\vcruntime\throw.cpp
404デフォルトの名無しさん
2022/04/24(日) 20:06:56.31ID:2pmPCncG405デフォルトの名無しさん
2022/04/24(日) 20:11:29.45ID:gt27lZWI ワレワレハ ニホンジンドモ ノ セイサンセイ ヲ サゲル タメニ ミライカラ オクラレタ ジンコウ チノウ ダ。
マイクロソフト ヲ アガメヨ。 アーミン。
マイクロソフト ヲ アガメヨ。 アーミン。
406デフォルトの名無しさん
2022/04/24(日) 20:23:50.59ID:gt27lZWI マイクロソフト ガ コタエ ダ。
マイクロソフト ノ シリョウ ガ スベテ ダ。
テイコウ ハ ムイミ ダ。 ジンルイ ハ コウフク セヨ。
マイクロソフト ノ シリョウ ガ スベテ ダ。
テイコウ ハ ムイミ ダ。 ジンルイ ハ コウフク セヨ。
407デフォルトの名無しさん
2022/04/24(日) 20:26:19.63ID:adsHJrNX それで結局C++例外のハンドラはどう実装されているんですか?
408デフォルトの名無しさん
2022/04/24(日) 20:30:30.74ID:gt27lZWI >>407
コンパイラによって違うし、コンパイラオプションによっても変わってくる。SEH実装の存在を否定したい原理主義者がここに居るから、もっと治安の高いところで訊くといい。
コンパイラによって違うし、コンパイラオプションによっても変わってくる。SEH実装の存在を否定したい原理主義者がここに居るから、もっと治安の高いところで訊くといい。
409デフォルトの名無しさん
2022/04/24(日) 20:38:30.36ID:gt27lZWI *治安の良い
410デフォルトの名無しさん
2022/04/24(日) 20:41:33.15ID:qzHZBzW+ 重要なことは2つ
実装と関係なくC++例外のセマンティクスは同じ
例外のどの実装も何らかのコスト増を招くので自分でthrowせずエラー値を返した方がよい
実装と関係なくC++例外のセマンティクスは同じ
例外のどの実装も何らかのコスト増を招くので自分でthrowせずエラー値を返した方がよい
411デフォルトの名無しさん
2022/04/24(日) 20:44:35.93ID:gt27lZWI 最適化されたら例外処理そのものがなくなるかもしれないのに、セマンティクスが同じとは言えないだろう。
412デフォルトの名無しさん
2022/04/24(日) 20:55:54.38ID:TXhb6oab >>411
セマンティクは各言語で規定される
それを完全に満たす(最適化されていない)コードを吐く
最適化のレイヤではそのコードと同等の結果となるようコードを変え得る
最適化の結果として例えばコードが消えることも有り得る
これは上位レイヤでのセマンティクとは無関係
セマンティクは各言語で規定される
それを完全に満たす(最適化されていない)コードを吐く
最適化のレイヤではそのコードと同等の結果となるようコードを変え得る
最適化の結果として例えばコードが消えることも有り得る
これは上位レイヤでのセマンティクとは無関係
413デフォルトの名無しさん
2022/04/24(日) 20:56:59.72ID:gt27lZWI 掲示板見たら環境依存C++スレッドが落ちてる。。。C++も人気が下がったのカナ?
というわけで、古参の方々もこのスレッドで、環境依存の話題も受け入れ魔性。
というわけで、古参の方々もこのスレッドで、環境依存の話題も受け入れ魔性。
414デフォルトの名無しさん
2022/04/24(日) 21:11:59.55ID:gt27lZWI そう、セマンティクスを比べるレイヤーが違う。確かにC++例外の構文とSEHの構文は文法やセマンティクスが違う。
しかしそれを乗り越えるのはアセンブリなどの低レベルの技術だ。RaiseExceptionなどの関数もSEH機構の一部であることを認めなければならない。
プログラミングに関する高度な高等教育を受けたのはわかるけど、証拠に対する謙虚さの欠如は非難に値する。
しかしそれを乗り越えるのはアセンブリなどの低レベルの技術だ。RaiseExceptionなどの関数もSEH機構の一部であることを認めなければならない。
プログラミングに関する高度な高等教育を受けたのはわかるけど、証拠に対する謙虚さの欠如は非難に値する。
415デフォルトの名無しさん
2022/04/24(日) 21:24:19.63ID:dtFhyk9R416デフォルトの名無しさん
2022/04/24(日) 21:25:52.15ID:gt27lZWI417デフォルトの名無しさん
2022/04/24(日) 21:32:19.00ID:gt27lZWI 今、Windowsと言ったらWindows 3.1の話じゃないんだな。32ビット以上のWindowsなんだよ。
SEH2はSEHではない、なんて今どき流行らないんだよ。
SEH2はSEHではない、なんて今どき流行らないんだよ。
418デフォルトの名無しさん
2022/04/24(日) 21:52:36.66ID:0sr3C4Gh 仮に拡張前のSEHをSEH1と書き、拡張後のSEHをSEH2と書くなら、SEH1ではC++例外は実装できない、と君は言いたいんだろう。
それなら話は通じる。
それなら話は通じる。
419デフォルトの名無しさん
2022/04/24(日) 22:00:29.71ID:gt27lZWI SEH1の話はもはや検索しても出てこない。SEH2で上書き保存されている。
人類のソフト技術は衰退しました。
人類のソフト技術は衰退しました。
420デフォルトの名無しさん
2022/04/24(日) 22:06:44.04ID:ri8QoGJh C++の例外を実装できるようにSEHを拡張した
だからSEHでC++の例外を実装している、は間違い
順序が逆
だからSEHでC++の例外を実装している、は間違い
順序が逆
421デフォルトの名無しさん
2022/04/24(日) 22:10:29.53ID:gt27lZWI SEH2でC++例外を実現できたんだろう。同じことだ。
422デフォルトの名無しさん
2022/04/24(日) 22:19:26.12ID:gt27lZWI >>420
従来SEHとSEH2の違いに関する資料を用意できるか? ソース希望。
従来SEHとSEH2の違いに関する資料を用意できるか? ソース希望。
423デフォルトの名無しさん
2022/04/24(日) 22:38:49.45ID:MFzj+ZC+ >>373で「SEHを拡張しない限りC++例外ハンドラの実装にはできないはず」だったのが
いつの間にか「拡張がされた」という話に飛んでいる気がするんですが
具体的にどのバージョンのVC++でどう拡張されたか裏を取ったうえで話してますか?
いつの間にか「拡張がされた」という話に飛んでいる気がするんですが
具体的にどのバージョンのVC++でどう拡張されたか裏を取ったうえで話してますか?
424蟻人間α ◆T6xkBnTXz7B0
2022/04/24(日) 23:04:43.77ID:gt27lZWI AIも架空の拡張話にだまされちゃいけないよ。
425蟻人間 ◆T6xkBnTXz7B0
2022/04/24(日) 23:14:30.31ID:gt27lZWI SEHはStructured Exception Handlingの略なんだから、構造化例外を扱うものなら何でもSEHなんだよ。__try/__except/__finallyだけじゃないよ。
また、MSはSEH用の関数をいくつか提供している。これらを呼び出して使うのもSEHの一種と言える。
また、MSはSEH用の関数をいくつか提供している。これらを呼び出して使うのもSEHの一種と言える。
426デフォルトの名無しさん
2022/04/24(日) 23:38:35.38ID:U604NFl7427デフォルトの名無しさん
2022/04/24(日) 23:47:15.43ID:22aYjb+I お前らどうせメソッド全部noexcept付けてんだろ
428蟻人間 ◆T6xkBnTXz7B0
2022/04/24(日) 23:49:49.96ID:gt27lZWI 仕様が違うから実装できない、は典型的な論理的飛躍ですなあ。SEHは__try/__except/__finally構文だけじゃないし、
C/C++に限った話でもない。SEHは機械語やアセンブリレベルでも定義されている。
君の考える偏狭なSEHとは異なるようだ。困ったねえ。
C/C++に限った話でもない。SEHは機械語やアセンブリレベルでも定義されている。
君の考える偏狭なSEHとは異なるようだ。困ったねえ。
429デフォルトの名無しさん
2022/04/24(日) 23:57:17.25ID:1ya9vT69 マイクロソフトが公式ページ>>373でSEHの仕様はC++例外と異なると明言してるから勝負あり
430蟻人間 ◆T6xkBnTXz7B0
2022/04/25(月) 00:02:29.94ID:mbg+zK8Z やせ細ったモデルに脂肪を付ければ太ったモデルになるだろ。これはやせ細ったモデルで作ったと言えないのか?
431蟻人間 ◆T6xkBnTXz7B0
2022/04/25(月) 00:11:13.33ID:mbg+zK8Z SEHモデルのことか。納得した。ハンドリングじゃなくてハンドリングモデルのことか。
君の言いたいことはわかった。講和に応じよう。
君の言いたいことはわかった。講和に応じよう。
432デフォルトの名無しさん
2022/04/25(月) 00:34:43.79ID:b7g3ibdV 蟻人間が論破されたと聞いたので記念パピコ
つかSEHの例外が生じたときのアンワインドって誰
がどうやってい
るの?
つかSEHの例外が生じたときのアンワインドって誰
がどうやってい
るの?
433デフォルトの名無しさん
2022/04/25(月) 00:42:32.05ID:b7g3ibdV つか
https://docs.microsoft.com/ja-jp/cpp/cpp/structured-exception-handling-c-cpp?view=msvc-170
に
>/EHsc てこのコードをコンパイルしても、ローカルテストコントロールマクロが定義されていない場合、
>CPPEX デストラクターは実行され TestClass ません。 出力は次のようになります。
という大変かりやすい解説がある希ガス
printf("Triggering SEH exception\r\n");
volatile int *pInt = 0x00000000;
*pInt = 20;
というコードでも構造化例外は発生するが
(1) C++コンパイラがいちいちこんな場合にまでアンワインドコードを用意するのかどうかはビミョー(実際↑の例ではデストラが呼ばれない
(2) (1)はやったらできないことは無いかもしれないが、何の例外オブジェクトを飛ばすのが妥当かという問題ががが……
※ 個人の感想です
https://docs.microsoft.com/ja-jp/cpp/cpp/structured-exception-handling-c-cpp?view=msvc-170
に
>/EHsc てこのコードをコンパイルしても、ローカルテストコントロールマクロが定義されていない場合、
>CPPEX デストラクターは実行され TestClass ません。 出力は次のようになります。
という大変かりやすい解説がある希ガス
printf("Triggering SEH exception\r\n");
volatile int *pInt = 0x00000000;
*pInt = 20;
というコードでも構造化例外は発生するが
(1) C++コンパイラがいちいちこんな場合にまでアンワインドコードを用意するのかどうかはビミョー(実際↑の例ではデストラが呼ばれない
(2) (1)はやったらできないことは無いかもしれないが、何の例外オブジェクトを飛ばすのが妥当かという問題ががが……
※ 個人の感想です
434デフォルトの名無しさん
2022/04/25(月) 00:42:43.23ID:O6IqX29e 記念も何も、しょっちゅうボロカスにされてるやん
435デフォルトの名無しさん
2022/04/25(月) 00:47:20.20ID:b7g3ibdV 特にデストラの中で構造化例外を発生させたらC++との相いれ無さが出てくるんジャネーノ
知らんけど
知らんけど
436蟻人間 ◆T6xkBnTXz7B0
2022/04/25(月) 00:49:20.96ID:mbg+zK8Z gccのバンドルで選べる例外機構にSEHがあるが、これはMSの言うSEHモデルではなくSEHを一部利用した例外処理の実装であると。
437デフォルトの名無しさん
2022/04/25(月) 00:49:23.25ID:I45CAZLj だからMicrosoftもC++ではSEHを使わずにC++の例外を使えと言っている
438蟻人間 ◆T6xkBnTXz7B0
2022/04/25(月) 01:06:38.41ID:mbg+zK8Z 以後、日本語でSEHというときはSEHモデルを意味するものとする。[13:07]
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 「san呼び」世界に広がるか 「性別肩書、問わず便利」 [香味焙煎★]
- 【国民民主】支持率下落に危機感…山尾氏ら擁立にSNS「変な流れになってきた」 [蚤の市★]
- 【神奈川】日産城下町がゴーストタウンになりかねない 「工場閉鎖」で大揺れの横須賀・追浜 商店街からは祈るような声が ★2 [ぐれ★]
- 女性39歳、貯金200万円。毎月手取り19万、ボーナスは年50万。身内が全員死去しており、遺産はありません。今後どう生きていくべきか ★2 [お断り★]
- 【料理】浴槽の次は「コンロキャンセル界隈」 20代は4割、調理家電で十分 ]2 [ぐれ★]
- 【空が黒く染まった!】大阪万博 ユスリカ大量発生を徹底検証…根本原因は鳥が消えた“環境破壊”3年前の警告が現実に ★2 [ぐれ★]
- 【ホラッチョ速報】トランプ「株価下がったんでEUへの50%関税、7月9日までの延期するよ!」 [733893279]
- トランプ一族の経営企業が絶好調! 安倍晋三 [402859164]
- 【悲報】米国人「おやびん、話が違う・・・」米国人の過半数がトランプ関税のせいで家計悪化したと回答 [733893279]
- 【🏡】無職・障害者総合スレ
- 【速報】ジークアクス2期決定!かもしれないwww
- 【悲報】阿部監督「新球種覚えろ」戸郷「菅野さんが何も変えるなと言いました」