C++相談室 part148

■ このスレッドは過去ログ倉庫に格納されています
2020/01/31(金) 20:54:06.26ID:Nt0XFA2s
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

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

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

[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
2020/02/09(日) 20:05:21.07ID:J3Qn0niW
多い方に合わせろって話でもないだろう。
>>568の通りそれぞれの仕様に合わせて適切に扱えってこと。
2020/02/09(日) 20:05:58.49ID:PT76WH2y
>>579
ほんこれ
2020/02/09(日) 20:07:59.65ID:54+KBSAm
GetModuleFileNameとか仕様作った奴のセンスを疑う
2020/02/09(日) 20:20:16.24ID:6++kPC7v
>>580
誰も多い方に合わせろなんて言ってないのに…
単にそういうケースが多いって言うだけの話であることも説明しないとわからんのかな?w
2020/02/09(日) 20:30:08.24ID:J3Qn0niW
なら問題ないケースもあることを理解してるわけだ。だとすると>>552で指摘してたのはなんだろうと。
2020/02/09(日) 20:34:19.93ID:6++kPC7v
>>584
えっ?
まだ(ことが多い)ってわざわざ書いてる意味がわからんのか?
まともな奴と会話してる時ならいちいち書かないんだが、ネット掲示板なのでわけわからん奴に絡まれないようにわざわざ書いたのに想定外の低能さんなの?
2020/02/09(日) 20:46:39.77ID:J3Qn0niW
>>585
つまり>>552は、まずい場合もあるしそうでない場合もあるという意味のない指摘なわけだ。
ようやく>>539に戻れたな。

>>537
マシとか言う以前にそもそも動作が違うんだが。
bがTRUEと一致するかどうか判断するのに他にどういう書き方をするというんだろう?
2020/02/09(日) 20:52:41.00ID:mORiFTgk
bがTRUEと一致する条件の話はしてなくて
boolに対するif文をどう書くかの話だろ

APIの使い方なら他スレでやって
2020/02/09(日) 20:55:58.33ID:PT76WH2y
余所でやれって、APIと言語仕様のズレの話だろ
正しい理解はどのようなものかという興味は
スレ違いじゃねえぞ
2020/02/09(日) 21:03:28.51ID:mORiFTgk
APIの正しい理解ならAPIのドキュメントを見れば良いのでは?

もともとのboolの話とは全く関係ないですね
2020/02/09(日) 21:05:18.68ID:6++kPC7v
>>586
> つまり>>552は、まずい場合もあるしそうでない場合もあるという意味のない指摘なわけだ。
お前には意味ないのかもな…
必死になりすぎw
2020/02/09(日) 21:05:59.85ID:J3Qn0niW
>>533に書いたが、boolじゃなくてBOOLの話をしているのになぜかboolと混同する人が
2020/02/09(日) 21:06:45.54ID:mORiFTgk
boolの話題でbool以外を語るのはこんな感じ

内部的に固定小数点なfloatライブラリもあるぞ
内部的にvectorなmapライブラリもあるぞ
2020/02/09(日) 21:07:53.15ID:mORiFTgk
BOOLも同じ
意味的なBOOLが前提
それ以外は特殊事情
2020/02/09(日) 21:21:02.28ID:J3Qn0niW
>>590
意味のあるなしは主観だからいいとして、結局これ理解できたかな?

>>537
マシとか言う以前にそもそも動作が違うんだが。
bがTRUEと一致するかどうか判断するのに他にどういう書き方をするというんだろう?
2020/02/09(日) 21:23:11.71ID:6++kPC7v
>>594
>>552
低能は一度指摘されたことを何度も繰り返すw
596
垢版 |
2020/02/09(日) 21:32:30.02ID:Z95s67CZ
boolができるまでは

if (!!b)

こういうイディオムもありましてね
2020/02/09(日) 21:42:44.86ID:J3Qn0niW
>>576を理解しているなら

>bがTRUEと一致するかどうか判断するのに他にどういう書き方をするというんだろう?

このような判断がが必要な場合があることも理解しているはずだろうが、
結局この質問には答えられない(答えたくない)ようだな。
2020/02/09(日) 22:05:36.89ID:6++kPC7v
まだやってるのかよw
無能無限ループ乙
2020/02/09(日) 22:07:19.29ID:EoI3r47q
あいかわらずしょーもない話題だと盛り上がるのな。
600
垢版 |
2020/02/09(日) 22:16:06.44ID:Z95s67CZ
goto、マクロ、BOOL
全部C言語の範疇なんだよなw
おじさんがんばりすぎ
2020/02/09(日) 22:18:57.48ID:aEgJYC9i
つか真理値の型であるbool型および
真理値の型としての名前を与えられたBOOL型の議論が
Win32 APIの仕様という現実に汚染されてぐちゃらけてますな
TRUEに幅が有る、なんていうおかしいことを言い出す香具師まで出る始末、!
2020/02/09(日) 22:23:19.21ID:J3Qn0niW
本当は昨日で終わっていたはずの話題なんだがな。
2020/02/09(日) 22:31:58.84ID:mQrdek/f
>>487
え?話の発端は >>438 でしょう?
>>439>>438 の bool を BOOL にすげ替えたミスリードでしょう?

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

前提条件を全然考慮せず、条件反射的に
>if (b == TRUE) と書くのはバグの原因になる
と判断するのは老害的発想と私は断定しますね
2020/02/09(日) 22:33:23.30ID:EiJfhZVq
>>602
お前が言うなよww
2020/02/09(日) 22:33:54.63ID:aEgJYC9i
一般論として、APIの呼び出しが成功しました、という情報にはそれ以上幅も糞も無い(成功した要因など知っても無駄
から、成功=TRUE、失敗=FALSEとする割付の下では、TRUEこそ単一値として規定されるべきブツに他ならない
よって、一般論としては b == TRUEは言うほど糞ではないはずであった、
2020/02/09(日) 22:37:13.53ID:aEgJYC9i
まあエラー要因を複数種類返したい、ということなら
成功判定は b == SUCCEEDEDでSUCCEEDEDでなかったらエラーコードが入っている、という
INTかDWORD返しがストレートやったがな!(成功時非0を返す、とか言われるよりは
607デフォルトの名無しさん
垢版 |
2020/02/09(日) 22:42:00.12ID:VD5bohdG
if( b == TRUE ) って、結局 if( b ) ってことだろ。
2020/02/09(日) 22:45:14.84ID:Z95s67CZ
クソワロタ
口調も激変
609デフォルトの名無しさん
垢版 |
2020/02/10(月) 00:02:35.66ID:SkPzv01G
>>555
ヘッダファイルの中で TRUE の値が -93 に #define で定義されていたとしても、C/C++ の仕様だと、0だけが偽で、0以外は真であることだけはANSI Cで決まっているので、それはない。
2020/02/10(月) 00:06:15.78ID:hYCIpnsp
つまり、
#define TRUE (-93)
はANSI Cの規格上非合法だからそれはない
611デフォルトの名無しさん
垢版 |
2020/02/10(月) 00:07:32.18ID:SkPzv01G
>>548
その場合で、かつ、b が TRUE に一致するもの以外を除去したいなら
if ( b == TRUE ) と書く以外には無い。
しかし、Win32 API の仕様でも、そのようなことを判定する必要があることはない
ように通常、作られている。
何人かが指摘しているように、FALSE との判定は良いのだ。
TRUE との判定はまずい。
2020/02/10(月) 00:08:23.83ID:hYCIpnsp
gotoといいBOOLといい、闇が深いな
裾野が広がれば、底辺は底なしカヨ、
2020/02/10(月) 00:08:59.15ID:hYCIpnsp
>>611
>>601
2020/02/10(月) 00:39:11.13ID:NGNAXTbr
【IT】不動の人気を誇る「Python」、評価が二分される「Java」「JavaScript」
https://egg.5ch.net/test/read.cgi/bizplus/1581244420/

>JavaScript、Java、Python、「C++」「C」が特に多くの人に習得されたプログラミング言語だった
2020/02/10(月) 01:06:29.16ID:2gVSY1CN
C++11規格でJavaやC#の優位性がかなり失われた気がするわ。
2020/02/10(月) 01:07:48.45ID:Ro8qON5e
c#ならまだしもjavの優位性って?
2020/02/10(月) 01:35:35.28ID:SkPzv01G
>>614
というか、JSやJavaは、ちゃんと学んだ人も多いだろうが、
Pythonを実際に使ったことのある人はかなり少数派だと思う。
2020/02/10(月) 01:38:59.61ID:SkPzv01G
>>617
Javaは、GUIも出来たしブラウザ上でも動いたし、他に代わるものがなかったので
それしか選択肢がなかったために実際に使った人は多かったはず。
JSも、HTMLを使おうとした際にそれしか動的言語は無かったから同様。

一方で、Pythonに関しては、似たようなものは他にたくさんあるし、
自分以外の人に使ってもらうにも実行環境のインストールが必要だし、
Javaと違って互換性にも問題あるので使いにくい。
2020/02/10(月) 01:43:33.69ID:SkPzv01G
>>618
つまり、Pythonの評価が高いのは、前評判だけで実際に使った人が少ないから。
620デフォルトの名無しさん
垢版 |
2020/02/10(月) 03:53:35.38ID:rxX2x5Pb
んなわけない。
2020/02/10(月) 04:03:09.14ID:2gVSY1CN
Pythonはtypoがつらい。
2020/02/10(月) 08:01:35.21ID:staO5LAL
ごちゃごちゃいうよりまずはいっぺんオッPythonで
そこそこの規模のプログラム(最低1000行以上)かいてみりゃわかる
はっきりいってクソだよ
あんなもんで巨大なプログラムはとても書けたもんじゃない
2020/02/10(月) 08:53:11.04ID:GJT/1Bxa
自分で1000行も書かなくても、どこかの誰かが書いてくれたライブラリを呼び出せば
望んだ仕事をやってくれるって部分がPythonの好まれる理由じゃないのん?

C++を使う人は、Pythonの流行を裏から支えてる感じで。
2020/02/10(月) 10:10:17.80ID:hDJC6jsQ
pythonで1000行くらいで根をあげてるようじゃ
どんなコード見ても文句言い出すだろ。。仕事にならんわ。
2020/02/10(月) 10:24:50.55ID:JgTqubiS
インデントをきっちり合わせないといけないので、Cの適当なインデントにうんざりしてる人にはむしろ合うかもしれない
でも関数やブロックが大きくなると、同一階層を探すのがつらくなるので、適切なブロック、関数分けが必須になる
いずれにしても、神経質な人には合ってるのかもしれない
2020/02/10(月) 10:46:13.48ID:oMyz9pGE
機械学習ならpythonほぼ必須なんだが
いまだにやったことないとか
ロートルなのを白状してるようなもん
2020/02/10(月) 11:15:12.10ID:yW0oU9fF
変数がどんな型にも化けられる変態言語
2020/02/10(月) 11:25:16.00ID:8A84p9rG
pythonがいいとは思わないけど、perlがクソすぎるので相対的にマシだから流行ってる
それ以上の理由はないと思う
2020/02/10(月) 11:37:39.28ID:oMyz9pGE
perlの代替っていつの時代の話だよ
お前完全に取り残されてるぞ
2020/02/10(月) 11:50:23.10ID:SkPzv01G
Pythonは、スマホで動かすのは難しいらしい。
少なくともスクリプト言語として動かすのは困難。

デスクトップマシンですら、
・互換性の問題がある。Ver 2系と Ver 3系で大幅に異なると聞いた。
・Windowsですらどの処理系が標準か不明。
・GUIがちゃんとまともに使えるかどうか不明。
2020/02/10(月) 11:55:31.13ID:SkPzv01G
>>630
Pythonのせいではなく、Perlのようなスクリプト言語がそもそも使えないという
スマホの限界だとは思う。
スマホでも使えることは使えても、IDEのような専用環境だけで使えるだけでは
本来のスクリプト言語としては使い物にならない。
このスマホの時代に Perl, Python, Ruby は合わないかも。
632デフォルトの名無しさん
垢版 |
2020/02/10(月) 11:58:33.88ID:SkPzv01G
iOS, Android 共通にスクリプト的なことをやりたいなら、もう、スクリプト言語は諦めて、
C++で書いておいて iOSではSwift とリンクし、Androidでは、JNIを使ってJavaから
呼び出すほうがずっと簡単。
なお、AndroidならシェルスクリプトがPythonなんかより遥かに簡単に使える。
2020/02/10(月) 12:13:49.40ID:gblDkkh1
>>625
- 括弧などに従って自動でインデントが付く
- 手動 (あるいは半自動) でインデントの位置を合わせる

これの二択だったら前者の方が「きっちり」してると思うわ。
まあインデントの付け方にいくつかの選択肢がある点はやりづらい面も
あるかもしれんが、自由度と統一性は両立できないもんだしな。

Python はいじったことないからよう知らんけど、 (インデントで構造を表す系統の文法である) Haskell を書くのはつらかった。
Haskell ではインデントと改行の替わりに波括弧とセミコロンも使えるけど、Python にそういうのないの?
2020/02/10(月) 12:34:04.03ID:oMyz9pGE
pythonをswift, javaなんかと比較してる人は
隔離された世界で誰にも使われないアプリを細々と作ってる感じがするわw
学習系を含むデータ解析のツールとして環境が優れてるからpythonが人気なんだよ
c++でテンプレートいじってるよりビッグデータ解析してビジネス提案できる方がはるかに収入高い
2020/02/10(月) 12:51:05.23ID:gblDkkh1
おっ、煽り入りました〜〜
2020/02/10(月) 13:26:43.90ID:NGNAXTbr
ビジネス提案おじさん
2020/02/10(月) 14:18:49.02ID:SkPzv01G
>>633
ブロック開始終了記号とインデントを両方組み合わせたものが一番分かり易くて間違いにくい。
インデントだけでやると、個人的には見間違いそうで神経をすり減らすので辛い。
638デフォルトの名無しさん
垢版 |
2020/02/10(月) 17:30:56.95ID:rxX2x5Pb
研究者が使うのにPythonは良い選択なんじゃないの。
事務作業にVBAが良い選択なのと同様に。
2020/02/10(月) 17:40:26.33ID:pqZ9DEAl
今さらですが、そもそもWin32のFALSEって、0であることは保証されてるんですか?

BOOL b = FALSE;
if (b)
{
  ここに来ないことは保証されてるんですか?
}
2020/02/10(月) 17:42:58.97ID:SkPzv01G
>>639
まともな C/C++ では、FALSE はどんな処理系でも 0 であることが保障される。
2020/02/10(月) 17:43:39.45ID:SkPzv01G
>>639
当然、そこに来ないことも保障される。
2020/02/10(月) 17:52:19.21ID:M5G7J8Pl
>>639
規格書のようなレベルで規定されているかどうかは知らないけど、公式ドキュメントの至るところで
FALSEは0である前提で書かれているものが見つかるから、そこを疑う必要はないと思う。

>>640
FALSEはWindows SDKの定義であってC/C++とは直接関係ないんだが。
2020/02/10(月) 18:04:03.15ID:gblDkkh1
>>640
現実にはそうだってのならわかるが、質問は保証があるかどうかなんだから、根拠を添えろよ。

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

BOOL が int であることは発見できた。
https://docs.microsoft.com/en-us/windows/win32/winprog/windows-data-types

should be TRUE or FALSE って書いてあるのにこれに反するような API があるのはアレだよな……。
2020/02/10(月) 18:06:40.24ID:AZ4KAaI2
システムハンガリアンもそうだけど明白な違反が堂々と放置されているからなあ
2020/02/10(月) 18:08:58.46ID:SkPzv01G
>>642 >>643
[根拠]
数学的に以下の根拠となる:

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

1, 2 を両方成り立たせるためには、FALSE は必ず 0 でなければならないことが
証明される。
2020/02/10(月) 18:10:00.98ID:SkPzv01G
数学が大事です。
今の場合、仕様書に書いてなくても、数学的に考えれば絶対であることが証明できます。
2020/02/10(月) 18:13:48.89ID:M5G7J8Pl
昨日の奴かw
BOOLとboolは別物だということが結局最後まで理解できなかったんだな。
2020/02/10(月) 18:19:36.47ID:1F9oSbm6
windows apiのスレでやってくれよ
2020/02/10(月) 18:21:23.11ID:1D/jLqBa
>>645
頭が悪いとか話が通じないってよく言われない?
言われる度に相手の方が間違ってると思ってるだろうけど、話が通じてないのはお前が自分の間違いを認識できてないからだぞw
2020/02/10(月) 18:22:28.83ID:SkPzv01G
このスレには、失礼ですが、はちみつさんも含め、数学に弱い人が多いようです。
651デフォルトの名無しさん
垢版 |
2020/02/10(月) 18:23:02.20ID:SkPzv01G
>>649
いや、むしろ逆に現実では天才と呼ばれています。
2020/02/10(月) 18:25:05.67ID:SkPzv01G
仕様書にすべては書いてなくても、数学で考えれば絶対であることが証明できる事柄があるのです。
今回のもその一例です。
2020/02/10(月) 18:25:15.66ID:gblDkkh1
ああ、荒らしに来ただけか。
まぜっかえすにしてももうちょっとマシなこと言えよ。
2020/02/10(月) 18:27:13.76ID:rZ6GQco7
東大数学科卒だが
>>650は頭が弱いと思う
655デフォルトの名無しさん
垢版 |
2020/02/10(月) 18:27:37.23ID:rxX2x5Pb
マクロはほとんど書く必要なくなったよね。
2020/02/10(月) 18:27:43.95ID:SkPzv01G
失礼ですが、はちみつ氏は、C++の仕様には詳しいですが、それ以外は結構間違っています。
2020/02/10(月) 18:29:09.02ID:rZ6GQco7
>>656
ここでの君の書き込みだけで判断すると
君が間違ってる可能性が高い
658デフォルトの名無しさん
垢版 |
2020/02/10(月) 18:29:40.36ID:SkPzv01G
>>654
でも現実に私は天才と言われています。
2020/02/10(月) 18:30:41.13ID:rZ6GQco7
数学の実績は?
660デフォルトの名無しさん
垢版 |
2020/02/10(月) 18:31:14.06ID:SkPzv01G
>>1
私は、東大数学科の人とは意見が一致することが多いです。
よく考えてみてください。
もし分からないようなら、多分、あたなは東大数学科ではないか、レベルが落ちてしまったと思われます。
2020/02/10(月) 18:33:21.87ID:rZ6GQco7
学科は?
2020/02/10(月) 18:33:32.23ID:M5G7J8Pl
まとめるとこう。

1. BOOL型およびTRUE/FALSEは真偽値として用いるために*Windowsで独自に定義*されたものだが
 厳密には真偽値と振る舞いが異なる
2. 具体的には、FALSEでなれければTRUE、TRUEでなければFALSE、という排中律が成り立たない
3. 排中律が成り立たない以上、FALSEとの比較、TRUEとの比較はそれぞれ意味がある
2020/02/10(月) 18:34:10.03ID:SkPzv01G
ここは、学歴も実績も嘘を付けてしまうので参考になりません。
東大数学科と言うのもたぶんデタラメでしょう。
2020/02/10(月) 18:34:25.57ID:rZ6GQco7
なんでWindows前提?
2020/02/10(月) 18:37:31.54ID:rZ6GQco7
排中律君も数学君と同じ人かと思った
違うのかな?

普通の言葉で書こうよ
書けるでしょ
2020/02/10(月) 19:01:26.22ID:gblDkkh1
>>664
TRUE を持つ内では皆が共通に論じられるほど広く知られたもののひとつだからでしょ。
反例としてはひとつあれば充分。
ちなみに「TRUE と比較するべきではない」に対する反例ね。

true であれ TRUE であれ、それと == で比較するのが罠になりやすいっつーのは
罠になりやすい部分として有名すぎて逆によく知られている常識だが、
絶対不変の定理みたいに言い始めたやつがいたから変なことになってるんだよ。

現実はそんな綺麗なもんじゃねーよっていうのに Windows はうってつけだろ?
2020/02/10(月) 19:02:19.07ID:VRCQc/iz
BOOLはWindows APIでしか使わないと思ってるから話が通じないんだな

数学君はなぜ話が通じない?
BOOLがTRUE, FALSE, UNKNOWN, ERROR
からなる集合だったら?
2020/02/10(月) 19:04:47.41ID:4ZzuDNO4
>>664
>>639からの流れで、あくまでWin32APIの中でのFALSEの話をしているからだろう
2020/02/10(月) 19:06:03.16ID:VRCQc/iz
BOOLは非常に広い環境で使われていて
その多くはTRUE/FALSEの2値を示す型として使われる

こういう普通の環境では
if (b) / if (!b)
で判断するのが最良

そうではない特殊な環境(Windows APIなど)は
個々のAPI別に語らないと意味が無い
2020/02/10(月) 19:06:46.57ID:VRCQc/iz
Wimdows APIに限定した話ならここですべきではない
他へ
2020/02/10(月) 19:33:07.36ID:M5G7J8Pl
つまり、Windowsで>>439のように書いていたのをWindowsのBOOLを知らずに否定しちゃう人、
というネタそのものを体現してくれたわけだな。
2020/02/10(月) 19:35:42.65ID:Ro8qON5e
BOOLについて議論するならどのBOOLか限定しないと
enum BOOL {TRUE,FALSE};
みたいなのかもしれないし

負論理の入出力ポート読み書きする値だとかで順番も重要だったりして
2020/02/10(月) 19:47:34.98ID:VRCQc/iz
>>671
何が「つまり」だか

Windows APIが色々と特殊なのは知ってるよ
Windows 2.0から組んでるし

特殊事情はあくまで特殊事情
2020/02/10(月) 19:56:01.41ID:M5G7J8Pl
そもそも、特殊じゃない「普通の環境」のBOOLって何ぞ?
typedef bool BOOL; とかw
675デフォルトの名無しさん
垢版 |
2020/02/10(月) 20:01:48.67ID:rxX2x5Pb
https://ideone.com/T9gWWT
こうなるので、負の型にキャストするのが良いんですかね?
2020/02/10(月) 20:25:38.47ID:L7QZkeGE
なんでBOOLの話をしてんだよジジイども
2020/02/10(月) 20:46:16.46ID:te1zn0Q+
標準にはboolと_Boolしかないんだからそれ以外はどこぞの馬の骨が好き勝手に決めただけの独自定義
そのライブラリのマニュアル熟読しろでこの話は終わり
2020/02/10(月) 21:07:46.28ID:oMyz9pGE
>>675
そうなんだけど
C言語スレでやれ
じじくさい話ばっかりでうんざりするわ
2020/02/10(月) 21:11:10.36ID:dan9Jlhp
ナウでヤングな話題よろ
■ このスレッドは過去ログ倉庫に格納されています