[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 08/08 21:46 / Filesize : 235 KB / Number-of Response : 1032
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++相談室 part148



1 名前:デフォルトの名無しさん mailto:sage [2020/01/31(金) 20:54:06.26 ID:Nt0XFA2s.net]
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part147
https://mevius.5ch.net/test/read.cgi/tech/1576659413/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
mevius.5ch.net/test/read.cgi/tech/1556142878/

■長いソースを貼るときはここへ。■
 codepad.org/
 https://ideone.com/

[C++ FAQ]
https://isocpp.org/wiki/faq/
www.bohyoh.com/CandCPP/FAQ/ (日本語)

437 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 08:04:33 ID:gtTyaGQ0.net]
私も見たことは無い
でも他の演算子でも同じこと

1u << n+1

こんなのは良く使う
いちいちカッコを付けた方が分かりにくい

438 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 08:11:34 ID:gtTyaGQ0.net]
カッコを付けろって結局警告が出るから付けろってことで
見やすさとか無視した意見が多い

if ((a==(b + 1))||(a==(b + 2)))

こんな感じに書くヤツがいるんだよ実際

439 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 08:14:44 ID:ARbKbNEu.net]
警告の出方がコンパイラによって違うわけで
特定のコンパイラの警告に対応するということなら
#pragma使うのと同じだね

440 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 08:26:00 ID:GuOhFnKw.net]
>>426
それはつけた方がいいだろ。
見づらいのはスペースの使い方に問題がある。

441 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 08:42:00 ID:gtTyaGQ0.net]
えっ?
まじで言ってる?

if (a == b+1 || a == b+2)

これだと一瞬で理読める
俺が特殊?

442 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 09:05:35 ID:LleYumKd.net]
>>428
演算子の優先順位くらい勉強しておけよ
手間かけさせんな

443 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 09:08:26 ID:LleYumKd.net]
>>408
やはりアホだったかコイツw

444 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 09:10:24 ID:ktYbgjbO.net]
>>366
手抜きがどうこうと最もらしいこと言ってるけど
>>359で言ってるのは「警告に対処するのが面倒くさい」ってことだろ?
仕事で手を抜くべき場所とそうでない場所、みたいな次元の話じゃない

あと警告レベルは最大にしたりすると標準ライブラリにすら警告出るけど、標準より下げるのは良くない
そういうこと平気でやってると必ず後で本格的に面倒くさい原因不明のバグが頻発する

445 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 09:29:30 ID:JKzazDKJ.net]
256倍バグを出しても256倍早く潰したら
問題無くね?



446 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 09:30:03 ID:GuOhFnKw.net]
if( a == (b+1) || a == (b+2) )
これくらい書いてもバチ当たらんだろ。
しょうもないことでドヤってる馬鹿が開発では一番有害。

447 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 09:32:02.56 ID:pUDxcHmc.net]
>>433
256倍もバグ出すような奴と仕事したくない

448 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 09:39:01 ID:JKzazDKJ.net]
>>435
先方も256倍遅い奴と仕事したくないと思うてはるで

449 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 10:08:44 ID:Di3wk8ih.net]
>>433
全部潰せるならね

450 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 10:24:14 ID:YOfaZC8k.net]
じゃあ次は

bool b;
// 略
if (b == true)

の話でもする?w
俺はこれが一番のキチガイ記法だと思ってる

451 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 10:29:50 ID:yr4lhGWD.net]
勢いあまってこれも否定しちゃう

BOOL b;

if (b == TRUE)

452 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 10:33:51 ID:JKzazDKJ.net]
>>439
b==-1が成立することが有るのはウィンドーズのバグ

453 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 10:39:25 ID:yaVA2/v3.net]
if (a = b+1 || a == b+2)
こう書いたとき気づきづらい
手間をかけるのはそれ自体だけでなくいろいろ見る機会になる

454 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 11:00:58 ID:Di3wk8ih.net]
>>438
if(a != true){
return true;
} else {
return false;
}
みたいなコード見たときは流石に絶句したわw

455 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 11:05:13 ID:Di3wk8ih.net]
>>441
それはまた別な話
ところで>>374は
if(a = b){
みたいなコードに対する警告も不要と言うんだろうか?



456 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 11:09:08 ID:LleYumKd.net]
>>441
学習が足りてないだけ
括弧なんて要らん
理解できるレベルまで進化しろ原始人

457 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 11:17:32 ID:yr4lhGWD.net]
>>440
で、 if (b) と書いちゃっても自分のバグじゃなくてWindowsのバグと主張する

458 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 11:39:54.89 ID:pjdiRHlo.net]
>>445
C/C++ では、b が「非0」、つまり「0 以外」だとすべて真(true) と考えるのが伝統。

なお、余計に混乱を招くだけかもしれないが、
数学的には、b == true とは、単なる数として完全一致であることを調べる演算子ではなく、集合的に、b ∈ {非0} であるかどうかを調べる演算子だとみなすことも出来る。
ところが、C/C++ では、== 演算子は単なる数としての一致を調べる演算子で、
かつ、TRUE は通常 1 にマクロ定義されているので、
b == true が、b が完全に 1 に一致しているかどうかを調べる演算子になっている。

なので、if (b) と書く方が正しく、if ( b == TRUE ) と書くのは間違い。

459 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 11:53:39.76 ID:yr4lhGWD.net]
>C/C++ では、b が「非0」、つまり「0 以外」だとすべて真(true) と考えるのが伝統。

名前が紛らわしいがBOOLは真偽二値じゃないんだからそれは関係ない。
TRUEかどうか判定する必要があるなら if (b) は明らかに間違い。

460 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 12:11:53 ID:JKzazDKJ.net]
回避して使うかどうかとは無関係にバグはバグじゃわ;

461 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 12:27:48 ID:yr4lhGWD.net]
>>439はジョークのつもりだったが、実際に勢い余った人が2人も現れるとはw

462 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 12:47:51 ID:YOfaZC8k.net]
>>442
なにその想像を超えたキチガイ

>>449
アンタの親切心が何人かの明日を救ったねw

463 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 12:53:53 ID:JKzazDKJ.net]
プログラミングはアートやからな
狂気もまた創造の源泉、

464 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 12:56:37 ID:zzucbZgG.net]
>>442,450
対話デバッグでaに応じて実行をブレークしたかった人が残したデバッグの痕跡だろうね。
ソースを他人に公開する際にはブレークポイントの情報はなくなるから、他人には意味不明だけど。

465 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 12:58:48 ID:zzucbZgG.net]
>>451
狂気じゃなくて修正の積み重ね。少しづつ修正していると大ポカに気づけない。
だからこそ親切なコンパイラの警告に従う謙虚さが大切になる。



466 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 13:32:28.54 ID:gtTyaGQ0.net]
>>452
そっち?

a != true
じゃなくて?

467 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 14:33:50 ID:pjdiRHlo.net]
BOOL b に対して、正しくはこう :
if ( b )     // 良い
if ( b != 0 )   // 良い
if ( b == TRUE ) // 駄目

468 名前:デフォルトの名無しさん [2020/02/08(土) 14:48:48 ID:v1IBJgnW.net]
>>383
graphviz / python

469 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 14:51:43 ID:P2cF6ghb.net]
graphvizは主要なLinuxの標準リポジトリに入ってるから助かる

470 名前:デフォルトの名無しさん [2020/02/08(土) 14:52:17 ID:v1IBJgnW.net]
>>403
浮動小数点数なら桁落ちとか気にしてんのかなーとか勘繰る

471 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 15:10:32 ID:pjdiRHlo.net]
>>403
整数の場合だと、括弧を付けてある部分に何らかのまとまった意味があるのかも知れない。

数学や物理学では、計算を減らすために式変形していくが、最終的な式は元々の意味が分からなくなってしまうことがある。

その場合には括弧で囲ったくらいで意味が分かり易くなることは少ない。

しかし、そのケースの場合は、括弧で括ると何か意味が分かり易くなると考えた間ロウ製がある。

472 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 15:11:02 ID:pjdiRHlo.net]
>>459
間ロウ製 ---> 可能性

473 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 15:12:02 ID:JKzazDKJ.net]
>>455
>if ( b == TRUE ) // 駄目
-1をTRUE扱いしたくないのであればこれが唯一正しい

474 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 15:45:10 ID:yr4lhGWD.net]
MSDNの書き間違いかもしれないが、Win32 APIの一部にも「成功時はTRUEを返す」という
仕様の関数があるんだよな。

475 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 15:54:04 ID:pjdiRHlo.net]
>>461
そもそも、-1 は TRUE 扱いすると言うのが C/C++ の伝統や文化。
-1 と TRUE を分けて扱うのは、特殊な独自仕様。

>>462
Win32 API の一部どころか、ハンドル値を返す以外のほとんど全ての関数が、
成功すれば TRUE を返す。



476 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 16:07:20 ID:yr4lhGWD.net]
おいおい、#define TRUE 1のTRUEと真(true)の区別がぐちゃぐちゃだぞ。

BOOLを返すWin32 APIの多くは「成功時はFALSE(0)以外の値を返す」という仕様になっている。

477 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 16:16:01 ID:24Q9Tmjg.net]
宗派論争だな

478 名前:デフォルトの名無しさん [2020/02/08(土) 16:19:44 ID:RKzyJDHj.net]
C++にはtrueがあるので積極的に使っていこうと思います。

479 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 16:36:41.39 ID:pjdiRHlo.net]
>>464
なるほど確かに Win32 の BOOL LineTo(HDC hdc, int nXEnd, int nYEnd)の 戻り値は、

If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero.

のように、成功時には 1 や TRUE ではなく、「非0」を返すと書いてある。

480 名前:デフォルトの名無しさん [2020/02/08(土) 16:45:19 ID:RKzyJDHj.net]
キャッシュかキャッシュでないかで速度が変わる。
これは驚き。

481 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 16:50:34 ID:LleYumKd.net]
バカ==TRUE

482 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 17:21:59 ID:+a4Pmd4C.net]
○ if(b) if(!b)
○ if(b == FALSE) if(b != FALSE)
× if(b == TRUE) if(b != TRUE)

WinAPI使いには常識だと思ってたんだが

483 名前:デフォルトの名無しさん [2020/02/08(土) 17:32:20 ID:RKzyJDHj.net]
そういうのをみんなで共有しましょうって事で、たらこさんが2chを作ったんですよ。

484 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 17:40:43.90 ID:yr4lhGWD.net]
>>470
常識というか思い込み。
大半のFALSE/FALSE以外を返す関数なら上で良いが、>>462のようにTRUEを返すなら当然
TRUEと比較しなきゃ正しくない。

485 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 17:57:14.84 ID:+a4Pmd4C.net]
本当にそんなのあるの?
戻り値BOOLでFALSE(0)とTRUE(1)以外の値をTRUEと違う意味を表現するために意図的に返す奴があるってこと?
具体例どうぞ



486 名前: mailto:sage [2020/02/08(土) 18:25:19.22 ID:JRIqyhqH.net]
>>446
>C/C++ では、b が「非0」、つまり「0 以外」だとすべて真(true) と考えるのが伝統。
>if ( b == TRUE ) と書くのは間違い。

それは b の型が int だったら、そのとおりだけれども、>>438 をみるかぎり bool b なんでしょう?

はっ!これが老害というやつですか…

487 名前:はちみつ餃子 mailto:sage [2020/02/08(土) 18:26:30.54 ID:2SU4KPt5.net]
>>473
GetMessage という基本的な API からして変則的だから……

488 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 18:31:14 ID:yr4lhGWD.net]
>>462に書いたMSDNのは単にドキュメントの間違いという可能性もあるけどね。
それとは別に、TRUE/FALSe以外に-1を返すAPIがあるのは有名だろう。
いずれにしても仕様をちゃんと確認してそれに従った扱いをすべきで、思い込みは禁物ってこと。

489 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/02/08(土) 18:33:32 ID:2SU4KPt5.net]
>>475
GetMessage の返却値の場合は一応は TRUE の特殊な場合として -1 の状況もある
って感じだから TRUE とは別の場合を意味する第三の状況というわけではないな。

490 名前:デフォルトの名無しさん [2020/02/08(土) 18:34:27 ID:RKzyJDHj.net]
判定マクロないの。

491 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/02/08(土) 18:44:49 ID:2SU4KPt5.net]
>>466
bool も式にまざるといつのまにか int に暗黙に型変換されちゃったりして、
やっぱりこう、あまりしっかり区別されてる気がしねぇなあと思うことも多いよ。
Windows API で使われている BOOL よりはかなりマシではあるけど。

492 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 18:46:46 ID:JKzazDKJ.net]
GetMessage()が-1を返したときはエラーなんじゃわ;

493 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 18:51:51 ID:+a4Pmd4C.net]
「WM_QUITでない」という条件における真(0以外)の中の特殊な場合(エラー)に-1ってことなのね
理屈はわからんでもないけど変なの
本当はそんなのの戻り値に「BOOL」なんていうtypedefを使うのがそもそもおかしいんだけどWinAPIだから仕方ないな

494 名前:デフォルトの名無しさん [2020/02/08(土) 18:52:06 ID:RKzyJDHj.net]
>>480
行末の;イイね。

495 名前:デフォルトの名無しさん [2020/02/08(土) 18:52:56 ID:RKzyJDHj.net]
30年前のAPIだしね。



496 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/02/08(土) 18:55:20 ID:2SU4KPt5.net]
今なら適当なフレームワークをかぶせて使うもんだと思う。
素でメッセージの処理とか面倒くさすぎるし。

497 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 19:15:43.34 ID:mZtPBS5R.net]
klocworkがboolメンバ変数にportingがどうのって言ってくるのがうざい

498 名前:デフォルトの名無しさん [2020/02/08(土) 20:18:51.44 ID:RKzyJDHj.net]
>>485
これ何億円するの?

499 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 21:17:13.95 ID:24Q9Tmjg.net]
>>474
やっぱQZってとんでもなくバカだな
>>439からの流れ読めよ。BOOLについて会話されてるぜ

500 名前:デフォルトの名無しさん [2020/02/08(土) 21:25:19.61 ID:RKzyJDHj.net]
正の型の値と負の型の値を比較する場合、ビット幅の大きいほうの型に変換されてから比較される

501 名前:ですかね? []
[ここ壊れてます]

502 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 21:30:32.47 ID:uvgcwZ2m.net]
汎整数拡張でググれ

503 名前:デフォルトの名無しさん [2020/02/08(土) 21:35:32.85 ID:RKzyJDHj.net]
>>489
ググってみたんだけど。
https://kumikomiya.com/implicit-conversion/
これを見ると変換は起きないって事なのかな?

504 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 23:34:23.41 ID:jnRyPLnj.net]
>>472
いや。TRUE は、必ず if 式で真と判定されるので、if (b == TRUE) としなくても
if (b) で絶対十分であることは補償されている。
むしろ、if (b == TRUE) と書くのはバグの原因になるので駄目だと言われている。

505 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 23:51:17.72 ID:jnRyPLnj.net]
なんというか、TRUE は、処理系ごとに変化する値ではなく、C/C++ においては、標準的には必ず 1 に #define されている。
一応分かり易さのために TRUE と書いているだけで、TRUEが2になったりする事は考える必要はない。

ただし、逆に、高速化のために 1 ではなく、非0の値を返してたまたまの値、
例えば、12 とかを返してくる関数が有りえる。
その場合、うっかり間違って if ( b == TRUE ) などと書いてしまっていたら
大変なことになるので、意味的に TRUE を返す場合には、
if ( b ) または、if ( b != 0 ) と書く方が安全だと考えられている。



506 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 23:53:58.53 ID:jnRyPLnj.net]
非常に古い時代に、TRUE を -1 と定義していた処理系もあったかもしれないが、
現在の C/C++ では、1 に定義するのが基本とされている。
b == TRUE という判定の仕方は、C/C++ の言語仕様から考えれば推奨されない。

507 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/02/09(日) 00:57:27 ID:OoesT11A.net]
>>492-493
言語仕様にある true を避けているのだから、
その環境においては標準と異なる事情があるのだと察するべきじゃないの。
まあそういうことがあったらもっと別の名前を付けるべきだとは思うけど。

C/C++ はその性質上、様々なシステムの仲立ちをする機会があるし、
いろんな事情に左右される。
TRUE を 1 と定義する機会が多いのは確かだろうし、
そのときの習慣が確立されてもいるのもわかってるけど、
それが当たり前かっつーとそうとも言えんのじゃないかな。

508 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 01:17:16 ID:J5M0tDgl.net]
趣味人だとかいってるがハチミツ餃子はたまに良い事いうから困る

509 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 01:23:08 ID:e66sowWB.net]
>>494
TRUE が 1 以外に定義されていても、TRUE の値は、if 文では真と解釈されることだけは保障されているので、if (b) は問題ない。
逆に BOOL b の場合、b が非0であるが、TRUE のマクロ値とは異なった値になっている場合がないとは保障はされない。
なので、if ( b == TRUE ) だと、TRUE ではないが b に真とみなせる値が入っている場合にすり抜けてしまう恐れがあり、重大バグの原因となる。

510 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 01:23:18 ID:bHnzUNQO.net]
>>494
避けるもクソもそもそも昔なかったし

511 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 01:33:30.02 ID:Jw8Rx7z0.net]
あったぞ
MSが実装サボっただけで

512 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 01:58:53.21 ID:bHnzUNQO.net]
当時のc言語には仕様に無くない?

513 名前:はちみつ餃子 mailto:sage [2020/02/09(日) 02:19:40.02 ID:OoesT11A.net]
>>495
ハチミツじゃなくてはちみつな。

>>496
それが真偽値だというのが思い込みで、
実際には様々な可能性が有り得るってことだよ。

普通はこうだからこうみたいな話じゃなくて、
少なくとも言語仕様に無いのはわかってるんだから、
その環境でどうなってるかくらい確認したれやという話。

>>497
私は >>493 からあくまで現代の話だと読み取ったのでそのつもりで返答してるけど、
C/C++ のコードは長期的に使われやすいので現代という範囲の認識に齟齬はあるかもしれん。

514 名前:デフォルトの名無しさん [2020/02/09(日) 02:27:09 ID:cYNa4VVg.net]
過去と未来の狭間にあるってことかな。

515 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 04:25:17 ID:ids8kf+0.net]
WindowsAPIはC++限定じゃなくCを主軸に捉えてるだろ
クラスとか一切無いしマクロだらけだし
そもそもboolが無かったってのはそういうことやろ



516 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 07:14:29 ID:6++kPC7v.net]
>>462
> MSDNの書き間違いかもしれないが、Win32 APIの一部にも「成功時はTRUEを返す」という
> 仕様の関数があるんだよな。
具体的にどれ?

517 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 07:15:18 ID:6++kPC7v.net]
>>502
Cと言うよりPascalだし

518 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 07:19:31.89 ID:PT76WH2y.net]
>>434
自己紹介乙

519 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 07:24:44.99 ID:PT76WH2y.net]
>>493
TRUEが-1というと昔のBASICにそういうのあったね
だがその時代すでにCも存在していた

520 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 08:43:40 ID:J3Qn0niW.net]
>>496
何回ループしてるんだよ。
真(truthy)であることが要求されているなら if (b) だし、TRUEであることが要求されるなら
if (b == TRUE) だ。それを取り違えることがバグだ。

521 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 08:54:48 ID:aEgJYC9i.net]
>>503
これとか、
https://docs.microsoft.com/en-us/windows/win32/api/dbghelp/nf-dbghelp-makesuredirectorypathexists

522 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 08:59:21 ID:aEgJYC9i.net]
まあ失敗時はFALSE、とも書いてあるから、こう書くのが正解!
bRet32 = MakeSureDirectoryPathExists("C:\\tmp");
if (bRet == TRUE) {
 // 成功すた
 ...
} else if (bRet == FALSE) {{
 // 失敗すた
 ...
} else {
 assert(0);
}

523 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 09:03:53 ID:aEgJYC9i.net]
あと>>461は、>>455の三択で選ぶならif (b == TRUE)だが
正しくは↓こう書くべき
bRet = GetMessage(...);
if (b == -1) {
 // エラー1が発生すた、
 ....
} else if (bRet == FALSE) {
 // エラー2が発生すた、
 ....
} else if (bRet = TRUE) {
 // 成功すた、
 ...
} else {
 assert(0);
}

つまり出題者>>455の知識と想像力の欠如が諸悪の根源

524 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 09:06:48 ID:aEgJYC9i.net]
訂正orz
 誤: bRet
 正: bRet32

>>509訂正、
 誤: {{
 正: {

>>510訂正
 誤: bRet = TRUE
 正: bRet32 == TRUE

525 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 09:28:45 ID:PT76WH2y.net]
C89にboolがないことに拒否反応を起こす頭の固い奴に迎合して作られたboolでないBOOL



526 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 09:35:18 ID:aEgJYC9i.net]
先にWindowsがシステムコールとしての素朴な要請からbool型の実装型を定義して、
その後コンパイラメーカーがbool型の実装を別の方式にし出すよりは
よっぽどマシやったろうが!

個人的にはBOOLは好きだがな
TRUE/FALSEを表すのに4バイトも使うところが
いかにもリッチなOSっぽく、使っていてリッチな気分になれる

527 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 09:41:35 ID:6++kPC7v.net]
>>508
ありがと
全部は見てないけどDbgHelp関連の奴はその書き方してるみたいね
https://docs.microsoft.com/en-us/windows/win32/debug/dbghelp-functions

528 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 09:47:29.30 ID:Ej5ffr5G.net]
>>510
> } else if (bRet == FALSE) {
>  // エラー2が発生すた、
>  ....
エラーじゃないぞ
人の知識とか想像力とか言う前に自分の知識を見直せよw

529 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 09:55:00.47 ID:aEgJYC9i.net]
といっても成功していないのだからエラー扱いで差し支えないなのでは…

530 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 10:28:32 ID:Ej5ffr5G.net]
>>516
なんでそんなに自信満々なんだよw
マジでドキュメント見てこい
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getmessage

531 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 10:45:20 ID:Jw8Rx7z0.net]
>>510
GetMessageのマニュアルをちゃんと読めクソ雑魚
エラーの時は-1、WM_QUITの時はFALSE(0)を返すが、それ以外の時は「nonzeroを返す」としか言ってない
nonzeroというのはたくさんの値の集合であって、その判定をある特定の値と==で行うことはTRUEが1だろうと他の値だろうと完全な間違いだ
つまりお前のその糞プログラムは完全にバグっているし、お前がバカにしてる>>455らが言った通りの間違いをそのま

532 名前:まやらかしてる []
[ここ壊れてます]

533 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 10:54:04 ID:Jw8Rx7z0.net]
クソ雑魚>>510はマニュアルを読まない可能性があるので、マニュアルの使用例貼っておきますね
GetMessageがFALSE(0)返したときの何がエラーだって?笑わせんなカス
TRUE以外ならassertで落としていいなんてどこに書いてある?勝手な妄想すんなゴミ

BOOL bRet;

while( (bRet = GetMessage( &msg, hWnd, 0, 0 )) != 0)
{
 if (bRet == -1)
 {
  // handle the error and possibly exit
 }
 else
 {
  TranslateMessage(&msg);
  DispatchMessage(&msg);
 }
}

534 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 11:39:41 ID:aEgJYC9i.net]
>>519
>TRUE以外ならassertで落としていいなんてどこに書いてある?
それはこちらが聞きたい;
何を見てそう思ったのか?

535 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 11:53:18.89 ID:PT76WH2y.net]
>>519
変数いらねーから
for(;;)
switch(GetMessage(&msg, hWnd, 0, 0))
{
default:
TranslateMessage(&msg);
DispatchMessage(&msg);
break;

case 0:
return int(msg.wParam);

case -1:
throw std::system_error(std::error_code(int(GetLastError()), std::system_category()), "GetMessage");
}



536 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 12:02:53.96 ID:Cr/e9GtE.net]
while(GetMessage( &msg, hWnd, 0, 0 ) >0)
{
  TranslateMessage(&msg);
  DispatchMessage(&msg);
}

537 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 12:05:04.77 ID:aEgJYC9i.net]
とオモタがわかった
GetMessage()は WM_QUIT以外を受け取ったとき非0を返す、としか書かれていないから
bRet32 == TRUEでは正しい判定にならないのねん

使ったのがスゲー昔なので忘れていたが、そのときは多分>>519式に書いたから安心してホスイ






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<235KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef