C++相談室 part148at TECH
C++相談室 part148 - 暇つぶし2ch413:デフォルトの名無しさん
20/02/07 23:34:58 NUR9HIfz.net
>>399
マイナスが混ざっているならわからんでもないが、>>393で言っている優先順位の話とは関係ないように思うが?

414:デフォルトの名無しさん
20/02/07 23:36:27 Fqx20dQ+.net
>>397のようなコードを見てどう思う?

415:デフォルトの名無しさん
20/02/07 23:39:04 jtk/IwGo.net
見やすいかどうかは


416:主観なので、他人や未来の自分が読んで誤解しないようにすることが肝でしょ。 まさか、「数値リテラルの桁区切り文字」にまでかみついたりしないよね? https://cpprefjp.github.io/lang/cpp14/digit_separators.html



417:デフォルトの名無しさん
20/02/07 23:41:49 yMJLmx4v.net
主観で見やすい表記にする
その為にコンパイラの警告を無視したり切ったりする

何も問題無い

418:い
20/02/08 00:06:08.38 Wxs8WSK9.net
>>374
> >>371
> 変な作法が追加されることなんて良くあるんだぞ。
> 今じゃ gcc や clang で -Wall オプションを付けたら
> a || b && c
> みたいな式にすら警告が出る。
> 優先順位を間違えやすいとこだから括弧で明示した方が良いんだと!
> 演算子の優先順位くらい把握しとるわ!
把握してても間違えやすいからだと思うね
実際にはa,b,cには比較演算子を使った式が入ることが多いだろう
そうするとけっこうな長さになったりする
で全体の構造が見えにくくなる
そりゃ書いてる真っ最中は問題ないさ
しかし後から読んだときにすぐ理解できなかったり、手を加えるときに間違えたりする
warningを出すべきかは議論の余地があると思うけど、
出すべきと考える理由はわかる

419:デフォルトの名無しさん
20/02/08 00:38:17.76 RKzyJDHj.net
それはエディタの機能でかっこを表示したら良いのでは。

420:デフォルトの名無しさん
20/02/08 00:57:11 GuOhFnKw.net
主観は重要だろう。
重要でないなら全部アセンブラで書けや。
客観的には最も性能の出る言語だぞ。

421:デフォルトの名無しさん
20/02/08 01:23:28 Mdfh1mSi.net
&,|とか&&,||は*,+の関係と同じだから括弧つける方が冗長で分かりづらくなると思うんだが

422:デフォルトの名無しさん
20/02/08 01:29:21 zzucbZgG.net
一度書いた四則演算の数式を書き換えることはほとんどないけど、bool論理演算は頻繁に書き換えるでしょ。

423:デフォルトの名無しさん
20/02/08 01:30:14 zzucbZgG.net
素人多いね、このスレ。

424:デフォルトの名無しさん
20/02/08 01:45:08 RKzyJDHj.net
>>411
プロの意見だとどうなりますか?

425:デフォルトの名無しさん
20/02/08 01:52:50 JKzazDKJ.net
数式を遅延評価するオブジェクトを作れば
演算子のオーバーロードで演算子の優先順位を変えられるも同然

426:デフォルトの名無しさん
20/02/08 01:53:57 JKzazDKJ.net
テクニックの限りを尽くしてbetter C++を実現したら良い

427:デフォルトの名無しさん
20/02/08 01:54:26 zzucbZgG.net
プロなら抽象的な質問には回答しないでしょ。時間泥棒にあう。
「もっと具体的に書いてくれ」と逆質問する義理がないならなおのこと。

428:デフォルトの名無しさん
20/02/08 02:00:57 RKzyJDHj.net
自分の職業の板には一切いかないから、ここも職業プログラマはいないと思う。
ここに書き込む意味が無いと思うんだよな。

429:デフォルトの名無しさん
20/02/08 02:02:06 uvgcwZ2m.net
>>395
グロ

430:デフォルトの名無しさん
20/02/08 02:06:09 Mdfh1mSi.net
職業プログラマって?
仕事でソフト作るし、客先に納入したりもするけどプログラマではないな

431:デフォルトの名無しさん
20/02/08 02:08:10.84 RKzyJDHj.net
たとえば、外科医が匿名の掲示板で効果的な治療法について話し合ったりしないでしょ。
治療法について話し合ってる人は患者だ。
だから、ここにもプログラマはいないはず。

432:デフォルトの名無しさん
20/02/08 02:28:45.19 zzucbZgG.net
プロの対義語はアマ。素人の対義語は玄人。
今時点のこのスレの回答者が素人同然の低いレベルであることは、否定できない。
例えば一週間後は違うかもしれない。もっともまともな回答者がこのスレに常駐するようになるかもしれない。

433:デフォルトの名無しさん
20/02/08 06:55:22.73 ARbKbNEu.net
>>374
-Wallとは別に「お節介は一切禁止」というオプション欲しいね

434:デフォルトの名無しさん
20/02/08 07:15:13.17 N5LmiSOJ.net
特定の警告だけ無効に出来るのが普通だよ

435:デフォルトの名無しさん
20/02/08 07:33:56.27 gtTyaGQ0.net
警告は全ておせっかい

436:デフォルトの名無しさん
20/02/08 07:53:55.28 +X9VZvVK.net
>>374はわかるけど
>>393, >>397で警告出すコンパイラとか見たこと無い

437:デフォルトの名無しさん
20/02/08 08:04:33 gtTyaGQ0.net
私も見たことは無い
でも他の演算子でも同じこと

1u << n+1

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

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

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

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

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

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

441:デフォルトの名無しさん
20/02/08 08:42:00 gtTyaGQ0.net
えっ?
まじで言ってる?

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

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

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

443:デフォルトの名無しさん
20/02/08 09:08:26 LleYumKd.net
>>408
やはりアホだったかコイツw

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

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

445:デフォルトの名無しさん
20/02/08 09:29:30 JKzazDKJ.net
256倍バグを出しても256倍早く潰したら
問題無くね?

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

447:デフォルトの名無しさん
20/02/08 09:32:02.56 pUDxcHmc.net
>>433
256倍もバグ出すような奴と仕事したくない

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

449:デフォルトの名無しさん
20/02/08 10:08:44 Di3wk8ih.net
>>433
全部潰せるならね

450:デフォルトの名無しさん
20/02/08 10:24:14 YOfaZC8k.net
じゃあ次は

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

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

451:デフォルトの名無しさん
20/02/08 10:29:50 yr4lhGWD.net
勢いあまってこれも否定しちゃう

BOOL b;

if (b == TRUE)

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

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

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

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

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

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

458:デフォルトの名無しさん
20/02/08 11:39:54.89 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:デフォルトの名無しさん
20/02/08 11:53:39.76 yr4lhGWD.net
>C/C++ では、b が「非0」、つまり「0 以外」だとすべて真(true) と考えるのが伝統。
名前が紛らわしいがBOOLは真偽二値じゃないんだからそれは関係ない。
TRUEかどうか判定する必要があるなら if (b) は明らかに間違い。

460:デフォルトの名無しさん
20/02/08 12:11:53 JKzazDKJ.net
回避して使うかどうかとは無関係にバグはバグじゃわ;

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

462:デフォルトの名無しさん
20/02/08 12:47:51 YOfaZC8k.net
>>442
なにその想像を超えたキチガイ

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

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

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

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

466:デフォルトの名無しさん
20/02/08 13:32:28.54 gtTyaGQ0.net
>>452
そっち?
a != true
じゃなくて?

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

468:デフォルトの名無しさん
20/02/08 14:48:48 v1IBJgnW.net
>>383
graphviz / python

469:デフォルトの名無しさん
20/02/08 14:51:43 P2cF6ghb.net
graphvizは主要なLinuxの標準リポジトリに入ってるから助かる

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

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

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

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

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

472:デフォルトの名無しさん
20/02/08 15:11:02 pjdiRHlo.net
>>459
間ロウ製 ---> 可能性

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

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

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

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

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

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

477:デフォルトの名無しさん
20/02/08 16:16:01 24Q9Tmjg.net
宗派論争だな

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

479:デフォルトの名無しさん
20/02/08 16:36:41.39 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:デフォルトの名無しさん
20/02/08 16:45:19 RKzyJDHj.net
キャッシュかキャッシュでないかで速度が変わる。
これは驚き。

481:デフォルトの名無しさん
20/02/08 16:50:34 LleYumKd.net
バカ==TRUE

482:デフォルトの名無しさん
20/02/08 17:21:59 +a4Pmd4C.net
○ if(b) if(!b)
○ if(b == FALSE) if(b != FALSE)
× if(b == TRUE) if(b != TRUE)

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

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

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

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

486:
20/02/08 18:25:19.22 JRIqyhqH.net
>>446
>C/C++ では、b が「非0」、つまり「0 以外」だとすべて真(true) と考えるのが伝統。
>if ( b == TRUE ) と書くのは間違い。
それは b の型が int だったら、そのとおりだけれども、>>438 をみるかぎり bool b なんでしょう?
はっ!これが老害というやつですか…

487:はちみつ餃子
20/02/08 18:26:30.54 2SU4KPt5.net
>>473
GetMessage という基本的な API からして変則的だから……

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

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

490:デフォルトの名無しさん
20/02/08 18:34:27 RKzyJDHj.net
判定マクロないの。

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

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

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

494:デフォルトの名無しさん
20/02/08 18:52:06 RKzyJDHj.net
>>480
行末の;イイね。

495:デフォルトの名無しさん
20/02/08 18:52:56 RKzyJDHj.net
30年前のAPIだしね。

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

497:デフォルトの名無しさん
20/02/08 19:15:43.34 mZtPBS5R.net
klocworkがboolメンバ変数にportingがどうのって言ってくるのがうざい

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

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

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


501:ナすかね?



502:デフォルトの名無しさん
20/02/08 21:30:32.47 uvgcwZ2m.net
汎整数拡張でググれ

503:デフォルトの名無しさん
20/02/08 21:35:32.85 RKzyJDHj.net
>>489
ググってみたんだけど。
URLリンク(kumikomiya.com)
これを見ると変換は起きないって事なのかな?

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

505:デフォルトの名無しさん
20/02/08 23:51:17.72 jnRyPLnj.net
なんというか、TRUE は、処理系ごとに変化する値ではなく、C/C++ においては、標準的には必ず 1 に #define されている。
一応分かり易さのために TRUE と書いているだけで、TRUEが2になったりする事は考える必要はない。
ただし、逆に、高速化のために 1 ではなく、非0の値を返してたまたまの値、
例えば、12 とかを返してくる関数が有りえる。
その場合、うっかり間違って if ( b == TRUE ) などと書いてしまっていたら
大変なことになるので、意味的に TRUE を返す場合には、
if ( b ) または、if ( b != 0 ) と書く方が安全だと考えられている。

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

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

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

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

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

510:デフォルトの名無しさん
20/02/09 01:23:18 bHnzUNQO.net
>>494
避けるもクソもそもそも昔なかったし

511:デフォルトの名無しさん
20/02/09 01:33:30.02 Jw8Rx7z0.net
あったぞ
MSが実装サボっただけで

512:デフォルトの名無しさん
20/02/09 01:58:53.21 bHnzUNQO.net
当時のc言語には仕様に無くない?

513:はちみつ餃子
20/02/09 02:19:40.02 OoesT11A.net
>>495
ハチミツじゃなくてはちみつな。
>>496
それが真偽値だというのが思い込みで、
実際には様々な可能性が有り得るってことだよ。
普通はこうだからこうみたいな話じゃなくて、
少なくとも言語仕様に無いのはわかってるんだから、
その環境でどうなってるかくらい確認したれやという話。
>>497
私は >>493 からあくまで現代の話だと読み取ったのでそのつもりで返答してるけど、
C/C++ のコードは長期的に使われやすいので現代という範囲の認識に齟齬はあるかもしれん。

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

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

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

517:デフォルトの名無しさん
20/02/09 07:15:18 6++kPC7v.net
>>502
Cと言うよりPascalだし

518:デフォルトの名無しさん
20/02/09 07:19:31.89 PT76WH2y.net
>>434
自己紹介乙

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

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

521:デフォルトの名無しさん
20/02/09 08:54:48 aEgJYC9i.net
>>503
これとか、
URLリンク(docs.microsoft.com)

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

523:デフォルトの名無しさん
20/02/09 09:03:53 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:デフォルトの名無しさん
20/02/09 09:06:48 aEgJYC9i.net
訂正orz
 誤: bRet
 正: bRet32

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

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

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

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

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

527:デフォルトの名無しさん
20/02/09 09:41:35 6++kPC7v.net
>>508
ありがと
全部は見てないけどDbgHelp関連の奴はその書き方してるみたいね
URLリンク(docs.microsoft.com)

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

529:デフォルトの名無しさん
20/02/09 09:55:00.47 aEgJYC9i.net
といっても成功していないのだからエラー扱いで差し支えないなのでは…

530:デフォルトの名無しさん
20/02/09 10:28:32 Ej5ffr5G.net
>>516
なんでそんなに自信満々なんだよw
マジでドキュメント見てこい
URLリンク(docs.microsoft.com)

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


532:まやらかしてる



533:デフォルトの名無しさん
20/02/09 10:54:04 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:デフォルトの名無しさん
20/02/09 11:39:41 aEgJYC9i.net
>>519
>TRUE以外ならassertで落としていいなんてどこに書いてある?
それはこちらが聞きたい;
何を見てそう思ったのか?

535:デフォルトの名無しさん
20/02/09 11:53:18.89 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:デフォルトの名無しさん
20/02/09 12:02:53.96 Cr/e9GtE.net
while(GetMessage( &msg, hWnd, 0, 0 ) >0)
{
  TranslateMessage(&msg);
  DispatchMessage(&msg);
}

537:デフォルトの名無しさん
20/02/09 12:05:04.77 aEgJYC9i.net
とオモタがわかった
GetMessage()は WM_QUIT以外を受け取ったとき非0を返す、としか書かれていないから
bRet32 == TRUEでは正しい判定にならないのねん
使ったのがスゲー昔なので忘れていたが、そのときは多分>>519式に書いたから安心してホスイ

538:デフォルトの名無しさん
20/02/09 12:06:02.94 aEgJYC9i.net
>>522
気持ちはワカル

539:デフォルトの名無しさん
20/02/09 15:07:49.90 Z95s67CZ.net
しょうもない事で攻撃的になるやつなんなの
いつも吹いてしまうw

540:デフォルトの名無しさん
20/02/09 15:13:04.53 G+Zw2pJ3.net
(笑)

541:はちみつ餃子
20/02/09 15:27:19.45 OoesT11A.net
>>506
BASIC というか、古の言語にはビット演算と論理演算の区別がないものが結構あった。
全てのビットが立った状態 (-1) を真ということにしておけば
ビット演算用の AND, OR, NOT がそのまま論理演算のそれとして使える。
昔はこれが気の利いた方法だったんだろう。

542:デフォルトの名無しさん
20/02/09 16:19:35.32 wTv3WydA.net
#define FALSE 0 ← 正しい
#define TRUE 1 ← 間違い くず! 0点!! 出入り禁止!!!
#define TRUE (!0) ← 正しい
if(b) ← 正しい
if(b != FALSE) ← 正しい
if(b == TRUE) ← 間違い くず! 0点!! 出入り禁止!!!

543:デフォルトの名無しさん
20/02/09 17:16:55 J3Qn0niW.net
>if(b != FALSE) ← 正しい

これこそ糞コード

544:デフォルトの名無しさん
20/02/09 17:20:45 GpaXptWq.net
意味的にboolなら
if (a)
if (!a)
で判断すべきだと思う

545:デフォルトの名無しさん
20/02/09 17:24:22 GpaXptWq.net
if (a == TRUE)
if (a == TRUE == TRUE)
if (a == TRUE == TRUE == TRUE)

546:デフォルトの名無しさん
20/02/09 17:32:39 DvSFPggO.net
とぅっとぅるぅ~♪

547:デフォルトの名無しさん
20/02/09 17:40:32 J3Qn0niW.net
もともと>>438>>439を混同すんなという話なんだが、混同してる奴が次から次へと湧いて出てくるw

548:デフォルトの名無しさん
20/02/09 17:46:22.21 cYNa4VVg.net
ちゃうねん。

549:デフォルトの名無しさん
20/02/09 17:46:32.42 ugWNThcV.net
>>528
#define TRUE (!0) ← 正しい
C/C++ では、!0 は、必ず1 になることが仕様化されているので、仕様に準拠している
処理系ではこれは必ず、
#define TRUE 1
と書くのと同じになるので、敢えて (!0) と書く意味は無い。

550:デフォルトの名無しさん
20/02/09 17:48:20.60 GpaXptWq.net
boolだろうがBOOLだろうがYESNOだろうが
意味がboolであればboolと同じ扱い

551:デフォルトの名無しさん
20/02/09 17:48:58.88 6++kPC7v.net
>>529
糞コードだが
> if(b == TRUE) ← 間違い くず! 0点!! 出入り禁止!!!
より1億倍マシ

552:デフォルトの名無しさん
20/02/09 17:50:49.32 GpaXptWq.net
>>528
1がイヤなら0もイヤだろう
#define FALSE (0!=0)
としないと

553:デフォルトの名無しさん
20/02/09 17:55:11.50 J3Qn0niW.net
>>


554:537 マシとか言う以前にそもそも動作が違うんだが。 bがTRUEと一致するかどうか判断するのに他にどういう書き方をするというんだろう?



555:デフォルトの名無しさん
20/02/09 17:59:01.69 cYNa4VVg.net
>>539
!(b != TRUE)。

556:デフォルトの名無しさん
20/02/09 18:02:21.32 GpaXptWq.net
普通はTRUEかFALSEしか入ってないんだよ
それ以外が入ってる可能性があるなら
普通TRUEがどうかの判断だけじゃダメじゃないか?

557:デフォルトの名無しさん
20/02/09 18:05:49.02 GpaXptWq.net
switch (b){
case FALSE:
...
case TRUE:
...
case ???
...
default
...
}
これで

558:デフォルトの名無しさん
20/02/09 18:07:19.16 ugWNThcV.net
>>539
それは難しくいえば数学の集合論の話になる。
{0} と {非0} の二つの集合が有り、
if の条件式では、前者が偽、後者が真と評価される。
TRUEはどんな処理系であれ、必ず後者の集合の要素(元)になっていることだけは
保障されている。
なので、if ( b != 0 ) や、if (b) は正しいが、
if (b == TRUE) は絶対駄目、ということになる。

559:デフォルトの名無しさん
20/02/09 18:09:46.56 GpaXptWq.net
>>543
BOOLなのに
1と2を区別したい事があるんだってさ

560:デフォルトの名無しさん
20/02/09 18:10:45.32 ugWNThcV.net
if ( b == TRUE ) は、この条件式自体の動作は問題ないが、
b が TRUE ではないが、真である何らかの値を持っていたときに破綻してしまう。
BOOL b と書いた場合、本人が書いたプログラムでは b は、必ず
TRUE か FALSE の二値に限って書くことになろうが、往々にして、
APIなどでは、「真」の意味で「非0」の値を返してくること関数が含まれて
しまっている。
だから、勘違いや混乱が起き易い。
そのため、if ( b == TRUE ) というのは、絶対にやめておいたほうが良い書き方
となる。

561:デフォルトの名無しさん
20/02/09 18:16:58.01 GpaXptWq.net
TRUE/FALSE以外を想定するなら
時と場合による
TRUE/FALSEしか想定しないなら
if (b) / if (!b)
と書くべき

562:デフォルトの名無しさん
20/02/09 18:19:53.44 TF4jiljH.net
昔VB6からWinAPI呼ぶときの注意点として本で読んだ気がする
それboolじゃないよね?とは思った

563:デフォルトの名無しさん
20/02/09 18:20:59.38 J3Qn0niW.net
>>545
じゃあ聞いてみよう。
bがTRUEと一致するかどうか判断する必要がある場合はどう書く?

564:デフォルトの名無しさん
20/02/09 18:29:21.05 J3Qn0niW.net
>>546
排中律が成り立たないからFALSEでないことはTRUEを意味しない。
成功した場合にTRUE、失敗した場合にFALSEを返すという関数がある場合、成功したかどうかは
FALSEでないことではなくTRUEと一致するかどうかで判断しなければならない。

565:デフォルトの名無しさん
20/02/09 18:29:23.53 cYNa4VVg.net
>>548
!(b != TRUE)。

566:デフォルトの名無しさん
20/02/09 18:30:08.13 aEgJYC9i.net
>>548
架空のケースについてのお答えは差し控える
つか糞コードかどうかはともかく>>509の方はMSDNの記述に準拠したコードという意味では
非の打ち所が無い(何かあってもMSDNのせいにできる

567:デフォルトの名無しさん
20/02/09 18:30:08.50 6++kPC7v.net
>>539
> bがTRUEと一致するかどうか判断する
それ自体がまずい(ことが多い)と指摘されてることにそろそろ気づこうよ…

568:デフォルトの名無しさん
20/02/09 18:36:27.78 J3Qn0niW.net
>>552
>>514見ているのにいまだにそんなこと言っているのはなんでだろう

569:デフォルトの名無しさん
20/02/09 18:42:52.19 cYNa4VVg.net
いやちゃうねん。

570:デフォルトの名無しさん
20/02/09 18:59:34 aEgJYC9i.net
intの取り得る値の集合に対し、TRUEの定義が-93でありかつそれ以外は偽と解釈をせよと仕様に書いてあったら
さすがに(b == TRUE)とか(b != TRUE)書くことを現実の選択肢として考慮せざるおえない
もちろんそんな仕様が糞だが、仕様なのだからしようが無い
数学の本質は自由性にある、

571:デフォルトの名無しさん
20/02/09 19:07:50 mORiFTgk.net
>>549
>>546
日本語読めますか?

572:デフォルトの名無しさん
20/02/09 19:15:36 PT76WH2y.net
FALSEは定数
TRUEは範囲で観測によって収束する

適性に乏しいやつには厳しいよな

573:デフォルトの名無しさん
20/02/09 19:16:00 mORiFTgk.net
boolからBOOLになってintになってた

574:デフォルトの名無しさん
20/02/09 19:16:09 MeV8oXxA.net
集合B={FALSE=0,


575:TRUE=1} の場合 !FALSE=TRUE だが B'={FALSE=0,TRUE1=1,TRUE2=2,TRUE3=3} の場合 !FALSE={TRUE1,TRUE2,TRUE3} となる しかし TRUE={TRUE1,TRUE2,TRUE3} と定義すると B''={FALSE=0,TRUE} となり、同型B≡B'が示されるため、B'をboolとみなすことは可能である ただし、比較演算子は集合として同値であるのか、集合に含まれるのかを示さなければならない b⊂B'(≡B) のとき、 b=FALSE は一意だが、b=TRUE は b=1∩b=2∩b=3 を示す



576:デフォルトの名無しさん
20/02/09 19:17:37 mORiFTgk.net
数学関係ないのに数学ネタでひっぱってるヤツがいるな
IDは違うけど同じ人?

数学関係ないから

577:デフォルトの名無しさん
20/02/09 19:18:03 6++kPC7v.net
>>553
>>514の話なら>> 509だし、そうでないAPIもたくさんあるから
> それ自体がまずい(ことが多い)と指摘
されてるんだが、まじでわかってないのか?
引っ込みつかなくなってるだけだと思ってたが…

578:デフォルトの名無しさん
20/02/09 19:18:39 cYNa4VVg.net
ちゃうねんちゃうねん。

579:デフォルトの名無しさん
20/02/09 19:19:01 MeV8oXxA.net
訂正
b=1∩b=2∩b=3
→b=1∪b=2∪b=3

580:デフォルトの名無しさん
20/02/09 19:22:41 qoRTNAXH.net
グローバル領域にインスタンスを作って、初期化はmain()の中でしたいとします。
で、初期化に必要な情報はmain()の中で初めて分かるとします。

こういうときってそのクラスのコンストラクタとしては何もしないものを作っておいて、初期化用の関数を別途用意するというのが普通ですか?
インスタンスの宣言だけしておいてコンストラクタは後で呼ぶなんてできないですよね?

581:デフォルトの名無しさん
20/02/09 19:23:38 mORiFTgk.net
ポインタにしとけ

582:デフォルトの名無しさん
20/02/09 19:29:17 J3Qn0niW.net
>>561
逆に不思議だわ。
「成功時に0以外の値を返す」と「成功時にTRUEを返す」は違うということがなんで理解できないのか。

583:デフォルトの名無しさん
20/02/09 19:30:00 aEgJYC9i.net
std::unique_ptr<T>の出番

584:デフォルトの名無しさん
20/02/09 19:30:50 bHnzUNQO.net
apiの仕様見て適切に処理で終わる話だろこれ

585:デフォルトの名無しさん
20/02/09 19:37:32 54+KBSAm.net
optionalの出番だろ

586:デフォルトの名無しさん
20/02/09 19:39:43 OliK3lJl.net
>>568
同意

587:デフォルトの名無しさん
20/02/09 19:45:02 6++kPC7v.net
>>566
どこから違うことを理解してないと思った?
思い込み激しすぎw

588:デフォルトの名無しさん
20/02/09 19:45:29 6++kPC7v.net
>>568に一票

589:デフォルトの名無しさん
20/02/09 19:47:47 mORiFTgk.net
もともとはboolの話だったのに

590:デフォルトの名無しさん
20/02/09 19:49:14 VD5bohdG.net
GetGlyphOutline などで文字画像を取り出そうとすると、フォントが持ってない文字は代わりの文字を出力してくる。
(例えば、昔の毛筆フォントでは「?(はしご高)」などはMSゴシックになる。)
これを抑制したいので、そのフォントがグリフデータを持っているかどうか、調べる方法はありますでしょうか?

591:デフォルトの名無しさん
20/02/09 19:50:25 mORiFTgk.net
C++の相談?

592:デフォルトの名無しさん
20/02/09 19:52:53 J3Qn0niW.net
>>571
違いを理解しているなら>>566の後者はまさに>>539だということも理解できそうなもんだが。

593:デフォルトの名無しさん
20/02/09 19:54:35 bHnzUNQO.net
>>574
ここよりwindows apiのスレのがいいんじゃないかな

594:デフォルトの名無しさん
20/02/09 20:00:40 6++kPC7v.net
>>576
もしかして(ことが多い)っていう意味もわかってないのか?

595:デフォルトの名無しさん
20/02/09 20:05:04 54+KBSAm.net
win32は変な仕様多いからAPIの仕様確認しないと罠にはまる

596:デフォルトの名無しさん
20/02/09 20:05:21 J3Qn0niW.net
多い方に合わせろって話でもないだろう。
>>568の通りそれぞれの仕様に合わせて適切に扱えってこと。

597:デフォルトの名無しさん
20/02/09 20:05:58 PT76WH2y.net
>>579
ほんこれ

598:デフォルトの名無しさん
20/02/09 20:07:59 54+KBSAm.net
GetModuleFileNameとか仕様作った奴のセンスを疑う

599:デフォルトの名無しさん
20/02/09 20:20:16 6++kPC7v.net
>>580
誰も多い方に合わせろなんて言ってないのに…
単にそういうケースが多いって言うだけの話であることも説明しないとわからんのかな?w

600:デフォルトの名無しさん
20/02/09 20:30:08 J3Qn0niW.net
なら問題ないケースもあることを理解してるわけだ。だとすると>>552で指摘してたのはなんだろうと。

601:デフォルトの名無しさん
20/02/09 20:34:19 6++kPC7v.net
>>584
えっ?
まだ(ことが多い)ってわざわざ


602:書いてる意味がわからんのか? まともな奴と会話してる時ならいちいち書かないんだが、ネット掲示板なのでわけわからん奴に絡まれないようにわざわざ書いたのに想定外の低能さんなの?



603:デフォルトの名無しさん
20/02/09 20:46:39.77 J3Qn0niW.net
>>585
つまり>>552は、まずい場合もあるしそうでない場合もあるという意味のない指摘なわけだ。
ようやく>>539に戻れたな。
>>537
マシとか言う以前にそもそも動作が違うんだが。
bがTRUEと一致するかどうか判断するのに他にどういう書き方をするというんだろう?

604:デフォルトの名無しさん
20/02/09 20:52:41.00 mORiFTgk.net
bがTRUEと一致する条件の話はしてなくて
boolに対するif文をどう書くかの話だろ
APIの使い方なら他スレでやって

605:デフォルトの名無しさん
20/02/09 20:55:58.33 PT76WH2y.net
余所でやれって、APIと言語仕様のズレの話だろ
正しい理解はどのようなものかという興味は
スレ違いじゃねえぞ

606:デフォルトの名無しさん
20/02/09 21:03:28.51 mORiFTgk.net
APIの正しい理解ならAPIのドキュメントを見れば良いのでは?
もともとのboolの話とは全く関係ないですね

607:デフォルトの名無しさん
20/02/09 21:05:18.68 6++kPC7v.net
>>586
> つまり>>552は、まずい場合もあるしそうでない場合もあるという意味のない指摘なわけだ。
お前には意味ないのかもな…
必死になりすぎw

608:デフォルトの名無しさん
20/02/09 21:05:59.85 J3Qn0niW.net
>>533に書いたが、boolじゃなくてBOOLの話をしているのになぜかboolと混同する人が

609:デフォルトの名無しさん
20/02/09 21:06:45.54 mORiFTgk.net
boolの話題でbool以外を語るのはこんな感じ
内部的に固定小数点なfloatライブラリもあるぞ
内部的にvectorなmapライブラリもあるぞ

610:デフォルトの名無しさん
20/02/09 21:07:53.15 mORiFTgk.net
BOOLも同じ
意味的なBOOLが前提
それ以外は特殊事情

611:デフォルトの名無しさん
20/02/09 21:21:02.28 J3Qn0niW.net
>>590
意味のあるなしは主観だからいいとして、結局これ理解できたかな?
>>537
マシとか言う以前にそもそも動作が違うんだが。
bがTRUEと一致するかどうか判断するのに他にどういう書き方をするというんだろう?

612:デフォルトの名無しさん
20/02/09 21:23:11.71 6++kPC7v.net
>>594
>>552
低能は一度指摘されたことを何度も繰り返すw

613:い
20/02/09 21:32:30.02 Z95s67CZ.net
boolができるまでは
if (!!b)
こういうイディオムもありましてね

614:デフォルトの名無しさん
20/02/09 21:42:44.86 J3Qn0niW.net
>>576を理解しているなら
>bがTRUEと一致するかどうか判断するのに他にどういう書き方をするというんだろう?
このような判断がが必要な場合があることも理解しているはずだろうが、
結局この質問には答えられない(答えたくない)ようだな。

615:デフォルトの名無しさん
20/02/09 22:05:36.89 6++kPC7v.net
まだやってるのかよw
無能無限ループ乙

616:デフォルトの名無しさん
20/02/09 22:07:19.29 EoI3r47q.net
あいかわらずしょーもない話題だと盛り上がるのな。

617:い
20/02/09 22:16:06.44 Z95s67CZ.net
goto、マクロ、BOOL
全部C言語の範疇なんだよなw
おじさんがんばりすぎ

618:デフォルトの名無しさん
20/02/09 22:18:57.48 aEgJYC9i.net
つか真理値の型であるbool型および
真理値の型としての名前を与えられたBOOL型の議論が
Win32 APIの仕様という現実に汚染されてぐちゃらけてますな
TRUEに幅が有る、なんていうおかしいことを言い出す香具師まで出る始末、!

619:デフォルトの名無しさん
20/02/09 22:23:19.21 J3Qn0niW.net
本当は昨日で終わっていたはずの話題なんだがな。

620:◆QZaw55cn4c
20/02/09 22:31:58 mQrdek/f.net
>>487
え?話の発端は >>438 でしょう?
>>439>>438 の bool を BOOL にすげ替えたミスリードでしょう?

>>491
もう一度いいますが、
>if (b == TRUE) と書くのはバグの原因になる
のは b の型が int であれば、確かにそういえますが、b の型が bool ならばなんの問題もなにのでは?
URLリンク(ideone.com)

前提条件を全然考慮せず、条件反射的に
>if (b == TRUE) と書くのはバグの原因になる
と判断するのは老害的発想と私は断定しますね

621:デフォルトの名無しさん
20/02/09 22:33:23 EiJfhZVq.net
>>602
お前が言うなよww

622:デフォルトの名無しさん
20/02/09 22:33:54 aEgJYC9i.net
一般論として、APIの呼び出しが成功しました、という情報にはそれ以上幅も糞も無い(成功した要因など知っても無駄
から、成功=TRUE、失敗=FALSEとする割付の下では、TRUEこそ単一値として規定されるべきブツに他ならない
よって、一般論としては b == TRUEは言うほど糞ではないはずであった、

623:デフォルトの名無しさん
20/02/09 22:37:13 aEgJYC9i.net
まあエラー要因を複数種類返したい、ということなら
成功判定は b == SUCCEEDEDでSUCCEEDEDでなかったらエラーコードが入っている、という
INTかDWORD返しがストレートやったがな!(成功時非0を返す、とか言われるよりは

624:デフォルトの名無しさん
20/02/09 22:42:00 VD5bohdG.net
if( b == TRUE ) って、結局 if( b ) ってことだろ。

625:デフォルトの名無しさん
20/02/09 22:45:14 Z95s67CZ.net
クソワロタ
口調も激変

626:デフォルトの名無しさん
20/02/10 00:02:35 SkPzv01G.net
>>555
ヘッダファイルの中で TRUE の値が -93 に #define で定義されていたとしても、C/C++ の仕様だと、0だけが偽で、0以外は真であることだけはANSI Cで決まっているので、それはない。

627:デフォルトの名無しさん
20/02/10 00:06:15 hYCIpnsp.net
つまり、
#define TRUE (-93)
はANSI Cの規格上非合法だからそれはない

628:デフォルトの名無しさん
20/02/10 00:07:32 SkPzv01G.net
>>548
その場合で、かつ、b が TRUE に一致するもの以外を除去したいなら
if ( b == TRUE ) と書く以外には無い。
しかし、Win32 API の仕様でも、そのようなことを判定する必要があることはない
ように通常、作られている。
何人かが指摘しているように、FALSE との判定は良いのだ。
TRUE との判定はまずい。

629:デフォルトの名無しさん
20/02/10 00:08:23 hYCIpnsp.net
gotoといいBOOLといい、闇が深いな
裾野が広がれば、底辺は底なしカヨ、

630:デフォルトの名無しさん
20/02/10 00:08:59 hYCIpnsp.net
>>611
>>601

631:デフォルトの名無しさん
20/02/10 00:39:11 NGNAXTbr.net
【IT】不動の人気を誇る「Python」、評価が二分される「Java」「JavaScript」
スレリンク(bizplus板)

>JavaScript、Java、Python、「C++」「C」が特に多くの人に習得されたプログラミング言語だった

632:デフォルトの名無しさん
20/02/10 01:06:29 2gVSY1CN.net
C++11規格でJavaやC#の優位性がかなり失われた気がするわ。

633:デフォルトの名無しさん
20/02/10 01:07:48.45 Ro8qON5e.net
c#ならまだしもjavの優位性って?

634:デフォルトの名無しさん
20/02/10 01:35:35.28 SkPzv01G.net
>>614
というか、JSやJavaは、ちゃんと学んだ人も多いだろうが、
Pythonを実際に使ったことのある人はかなり少数派だと思う。

635:デフォルトの名無しさん
20/02/10 01:38:59.61 SkPzv01G.net
>>617
Javaは、GUIも出来たしブラウザ上でも動いたし、他に代わるものがなかったので
それしか選択肢がなかったために実際に使った人は多かったはず。
JSも、HTMLを使おうとした際にそれしか動的言語は無かったから同様。
一方で、Pythonに関しては、似たようなものは他にたくさんあるし、
自分以外の人に使ってもらうにも実行環境のインストールが必要だし、
Javaと違って互換性にも問題あるので使いにくい。

636:デフォルトの名無しさん
20/02/10 01:43:33.69 SkPzv01G.net
>>618
つまり、Pythonの評価が高いのは、前評判だけで実際に使った人が少ないから。

637:デフォルトの名無しさん
20/02/10 03:53:35.38 rxX2x5Pb.net
んなわけない。

638:デフォルトの名無しさん
20/02/10 04:03:09.14 2gVSY1CN.net
Pythonはtypoがつらい。

639:デフォルトの名無しさん
20/02/10 08:01:35 staO5LAL.net
ごちゃごちゃいうよりまずはいっぺんオッPythonで
そこそこの規模のプログラム(最低1000行以上)かいてみりゃわかる
はっきりいってクソだよ
あんなもんで巨大なプログラムはとても書けたもんじゃない

640:デフォルトの名無しさん
20/02/10 08:53:11.04 GJT/1Bxa.net
自分で1000行も書かなくても、どこかの誰かが書いてくれたライブラリを呼び出せば
望んだ仕事をやってくれるって部分がPythonの好まれる理由じゃないのん


641:? C++を使う人は、Pythonの流行を裏から支えてる感じで。



642:デフォルトの名無しさん
20/02/10 10:10:17.80 hDJC6jsQ.net
pythonで1000行くらいで根をあげてるようじゃ
どんなコード見ても文句言い出すだろ。。仕事にならんわ。

643:デフォルトの名無しさん
20/02/10 10:24:50.55 JgTqubiS.net
インデントをきっちり合わせないといけないので、Cの適当なインデントにうんざりしてる人にはむしろ合うかもしれない
でも関数やブロックが大きくなると、同一階層を探すのがつらくなるので、適切なブロック、関数分けが必須になる
いずれにしても、神経質な人には合ってるのかもしれない

644:デフォルトの名無しさん
20/02/10 10:46:13.48 oMyz9pGE.net
機械学習ならpythonほぼ必須なんだが
いまだにやったことないとか
ロートルなのを白状してるようなもん

645:デフォルトの名無しさん
20/02/10 11:15:12.10 yW0oU9fF.net
変数がどんな型にも化けられる変態言語

646:デフォルトの名無しさん
20/02/10 11:25:16.00 8A84p9rG.net
pythonがいいとは思わないけど、perlがクソすぎるので相対的にマシだから流行ってる
それ以上の理由はないと思う

647:デフォルトの名無しさん
20/02/10 11:37:39.28 oMyz9pGE.net
perlの代替っていつの時代の話だよ
お前完全に取り残されてるぞ

648:デフォルトの名無しさん
20/02/10 11:50:23.10 SkPzv01G.net
Pythonは、スマホで動かすのは難しいらしい。
少なくともスクリプト言語として動かすのは困難。
デスクトップマシンですら、
・互換性の問題がある。Ver 2系と Ver 3系で大幅に異なると聞いた。
・Windowsですらどの処理系が標準か不明。
・GUIがちゃんとまともに使えるかどうか不明。

649:デフォルトの名無しさん
20/02/10 11:55:31.13 SkPzv01G.net
>>630
Pythonのせいではなく、Perlのようなスクリプト言語がそもそも使えないという
スマホの限界だとは思う。
スマホでも使えることは使えても、IDEのような専用環境だけで使えるだけでは
本来のスクリプト言語としては使い物にならない。
このスマホの時代に Perl, Python, Ruby は合わないかも。

650:デフォルトの名無しさん
20/02/10 11:58:33.88 SkPzv01G.net
iOS, Android 共通にスクリプト的なことをやりたいなら、もう、スクリプト言語は諦めて、
C++で書いておいて iOSではSwift とリンクし、Androidでは、JNIを使ってJavaから
呼び出すほうがずっと簡単。
なお、AndroidならシェルスクリプトがPythonなんかより遥かに簡単に使える。

651:はちみつ餃子
20/02/10 12:13:49.40 gblDkkh1.net
>>625
- 括弧などに従って自動でインデントが付く
- 手動 (あるいは半自動) でインデントの位置を合わせる
これの二択だったら前者の方が「きっちり」してると思うわ。
まあインデントの付け方にいくつかの選択肢がある点はやりづらい面も
あるかもしれんが、自由度と統一性は両立できないもんだしな。
Python はいじったことないからよう知らんけど、 (インデントで構造を表す系統の文法である) Haskell を書くのはつらかった。
Haskell ではインデントと改行の替わりに波括弧とセミコロンも使えるけど、Python にそういうのないの?

652:デフォルトの名無しさん
20/02/10 12:34:04 oMyz9pGE.net
pythonをswift, javaなんかと比較してる人は
隔離された世界で誰にも使われないアプリを細々と作ってる感じがするわw
学習系を含むデータ解析のツールとして環境が優れてるからpythonが人気なんだよ
c++でテンプレートいじってるよりビッグデータ解析してビジネス提案できる方がはるかに収入高い

653:はちみつ餃子 ◆8X2XSCHEME
20/02/10 12:51:05 gblDkkh1.net
おっ、煽り入りました~~


654:



655:デフォルトの名無しさん
20/02/10 13:26:43 NGNAXTbr.net
ビジネス提案おじさん

656:デフォルトの名無しさん
20/02/10 14:18:49.02 SkPzv01G.net
>>633
ブロック開始終了記号とインデントを両方組み合わせたものが一番分かり易くて間違いにくい。
インデントだけでやると、個人的には見間違いそうで神経をすり減らすので辛い。

657:デフォルトの名無しさん
20/02/10 17:30:56 rxX2x5Pb.net
研究者が使うのにPythonは良い選択なんじゃないの。
事務作業にVBAが良い選択なのと同様に。

658:デフォルトの名無しさん
20/02/10 17:40:26 pqZ9DEAl.net
今さらですが、そもそもWin32のFALSEって、0であることは保証されてるんですか?

BOOL b = FALSE;
if (b)
{
  ここに来ないことは保証されてるんですか?
}

659:デフォルトの名無しさん
20/02/10 17:42:58 SkPzv01G.net
>>639
まともな C/C++ では、FALSE はどんな処理系でも 0 であることが保障される。

660:デフォルトの名無しさん
20/02/10 17:43:39 SkPzv01G.net
>>639
当然、そこに来ないことも保障される。

661:デフォルトの名無しさん
20/02/10 17:52:19 M5G7J8Pl.net
>>639
規格書のようなレベルで規定されているかどうかは知らないけど、公式ドキュメントの至るところで
FALSEは0である前提で書かれているものが見つかるから、そこを疑う必要はないと思う。

>>640
FALSEはWindows SDKの定義であってC/C++とは直接関係ないんだが。

662:はちみつ餃子 ◆8X2XSCHEME
20/02/10 18:04:03 gblDkkh1.net
>>640
現実にはそうだってのならわかるが、質問は保証があるかどうかなんだから、根拠を添えろよ。

少なくとも現状の WinDef.h では FALSE は 0 、 TRUE は 1 と定義されているのはわかったし、
常識的に考えればこれが変更されることはないが、
私はマイクロソフトのドキュメントからこれを裏付けるような文言を見つけられなかった。

BOOL が int であることは発見できた。
URLリンク(docs.microsoft.com)

should be TRUE or FALSE って書いてあるのにこれに反するような API があるのはアレだよな……。

663:デフォルトの名無しさん
20/02/10 18:06:40 AZ4KAaI2.net
システムハンガリアンもそうだけど明白な違反が堂々と放置されているからなあ

664:デフォルトの名無しさん
20/02/10 18:08:58 SkPzv01G.net
>>642 >>643
[根拠]
数学的に以下の根拠となる:

1. FALSE は、if ( FALSE ) とすると、偽として処理されることは絶対に保障される。
2. if (x) で x が偽として評価されるのは、ANSI C も、古い C でも必ず 0 という1つの値のみであり、他の値はすべて真と評価される。

1, 2 を両方成り立たせるためには、FALSE は必ず 0 でなければならないことが
証明される。

665:デフォルトの名無しさん
20/02/10 18:10:00 SkPzv01G.net
数学が大事です。
今の場合、仕様書に書いてなくても、数学的に考えれば絶対であることが証明できます。

666:デフォルトの名無しさん
20/02/10 18:13:48.89 M5G7J8Pl.net
昨日の奴かw
BOOLとboolは別物だということが結局最後まで理解できなかったんだな。

667:デフォルトの名無しさん
20/02/10 18:19:36.47 1F9oSbm6.net
windows apiのスレでやってくれよ

668:デフォルトの名無しさん
20/02/10 18:21:23.11 1D/jLqBa.net
>>645
頭が悪いとか話が通じないってよく言われない?
言われる度に相手の方が間違ってると思ってるだろうけど、話が通じてないのはお前が自分の間違いを認識できてないからだぞw

669:デフォルトの名無しさん
20/02/10 18:22:28.83 SkPzv01G.net
このスレには、失礼ですが、はちみつさんも含め、数学に弱い人が多いようです。

670:デフォルトの名無しさん
20/02/10 18:23:02.20 SkPzv01G.net
>>649
いや、むしろ逆に現実では天才と呼ばれています。

671:デフォルトの名無しさん
20/02/10 18:25:05.67 SkPzv01G.net
仕様書にすべては書いてなくても、数学で考えれば絶対であることが証明できる事柄があるのです。
今回のもその一例です。

672:はちみつ餃子
20/02/10 18:25:15.66 gblDkkh1.net
ああ、荒らしに来ただけか。
まぜっかえすにしてももうちょっとマシなこと言えよ。

673:デフォルトの名無しさん
20/02/10 18:27:13.76 rZ6GQco7.net
東大数学科卒だが
>>650は頭が弱いと思う

674:デフォルトの名無しさん
20/02/10 18:27:37.23 rxX2x5Pb.net
マクロはほとんど書く


675:必要なくなったよね。



676:デフォルトの名無しさん
20/02/10 18:27:43.95 SkPzv01G.net
失礼ですが、はちみつ氏は、C++の仕様には詳しいですが、それ以外は結構間違っています。

677:デフォルトの名無しさん
20/02/10 18:29:09.02 rZ6GQco7.net
>>656
ここでの君の書き込みだけで判断すると
君が間違ってる可能性が高い

678:デフォルトの名無しさん
20/02/10 18:29:40.36 SkPzv01G.net
>>654
でも現実に私は天才と言われています。

679:デフォルトの名無しさん
20/02/10 18:30:41.13 rZ6GQco7.net
数学の実績は?

680:デフォルトの名無しさん
20/02/10 18:31:14 SkPzv01G.net
>>1
私は、東大数学科の人とは意見が一致することが多いです。
よく考えてみてください。
もし分からないようなら、多分、あたなは東大数学科ではないか、レベルが落ちてしまったと思われます。

681:デフォルトの名無しさん
20/02/10 18:33:21 rZ6GQco7.net
学科は?

682:デフォルトの名無しさん
20/02/10 18:33:32 M5G7J8Pl.net
まとめるとこう。

1. BOOL型およびTRUE/FALSEは真偽値として用いるために*Windowsで独自に定義*されたものだが
 厳密には真偽値と振る舞いが異なる
2. 具体的には、FALSEでなれければTRUE、TRUEでなければFALSE、という排中律が成り立たない
3. 排中律が成り立たない以上、FALSEとの比較、TRUEとの比較はそれぞれ意味がある

683:デフォルトの名無しさん
20/02/10 18:34:10 SkPzv01G.net
ここは、学歴も実績も嘘を付けてしまうので参考になりません。
東大数学科と言うのもたぶんデタラメでしょう。

684:デフォルトの名無しさん
20/02/10 18:34:25 rZ6GQco7.net
なんでWindows前提?

685:デフォルトの名無しさん
20/02/10 18:37:31 rZ6GQco7.net
排中律君も数学君と同じ人かと思った
違うのかな?

普通の言葉で書こうよ
書けるでしょ

686:はちみつ餃子
20/02/10 19:01:26.22 gblDkkh1.net
>>664
TRUE を持つ内では皆が共通に論じられるほど広く知られたもののひとつだからでしょ。
反例としてはひとつあれば充分。
ちなみに「TRUE と比較するべきではない」に対する反例ね。
true であれ TRUE であれ、それと == で比較するのが罠になりやすいっつーのは
罠になりやすい部分として有名すぎて逆によく知られている常識だが、
絶対不変の定理みたいに言い始めたやつがいたから変なことになってるんだよ。
現実はそんな綺麗なもんじゃねーよっていうのに Windows はうってつけだろ?

687:デフォルトの名無しさん
20/02/10 19:02:19.07 VRCQc/iz.net
BOOLはWindows APIでしか使わないと思ってるから話が通じないんだな
数学君はなぜ話が通じない?
BOOLがTRUE, FALSE, UNKNOWN, ERROR
からなる集合だったら?

688:デフォルトの名無しさん
20/02/10 19:04:47.41 4ZzuDNO4.net
>>664
>>639からの流れで、あくまでWin32APIの中でのFALSEの話をしているからだろう

689:デフォルトの名無しさん
20/02/10 19:06:03.16 VRCQc/iz.net
BOOLは非常に広い環境で使われていて
その多くはTRUE/FALSEの2値を示す型として使われる
こういう普通の環境では
if (b) / if (!b)
で判断するのが最良
そうではない特殊な環境(Windows APIなど)は
個々のAPI別に語らないと意味が無い

690:デフォルトの名無しさん
20/02/10 19:06:46.57 VRCQc/iz.net
Wimdows APIに限定した話ならここですべきではない
他へ

691:デフォルトの名無しさん
20/02/10 19:33:07.36 M5G7J8Pl.net
つまり、Windowsで>>439のように書いていたのをWindowsのBOOLを知らずに否定しちゃう人、
というネタそのものを体現してくれたわけだな。

692:デフォルトの名無しさん
20/02/10 19:35:42.65 Ro8qON5e.net
BOOLについて議論するならどのBOOLか限定しないと
enum BOOL {TRUE,FALSE};
みたいなのかもしれないし
負論理の入出力ポート読み書きする値だとかで順番も重要だったりして

693:デフォルトの名無しさん
20/02/10 19:47:34.98 VRCQc/iz.net
>>671
何が「つまり」だか
Windows APIが色々と特殊なのは知ってるよ
Windows 2.0から組んでるし
特殊事情はあくまで特殊事情

694:デフォルトの名無しさん
20/02/10 19:56:01 M5G7J8Pl.net
そもそも、特殊じゃない「普通の環境」のBOOLって何ぞ?
typedef bool BOOL; とかw

695:デフォルトの名無しさん
20/02/10 20:01:48 rxX2x5Pb.net
URLリンク(ideone.com)
こうなるので、負の型にキャストするのが良いんですかね?

696:デフォルトの名無しさん
20/02/10 20:25:38.47 L7QZkeGE.net
なんでBOOLの話をしてんだよジジイども

697:デフォルトの名無しさん
20/02/10 20:46:16.46 te1zn0Q+.net
標準にはboolと_Boolしかないんだからそれ以外はどこぞの馬の骨が好き勝手に決めただけの独自定義
そのライブラリのマニュアル熟読しろでこの話は終わり

698:デフォルトの名無しさん
20/02/10 21:07:46.28 oMyz9pGE.net
>>675
そうなんだけど
C言語スレでやれ
じじくさい話ばっかりでうんざりするわ

699:デフォルトの名無しさん
20/02/10 21:11:10.36 dan9Jlhp.net
ナウでヤングな話題よろ

700:デフォルトの名無しさん
20/02/10 21:30:33.43 Ui+QSiGG.net
じゃあboolに戻すけど
if (b == true)
これ書く異常者は一定数おるわな

701:
20/02/10 21:33:51.78 3bnN/FFY.net
>>680
私には正常な書き方に思えますよ
その書き方のどこが異常なのでしょうか?

702:デフォルトの名無しさん
20/02/10 21:37:09.03 AZ4KAaI2.net
if (b) で済むのを
if (b == true) と書くのは
if (b == true == true) と書く異常者と同じ
きりねえって話

703:デフォルトの名無しさん
20/02/10 21:38:01.11 AZ4KAaI2.net
括弧ねえと読めねえ「異常者」出てこいw

704:デフォルトの名無しさん
20/02/10 21:49:47.77 rxX2x5Pb.net
>>678
ちゃうねん。

705:デフォルトの名無しさん
20/02/10 21:51:16.94 oMyz9pGE.net
>>683
つまんないことでイキんなカス

706:デフォルトの名無しさん
20/02/10 21:51:26.11 M5G7J8Pl.net
bool b;
if (b == true) // コードスメルではあるがバグではない
BOOL b;
if (b == TRUE) // 正しいか正しくないかは状況による

707:デフォルトの名無しさん
20/02/10 21:53:08.25 AZ4KAaI2.net
>>685
C++スレでC++以外の言語という「つまんないこと」でイキってんのおまえだろ

708:デフォルトの名無しさん
20/02/10 21:53:54.97 AZ4KAaI2.net
おまえみたいの「いちびり」って言うんだけど意味わかる?w

709:
20/02/10 21:55:45.19 3bnN/FFY.net
>>682
バグにならなければ問題ないのでは?
>if (b == true == true)
とは私も書きませんが、だからといって異常だとは思わない
というか、あなたの「異常」の定義が異常なのでは?

710:
20/02/10 21:56:36.80 3bnN/FFY.net
>>688
いちびり、とは、あなた、関西人ですなぁ

711:デフォルトの名無しさん
20/02/10 22:02:36.14 AZ4KAaI2.net
>>689
正常と異常の境をおまえさんはどこだと思っている?

712:デフォルトの名無しさん
20/02/10 22:02:53.98 VRCQc/iz.net
>>674
Windowsしか知らないの?
世界が狭い
非常に多くの環境でBOOLを使う

713:デフォルトの名無しさん
20/02/10 22:03:55.09 AZ4KAaI2.net
>>690
ああ、おまえほんまは関西人ちゃうなw
俺もほんまの関西人ちゃうけどなw

714:デフォルトの名無しさん
20/02/10 22:04:40.63 AZ4KAaI2.net
>>692
大文字のBOOLを使う「非常に多くの環境」とは?

715:デフォルトの名無しさん
20/02/10 22:06:02.65 VRCQc/iz.net
>531や>>682が異常とは思えないって
まじかQZ

716:デフォルトの名無しさん
20/02/10 22:07:56.51 M5G7J8Pl.net
>>692
その定義を出してみなよ。
標準の仕様じゃないんだからその環境ごとの特殊な定義であることは変わらんだろ。

717:デフォルトの名無しさん
20/02/10 22:14:01.58 VRCQc/iz.net
本当に知らないんだ
まじか

718:デフォルトの名無しさん
20/02/10 22:22:07.37 4ZzuDNO4.net
>>697
その返しは口喧嘩に負けた小学生みたいだから、ちゃんと相手の質問に答えなよ

719:デフォルトの名無しさん
20/02/10 22:23:41.11 1F9oSbm6.net
非常に多いなら具体例2、3あげて終わりでしょ

720:デフォルトの名無しさん
20/02/10 22:24:53.62 M5G7J8Pl.net
もう自分で何を言っているのかわからなくなっているんだろうな。
BOOLやTRUEの定義が環境によって異なる場合があると認めた時点で
if (b == TRUE)
これが正しいと言えるかどうかはその定義次第だということになるのに。

721:デフォルトの名無しさん
20/02/10 22:29:19.34 TAH0RZ5f.net
俺の狭い経験だと
BOOLはintで、TRUEは1、FALSEは0
しか見たことないけど、他の定義の環境ってあるの�


722:ゥな?



723:デフォルトの名無しさん
20/02/10 22:33:34.58 PZnoEIEf.net
-1というか全ビットonは何かで見た

724:デフォルトの名無しさん
20/02/10 22:50:32.94 Qny4UpdU.net
windef.hのFALSEが-1とかに変更されたら、既存のソースは崩壊だろうな

725:デフォルトの名無しさん
20/02/10 23:14:46.53 zaYnGTVS.net
!FALSE

726:デフォルトの名無しさん
20/02/10 23:38:01.28 yW0oU9fF.net
typedef unsigned BOOL:1;
ならまだ救いがあった
なんでint型にしてんだろうな

727:デフォルトの名無しさん
20/02/11 00:40:44 wwgXq7Q5.net
>>705
それは BitField みたいだけど、構造体メンバ以外で使えるようになったんだっけ?

728:デフォルトの名無しさん
20/02/11 01:18:20 wwgXq7Q5.net
>>703
FALSEは絶対的に0のまま。

729:デフォルトの名無しさん
20/02/11 01:20:55 wwgXq7Q5.net
もしかしたら、Rubyが、0をtrueと解釈してしまうことから変なことを思ってる
人がいるのかもしれないが、C/C++においては、言語仕様的に条件式で偽と
解釈されるのは、古くから、唯一、整数の 0 しかないなかったので、言語仕様が
修正されない限り TRUE が 0 以外の値にマクロ定義されることは絶対に無い。

730:デフォルトの名無しさん
20/02/11 02:07:59 iFdutQCH.net
あれ?
もしかして私・・また同じ日を繰り返してる・・??

731:デフォルトの名無しさん
20/02/11 02:12:10 lTJc7ZeR.net
まだやってんのかお前ら
ゲハ厨みたいなスレだな

732:デフォルトの名無しさん
20/02/11 02:43:47.12 wwgXq7Q5.net
>>708
スマン:
誤:修正されない限り TRUE が 0 以外の値にマクロ定義されることは絶対に無い。
正:修正されない限り FALSE が 0 以外の値にマクロ定義されることは絶対に無い。

733:デフォルトの名無しさん
20/02/11 02:58:41.73 f/mZFEPY.net
>>681
if(b)で十分なのにif(b==true)と書くのはif((a==b)==true)と書くのと同じで冗長なんだよ
これがすぐに理解できないなら論理を簡潔にする能力が欠如してるのでプログラミングの才能はないね

734:デフォルトの名無しさん
20/02/11 03:04:36.42 wwgXq7Q5.net
>>712
しかも、b は、少なくとも見かけ上は int 型ではなく、BOOL 型だし。
それに他の言語の場合、if の条件式に入れられるのは唯一 bool 型の
場合があり、一番 if の条件式に入れ易い型。

735:デフォルトの名無しさん
20/02/11 03:08:16.20 wwgXq7Q5.net
>>713
他の言語の場合、例えば x, y が整数型の場合、
x == y
とした結果の型が bool 型。
そして、if の条件式に入れられるのは bool 型のみだったりする。
だから、もともと b が bool 型なのに、敢えて b == true と判定して
また bool 型に「直して」しまうのはとても奇妙な感じになる。
その文化との兼ね合いから、C/C++ でも、b が BOOL 型の場合は、
if (b) とするのが美しく見える。

736:デフォルトの名無しさん
20/02/11 03:33:01.69 AiNLffgv.net
MISRA-C でも、if( 変数 )で、変数が実質的にブール型の場合は、これでOK
int a = ( 5 < 10 );
printf( "%d", a ); /* 1 */
if( 5 < 10 ) と、if( a ) は同じ意味。
a は、実質的にブール型

737:デフォルトの名無しさん
20/02/11 06:36:51 DrkniQZr.net
bool型が存在しない時代に何故bool型になるのか

738:
20/02/11 08:01:59.71 Sh/x76Zj.net
>>695
異常を「コンパイラがコンパイルできない」と定義していますから

739:
20/02/11 08:02:50.77 Sh/x76Zj.net
>>712
コンパイルが通るんだったら異常ではないのでは?

740:
20/02/11 08:03:52.59 Sh/x76Zj.net
>>712
>論理を簡潔にする能力が欠如してる
簡潔すぎてわかりにくいのも困りますね、プログラミングはまず他人への分かりやすさを優先するべきでは?

741:デフォルトの名無しさん
20/02/11 08:29:09.76 lXsf9fbV.net
簡潔過ぎて分かりにくいって何?
if (b) で分かりにくいなら
変数名が適切でないとかそもそも分かりにくい作りとか
他に問題があるんじゃないの?

742:デフォルトの名無しさん
20/02/11 08:33:12.52 lXsf9fbV.net
もしかして
if (a ==b)
よりも
if ( (a == b) == true )
の方が見やすいとかいっちゃう?

743:デフォルトの名無しさん
20/02/11 08:56:04 tUwi24Vl.net
そりゃ
if (a == 42)
よりも
if (a == 42 == true)



744:フほうが見やすいし if (a == 42 == true != false) のほうがさらに見やすいのが異常者



745:デフォルトの名無しさん
20/02/11 08:58:48 lXsf9fbV.net
カッコも付けないと見にくいよな

if (((a == 42) == true) != false)

746:デフォルトの名無しさん
20/02/11 09:09:46 Kcy+Q8b9.net
どれだけ冗長に書けるか選手権?

747:デフォルトの名無しさん
20/02/11 09:15:23 oAfdlMqH.net
QZは変なこだわりに固執するやつだから、一般的な感覚とか常識とかについて議論しようとしてもそもそも議論が噛み合わないし、スレを無駄に汚すだけ

748:デフォルトの名無しさん
20/02/11 09:21:24 tUwi24Vl.net
if (true == true == true == b == true)
if (true == b == true == b == true)
int *p = &*&*(int *)&*&*&*&*&*(int *)&a;

749:デフォルトの名無しさん
20/02/11 09:34:27 Gt4Evnq6.net
ようちえんじがかんじをつかわないでってぐずってるのとおなじだね

750:デフォルトの名無しさん
20/02/11 10:19:17.04 G5APdl5q.net
異常とは、普通じゃないことだよ
少数派のこと
if (b == true == true) は明らかに異常
if (b == true) はたまに見るけど、まぁ異常かな

751:デフォルトの名無しさん
20/02/11 10:34:12.60 lXsf9fbV.net
つまりQZは異常

752:デフォルトの名無しさん
20/02/11 10:35:43.55 Kcy+Q8b9.net
boolやBOOLでない変数abcをif(a==b==c)と書きたい事はある。

753:デフォルトの名無しさん
20/02/11 10:56:56.94 0rT9FQIK.net
QZってコイツ片山だっけ?

754:デフォルトの名無しさん
20/02/11 11:01:53.65 u3DUqgh+.net
if(b==true)
はifのなかには比較入れないとダメだと思っているんじゃね
そう言う言語もあるし

755:デフォルトの名無しさん
20/02/11 11:09:22.66 IotAbjtu.net
「rust が c++ を超えた!! 神!!」みたいな記事をよく見ますけど、今後c++がrustから学んでもっと良くなることって期待して良いですよね?
rustに勉強のコストを割くか迷っています

756:デフォルトの名無しさん
20/02/11 11:12:06.04 HeZx7HUk.net
>>731
片山はQZほど馬鹿ではない
まず国籍が違う

757:デフォルトの名無しさん
20/02/11 11:29:50.94 Ci+AyeA2.net
なぜ
if (a == true)
と書くやつがでてくるのか
それは条件式に食わせるためには比較演算子で値から「真偽値」に変える必要があると
思っていてそれがboolと同値と理解していないからだろ
だからそういうやつは
if (a == 42 == true)
とは書かない
この例はむしろboolを理解してるやつからしか出てこない発想
やつらはいったん「真偽値」になればあとは論理演算子でつなげると理解している
ある意味、条件式を作るときのイディオムに馬鹿正直に従っているわけで別に
異常だと騒ぐほどひどくはない
別の見方をすればboolを特別視しないで書いてるわけで、
冗長にはなるが共通のフォーマットで書ききるってことはほかでもあることだ
そう思えばやっぱりひどくはない
実際おれは特別読みにくいとは感じないし、この無駄は最適化で消える
何かの機会にこれ冗長だよねと教えてやるぐらいで十分

758:デフォルトの名無しさん
20/02/11 11:37:00.49 kh2SGwFh.net
ほんといつまでやってんの

759:デフォルトの名無しさん
20/02/11 11:38:29.11 KQZ3+5BK.net
冗長な書き方をする人の真意なんて測りようもないし理由が一つに決められるわけもないだろう。
想像するだけ無駄。

760:はちみつ餃子
20/02/11 12:17:11.73 GpQNLMm4.net
>>715
そう書くべきだしそれが普通ってことはわかってんだって。
自分で書く分にはそう書くよ。
でも、他者が書いたコードを読むときや利用するときは
> 変数が実質的にブール型の場合は
っていう前提を確信できない場合がある。
整数型で真偽値の代用にすることがある C/C++ では
型で判断できないことがあるから罠だよねって話をしてるんだよ。
真っ当なデザインではない場合があるから思い込まずにちゃんと確認しようねってこと。

761:デフォルトの名無しさん
20/02/11 15:09:17.27 lXsf9fbV.net
>>735
同値
意味�


762:オらないのね



763:デフォルトの名無しさん
20/02/11 15:15:33.26 Gt4Evnq6.net
> この例はむしろboolを理解してるやつからしか出てこない発想
そりゃそうだ
ifの制御式は比較でなければならないと言い張るやつへの皮肉なわけで

764:デフォルトの名無しさん
20/02/11 15:19:47.85 QCVkc9h/.net
operator =(BOOL value){
if(value==0){
return FALSE;
else if(value==1||value==2||...){
}

765:デフォルトの名無しさん
20/02/11 15:21:35.11 IKSpGnXe.net
>>596
あったあった
今はわざわざそれ使う理由忘れた

766:デフォルトの名無しさん
20/02/11 15:25:53 Uk2CrnAG.net
Cだとそれで必ず0か1になるからTRUEと比較しても大丈夫!っていうクソみたいなバッドノウハウ

767:デフォルトの名無しさん
20/02/11 15:28:40 QCVkc9h/.net
operator ==(BOOL value){
 if(this->value == 0){
  if(this->value == value){
   return TRUE;
  }
 }
 else{
  if(value==1||value==2||...){
   return TRUE;
  }
 }
}

768:デフォルトの名無しさん
20/02/11 15:38:44 KQZ3+5BK.net
>>743
そもそもTRUEと比較する必要はないしWindowsから出てきたイディオムでもないと思うが。
どちらかというとtruthyな値からtrueを得るイディオムとして使われているような。
よく見かけるのはJavaScriptとか。

769:デフォルトの名無しさん
20/02/11 15:45:19.74 Gt4Evnq6.net
リターン式から返却値の型を推定させる場合にはautoが必要だ

770:◆QZaw55cn4c
20/02/11 17:36:36 Sh/x76Zj.net
>>725
あなたのいう「一般的」というものが、実はそれほど一般的ではなかった、という可能性はありませんかね?
というか、まずあなたのいう「一般的」をあなたの言葉で定義するべきでしょう

あなたに定義できますか?

771:デフォルトの名無しさん
20/02/11 18:04:17 G5APdl5q.net
単語の意味は辞書引けよ
APIの仕様はヘルプ読め、と同様だな
なんで個人が定義するんだよ

772:はちみつ餃子 ◆8X2XSCHEME
20/02/11 18:24:26 GpQNLMm4.net
URLリンク(get.secret.jp)

773:はちみつ餃子
20/02/11 18:40:23.65 GpQNLMm4.net
true と比較したけりゃすればいいじゃないの。
そのプロジェクト内で一貫したポリシーがあるのならそれでいいよ。

774:デフォルトの名無しさん
20/02/11 18:49:13.60 TuMeiRsT.net
ちゃうねん。

775:デフォルトの名無しさん
20/02/11 18:52:49 TuMeiRsT.net
ストリーム遅いな。

776:デフォルトの名無しさん
20/02/11 20:44:57.22 f/mZFEPY.net
コード規約「if(bool)はif(bool==true)と書かなければならない」
やだよ、そんな規約ww
規約決めるまでに紛糾してプロジェクト始められねぇよw

777:デフォルトの名無しさん
20/02/11 20:57:43.57 Z6POtQL5.net
どっちでもええやん

778:デフォルトの名無しさん
20/02/11 22:08:40 Pk2ehCPz.net
explicit operator boolだとラムダとかの戻り値強制したいときそうなっちゃわない?

value() && true か value() || false
static_cast<bool>(value())は好きじゃない

779:デフォルトの名無しさん
20/02/11 22:19:09 Uk2CrnAG.net
素直に戻り値boolに指定しろよ

780:デフォルトの名無しさん
20/02/11 22:21:59 ggTX+OPA.net
意味的にboolの型であればboolにキャスト
そうじゃないなら意味通りにboolに変換

781:◆QZaw55cn4c
20/02/11 22:23:23 Sh/x76Zj.net
>>258
mmap を確かめています、なんだかすごく時間がかかってしまいました…
ideone はファイルを作らせてくれないみたいですね… URLリンク(ideone.com)

fd と fd に紐付いた mmap をつくっておいて、
?fd 側にデータを追加すれば mmap でも見えるのですが、
?mmap 側からデータを追加しても fd は増量しないようですね

今は cygwin で見てますが、ちゃんと linux をいれて確かめるつもりです…

782:デフォルトの名無しさん
20/02/11 22:24:35 ggTX+OPA.net
オンメモリで出来ることは素直にオンメモリでやれば

783:デフォルトの名無しさん
20/02/11 23:36:09 TuMeiRsT.net
くじで決めてはどうか。

784:デフォルトの名無しさん
20/02/11 23:39:16 RnNFx+rl.net
モンテカルロ法やな

785:デフォルトの名無しさん
20/02/11 23:56:08 TuMeiRsT.net
I/Oの遅さの陰に隠れてたけど。
ストリームよりSSDのほうが速いよって時代になって困る。

786:デフォルトの名無しさん
20/02/12 01:53:51 CB9IiDBv.net
YouTuberは「最強の職業」である理由。
URLリンク(www.youtube.com)
【事例付き】YouTuberは最強の副業である件について。
URLリンク(www.youtube.com)
【初心者向け】YouTubeの始め方・稼ぎ方を徹底解説!
URLリンク(www.youtube.com)
「YouTubeなんていつか稼げなくなる」という主張を論破する。
URLリンク(www.youtube.com)
収益化から丸1年!YouTubeでいくら稼いだか公開。
URLリンク(www.youtube.com)
その動画で月商○○万!? YouTubeで稼ぐ裏技的アプローチ。
URLリンク(www.youtube.com)
【貧者の工夫で戦え】ガラケーだっていい。YouTube始めるのにパソコンはいらない!
URLリンク(www.youtube.com)
【第一回】SNS、YouTube、ブログで稼ぐ方法を、丁寧に解説します!
URLリンク(www.youtube.com)

787:デフォルトの名無しさん
20/02/12 06:38:05.77 m8mhjAm7.net
>>763
グロ

788:デフォルトの名無しさん
20/02/12 10:03:09.83 DWihvkH4.net
URLリンク(qph.fs.quoracdn.net)

789:デフォルトの名無しさん
20/02/12 16:01:35.18 a1w2Xqz0.net
>>743
ああなるほど
if(TRUE == !!b) のことか
if(!!b) は javascript の方だろ

790:はちみつ餃子
20/02/12 16:24:33.81 KQxiYwOn.net
! は見づらいから私は not と書くことにしてる。

791:デフォルトの名無しさん
20/02/12 17:16:20.22 DU9qWhLl.net
一応、alternative tokensに規定はあるが
使う奴の心は #define BEGIN { なんてやるやつと同質だね

792:デフォルトの名無しさん
20/02/12 17:20:59.01 DU9qWhLl.net
Cにも_Boolがなきゃヤダジタしてたやつとか
マジそういう言語へ行ったきり帰ってくるなって感じ
で結局BOOL < 0みたいなオカシイことが起き出す原因を作りやがる

793:はちみつ餃子
20/02/12 17:47:16.08 KQxiYwOn.net
C と C++ で解釈が違うのに結果として動作は同じみたいなのがたまにあってすげーなって思う。

794:デフォルトの名無しさん
20/02/12 18:09:20.78 goJJte/u.net
たとえば?

795:はちみつ餃子 ◆8X2XSCHEME
20/02/12 19:09:04 KQxiYwOn.net
>>770-771
if 文の条件式を見てて思い出した。
C だと条件式の評価結果を 0 と比較するというルール
C++ だとブールに変換するというルール。

まあ整数をブールに変換する規則は結局のところ 0 と等しいかどうかなんで
ちょっと回りくどくなってるだけなんだけど、
そういう違いがあっても互換性が維持されるというのがどこかで検証されてるんだろうと思うと、
手間かかってんなぁという感想が浮かんだ。

他にも列挙定数の型が C と C++ では違うとか……。
私が把握してるのはそんくらいだけど、
探せばもっとあるんじゃないかな。

796:デフォルトの名無しさん
20/02/12 20:25:01 ytylQgpT.net
>>766
>if(TRUE == !!b) のことか

さすがにこんな意味のない書き方が人の目につくほど蔓延りはしないだろう。おそらく>>743の妄想。

!!b は、bool型(と、しばしばオーバーロード)を備えた言語で非bool型の値bをbool型に変換するテクニックだろ。

797:デフォルトの名無しさん
20/02/12 20:38:11 rfok9Tr/.net
b!=0 で良い

798:デフォルトの名無しさん
20/02/12 21:12:18


799:h1wCYtKx.net



800:デフォルトの名無しさん
20/02/12 21:26:37 rfok9Tr/.net
(bool)b
はCへの移植の可能性があるならやっちゃダメ


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch