X



C++相談室 part139
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん (ワッチョイ f65b-zn+7)
垢版 |
2018/10/06(土) 00:59:48.54ID:CdYUXXMG0
次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512

C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part137 (正しくはpart138)
http://mevius.5ch.net/test/read.cgi/tech/1535353320/

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

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

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

----- テンプレ ここまで -----
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
0003デフォルトの名無しさん (ワッチョイ 6ee3-BkfR)
垢版 |
2018/10/06(土) 01:29:10.07ID:JjdhAE/r0
>>2
あれは複数形のsのつもりだった。

個人的には、コードにおいては、aaa に対する複数形の s は、aaas と書かずに
aaa_s と書いた方が分かりやすいと感じることがあるので。

ただ、配列の場合は、複数形の _s を付けて、リンクリストの場合は、
list または、List を付けるようにしている。

今回の場合も、リストなら List と書いたほうがいいかもしれない。
0005デフォルトの名無しさん (ワッチョイ e66f-vBoO)
垢版 |
2018/10/06(土) 01:52:36.08ID:OsNJaukk0
意味で考えたら自動的に型は合うでしょ。
意味だけ考えりゃ済むことを二重にするのが思考の節約ってのがわからん。
一重で済めばそれに越したことは無い。

グダグダの設計をなんとかするのにはシステムハンガリアンも有用と思うけど、
まともな設計が出来てれば要らんだろ。

「英雄のいない時代は不幸だが、英雄を必要とする時代はもっと不幸だ」
0008デフォルトの名無しさん (ワッチョイ 6ee3-BkfR)
垢版 |
2018/10/06(土) 02:10:13.19ID:JjdhAE/r0
>>5
たとえば、ポインタの場合の先頭に「p」が付いているだけでも、立派な「意味」になっている。

このような一般法則を用いないで、ポインタであるとう意味まで含めた変数名を
付けることは、基本的に不可能。

また、たとえば、名前の入った0終端文字列へのポインタを「pszName」という変数名を
付けているのは、かなり適切に意味を表していると思う。

「name」だけだと CString 型と 0終端文字列なのかの区別も付かない。
また、長いテキストの中の一部だけに着目した文字列の場合は、そのどちらでもないから
「psz」の接頭辞はつけない。

これにより、発見しにくいバグも減る。
0009デフォルトの名無しさん (ワッチョイ 6ee3-BkfR)
垢版 |
2018/10/06(土) 02:17:56.90ID:JjdhAE/r0
>>5
決められたフォーマットでファイルにデータを書き込むような場合、コード中、
メモリ中のデータのポインタと、これから書き込む fseek するためのファイルポインタ、
サイズなどが「対」または「コンビ」のようになって存在することがある。

そのとき、接頭の、fpos、p、size、len などでそれらが区別できることはとても有りがたい。

その場合、

fposData1 = pData1 - pTop;

のようなパターンが現れるだろう。

それに加えて、同じではない微妙に違った関数化が難しいようなパターンが現れくることがある。

そういうような場合に、ハンガリアン記法は、とても重宝する。

正しいコードが、記法からだけでほとんど機械的に分かってしまう事も多い。
0010デフォルトの名無しさん (ワッチョイ df7f-vBoO)
垢版 |
2018/10/06(土) 02:20:37.42ID:mx6yHsyJ0
テンプレートじゃ使えないしもはやC時代の遺物でしかないわな
現代じゃ害悪
0011デフォルトの名無しさん (ワッチョイ e66f-vBoO)
垢版 |
2018/10/06(土) 02:26:47.17ID:OsNJaukk0
>>8
思考のレイヤが違うな。
やりたいことの意味をプログラムに落とし込んだ結果としてなんらかの型に収まるという考えでやってるので、
型が意味だと言われたら本末転倒な感じがする。

まあ型中心の方がわかりやすいってのならそれはそれでいいよ。
0013デフォルトの名無しさん (ワッチョイ 6ee3-BkfR)
垢版 |
2018/10/06(土) 02:31:46.61ID:JjdhAE/r0
>>11
たとえば、floatをdoubleに変更したことはあるが、
BYTE 型を int 型に変えたりすることはまず無い。

16BIT時代から32BIT時代へ移行するような場合は、
変更したことはあるが、機械的に置換すればいいというわけではなかった。
32BIT時代から64BIT時代への以降においても、機械的に置換して
済むものではないと思う。
0014デフォルトの名無しさん
垢版 |
2018/10/06(土) 03:24:51.76
目で追っただけでカメラが視線を検知してどの変数を見てるか特定して型を表示してくれ
できれば脳に直接語りかけてくれ
0018デフォルトの名無しさん (ワッチョイ aab3-GL8C)
垢版 |
2018/10/06(土) 07:56:58.40ID:Gg92+MKo0
>>8
> 「name」だけだと CString 型と 0終端文字列なのかの区別も付かない。
今どき0終端文字列なんてAPIに渡したりする時など以外には使わんだろ
ほとんどない例外事項に対処するためによく使うケースの効率落とすのはダメプログラマーにありがち
0027デフォルトの名無しさん (ワッチョイ 26bd-PkCJ)
垢版 |
2018/10/06(土) 09:40:20.41ID:d9G2ZJ030
Cの頃はIDEに検索機能さえあれば、検索した結果をメモ帳にでも書きつけて行って簡単にコールグラフを作れた
なぜなら関数名はプログラムの中でほぼ一意とみなせたので、walk aroundの強力な指針となった

C++になったらそうでもなくなった
なぜなら関数名がオーバーロードされるようになった上に異なるクラスが同名のメソッドを持っているというケースが頻出する上に、
テンプレートやnamespaceまであるので
Cの頃から比べたら、解析の困難さは異次元のレベルすぎて草
現実的に解析を行えるかは、ソースコードの字面がどうかかれているかよりもクラスの意味が整理されているかに大きく依存する

もし仮に万が一、#if〜#endifで切りまくられたソースコードで正しくメソッドの定義元や呼び出し元一覧がクラスがテンプレートの
仮引数として渡されているケースについても正しく信用に足る一覧が出るIDEならちょっと欲しいかも
0030デフォルトの名無しさん (ワッチョイ c0f2-vBoO)
垢版 |
2018/10/06(土) 10:59:24.19ID:GNSvvE670
コンパイラ(とそのコードを書いた本人)以外の人が把握するのが難しくなったということだろ。
ADLやらSFINAEやらで実際にどこの何が呼ばれるのか、プログラム全体をひっくり返してみないと
わからなかったりするしな。
0031デフォルトの名無しさん (ワッチョイ 26bd-PkCJ)
垢版 |
2018/10/06(土) 11:00:25.81ID:d9G2ZJ030
>>28
doxigenは、なんかブラウザで閲覧できるようにするまでの設定がめんどくさかった思い出
およびコールグラフは出たが本当にグラフの画像しか出ない(シンボルをコピペできない)のでショボーン、
だったのでそんなにやりこんで使っていないスマンorz
それよかDOT言語が面白すぎたので遊び倒した

>>29
コンパイラのビルドとIDEのインテリセンス能力は関係ない(ハズ。LLVMは知らん
もし定義元を書き換えてエラーを起こせばエラーメッセージから呼び出し元がワカル、
という考えならテンプレートが絡んだ瞬間に目が眩んで死ぬ
0032デフォルトの名無しさん (ワッチョイ aab3-GL8C)
垢版 |
2018/10/06(土) 11:48:26.03ID:Gg92+MKo0
>>31
> コンパイラのビルドとIDEのインテリセンス能力は関係ない(ハズ。LLVMは知らん
技術的には可能だって話

> もし定義元を書き換えてエラーを起こせばエラーメッセージから呼び出し元がワカル、
> という考えならテンプレートが絡んだ瞬間に目が眩んで死ぬ
そんなアホな発想するやつがいるとは思わなかったよ w
0037デフォルトの名無しさん (ワッチョイ 70b3-RseO)
垢版 |
2018/10/06(土) 14:51:10.85ID:9hP5TFYu0
それそれ
型と値は区別しやすいようにしてんだから考え方は似たようなもんだ

あと前スレ>>986
エアプログラマが調子に乗るな
ドカタだろうが何も生み出さない素人よりよっぽど偉いわ
0041デフォルトの名無しさん (スップ Sd02-YLcB)
垢版 |
2018/10/06(土) 15:45:25.65ID:8LWAn6RCd
ハンガリアンなんてなんの役にも立たないどころか邪魔にしかならないルールでコーディングしてたら周りから叩かれるだろ
ジジイしかいないところでやってるのかな
0042デフォルトの名無しさん (ワッチョイ d980-A6IM)
垢版 |
2018/10/06(土) 16:10:25.13ID:FAIH8E2E0
この板には底辺ドカタしかいないのがよくわかるわ
C++スレで底辺ドカタのコーディング規約だけでもりあがってる
底辺ドカタがオレんとこではこうだといいはりあってる

コーディング規約を守ってもらうのも当然だが
ちゃんといわれたとおりに適切に動くもん作りなさい

そっちのほうが重要だからな
底辺ドカタはこの部分がおもいっきり欠如している
0043デフォルトの名無しさん (ワッチョイ 70b3-RseO)
垢版 |
2018/10/06(土) 16:27:40.58ID:9hP5TFYu0
>>40
こっちのセリフだよw
>>10>>9へのツッコミや反論に見えるのか?w
一連のハンガリアンの話でハンガリアンをくさしたいだけだろ(多分C++ coding standardsか何かの受け売り

ついでに>>18でほとんどない例外事項とか言ってるが、
C++11からstd::stringがゼロ終端になったのは何でだろうね?w
0045デフォルトの名無しさん (ワッチョイ d980-A6IM)
垢版 |
2018/10/06(土) 16:34:55.04ID:FAIH8E2E0
むしろプログラマーとか日本では最底辺のドカタだからな
なにいきがってんの
0052デフォルトの名無しさん (ワッチョイ 6ee3-BkfR)
垢版 |
2018/10/06(土) 18:01:49.07ID:JjdhAE/r0
>>25
自分がやってるやり方だと、システム・ハンガリアンについては、
文字列(CStringでstrXxxx、0終端文字列で、szXxxxなど) と BOOL 型 (bXxxx)、
ポインタ(pXxxx)、についてだけ接頭辞を必ず使っている。

整数型、浮動小数点型については原則的には接頭辞を付けてない。
ただし、浮動小数点と整数を明確に区別したいときには、特に浮動小数点変数
についてだけは、「f」を付ける事があるが、float と double は区別してない。
int 整数についは、どうしても必要な場合は「i」を付ける場合があるが、普段は付けない。

今のところ、リストについては、接頭辞ではなく、接尾語のように、
XxxxList と付けているが、メンバ変数としては、

class CYyyyy {
  ・・・
  CMyList<Aaaa> m_listXxxx;
  ・・・
};
と書くことはある。

配列の添え字は、idxXxxx、個数は、numXxxx、id 番号は、idXxxx。
最大値については命名に迷うことが多い。maxXxxx とすることもあるが、
numXxxx とは、「1」しか値が違わないことも多いので迷う。


新しく作ったクラスのオブジェクトについては、基本的には接頭辞としては
付けないが、どこか、変数名の一部でクラスが分かるようにすることはある。

たとえばの話、CPerson クラスのオブジェクトなら、person1、person2
などとすることが多い。
0054デフォルトの名無しさん (ワッチョイ 6ee3-BkfR)
垢版 |
2018/10/06(土) 18:05:29.36ID:JjdhAE/r0
>>25
それから、今のところ、std::string は使わずに、CString ばかり使っているので、
std::string と CString の文字列を区別する命名法は普段は考えたことが無い。

多分、std::string を、sstrXxxx、CString を strXxxx にするか、逆に、
strXxxx と、cstrXxxx にするかだと思う。

それは、どちらか好んで使いたい方を短くするように命名法を決める。
0056デフォルトの名無しさん (ワッチョイ 6ee3-BkfR)
垢版 |
2018/10/06(土) 18:13:01.41ID:JjdhAE/r0
>>25
>std::unordered_set<Company>みたいなテンプレ使ったクラス、

これは使ったこと無いけど、list の命名に習うなら、グローバル変数の場合は、

g_setXxx
g_usetXxxx

みたいな事になるかと思う。長すぎるのは困るので迷いどころ。
0057デフォルトの名無しさん (ワッチョイ 26bd-PkCJ)
垢版 |
2018/10/06(土) 18:13:54.52ID:d9G2ZJ030
>>51
上の話の流れからすると単に「土方」と書かれると
「ちゃんといわれたとおりに適切に動くもん作」らない「底辺ドカタ」(>>42)と区別が付かないから
補足の必要が認められた

あと下位の設計が((特段の事態が生じない限り)上位の設計に従うのは
今日日であっても変わらないので、>>51が設計とコーディングが完全に合一だとする主張だとするといいすぎ
0058デフォルトの名無しさん (ワッチョイ 70b3-vBoO)
垢版 |
2018/10/06(土) 18:17:31.24ID:TQR3/dVH0
>>55
図星ですって素直に言えばいいのに
メタプログラミングやったことも無いのにテンプレート云々を理由にして
>>10と同じように「今どき変数の命名法なんか要らん」と、ハンガリアンだけでなく
あらゆる命名法を全否定してたアホだろ?w
受け売りばっかしてないで少しは自分のアタマ使えやボケが
あ、使うアタマも無いから受け売りしてんのか
0060デフォルトの名無しさん (スップ Sd02-YLcB)
垢版 |
2018/10/06(土) 18:47:51.32ID:8LWAn6RCd
今週は一般的な命名法って何のこと?
ハンガリアンの話をしてるのにな
0061デフォルトの名無しさん (スップ Sd02-YLcB)
垢版 |
2018/10/06(土) 18:48:44.44ID:8LWAn6RCd
今週はは勝手についてしまった
0062デフォルトの名無しさん (ワッチョイ d980-A6IM)
垢版 |
2018/10/06(土) 18:49:16.40ID:FAIH8E2E0
低学歴知恵遅れには
計算機のアトミックな型という概念がないからな
0063デフォルトの名無しさん (ワッチョイ d980-A6IM)
垢版 |
2018/10/06(土) 18:51:00.59ID:FAIH8E2E0
ともかく低学歴が書いたコードは読みにくい
0064デフォルトの名無しさん (ワッチョイ a6b3-XM+q)
垢版 |
2018/10/06(土) 18:51:48.57ID:3GKrUe5y0
C++は低脳でも使える言語だが、C++使ってるから低脳ってわけでもない。
0065デフォルトの名無しさん (ワッチョイ 70b3-vBoO)
垢版 |
2018/10/06(土) 18:52:08.17ID:TQR3/dVH0
>>59
同じ事しか言えんのか?
お前>>5を擁護してたろ?
あと型が知りたきゃF12押せって話もあった
(俺は別に型がわかるような命名を常にすべきとは思わんが)
彼らは型がわかるような命名法全否定してるだろうが

>誰も一般的なルールの話なんてしてない
一般的なルールって何?TMPの話ならTMPでデファクトスタンダードになってる命名法がある、って話なんだけど
お前話について来れてもないだろ?
0066デフォルトの名無しさん (ワッチョイ b7b3-Ww/X)
垢版 |
2018/10/06(土) 18:55:18.77ID:M3PJP+oD0
>>50
まさに問題の本質を逆説的に示している。
仕様どおり、仕様書の解釈に誤解の余地がないほどにちゃんと仕様書が書ける人が少なすぎる。
行間を読めない現業の人がいる限り、行間を読めという免罪符は通用しない。
それを何だかんだ言っても実現してくれる(一部の)エンジニアはすごいと思う。
0067デフォルトの名無しさん (ワッチョイ d980-A6IM)
垢版 |
2018/10/06(土) 18:56:13.41ID:FAIH8E2E0
やはり低学歴知恵遅れにはjavascriptが限界
もしくはさらに最底辺のウンコスプリプトが限界
006865 (ワッチョイ 70b3-vBoO)
垢版 |
2018/10/06(土) 19:02:35.18ID:TQR3/dVH0
>>ドコグロ MM36-GL8C=ワッチョイ aab3-GL8C
みたいなアホにはわからんだろうから補足すると、
メタプログラミングにおける”型”とは
・定数
・型
・テンプレート
これらのことだ
それらのうちどれであるかを示すような書き方は標準ライブラリでも普通にされてる(テンプレート・テンプレートパラメータの命名規則は見たことないが)
ハンガリアンの考え方と同じだろうが
(もう一度言うけど個人的には常に守るべきとまでは思わない、所詮可読性や一貫性・利便性のためのもの
0070デフォルトの名無しさん (スップ Sd02-YLcB)
垢版 |
2018/10/06(土) 19:10:00.82ID:8LWAn6RCd
いや、そのテンプレートの話とハンガリアンを結びつけるのは無理ありますわ…
0073デフォルトの名無しさん (ワッチョイ d980-A6IM)
垢版 |
2018/10/06(土) 19:12:29.62ID:FAIH8E2E0
なんにも分かってない低学歴知恵遅れの元ウンコスクリプターが
分かった気になってC++さわると
必然的にこうなる
0074デフォルトの名無しさん (スップ Sd02-YLcB)
垢版 |
2018/10/06(土) 19:15:13.83ID:8LWAn6RCd
だめだこいつ話が通じてねえw
0075デフォルトの名無しさん (ワッチョイ 70b3-vBoO)
垢版 |
2018/10/06(土) 19:17:33.32ID:TQR3/dVH0
こっちのセリフだよ
>>41
>ハンガリアンなんてなんの役にも立たないどころか邪魔にしかならないルールでコーディングしてたら周りから叩かれるだろ
お前もどうせ受け売りだろ
0076デフォルトの名無しさん (ワッチョイ aab3-GL8C)
垢版 |
2018/10/06(土) 19:26:32.20ID:Gg92+MKo0
>>65
> TMPの話ならTMPでデファクトスタンダードになってる命名法がある、って話なんだけど
そんな話をしてるのも オ マ エ だけ
他のみんながしてるのは ハ ン ガ リ ア ン な w
0079デフォルトの名無しさん (ワッチョイ e66f-vBoO)
垢版 |
2018/10/06(土) 22:43:12.86ID:OsNJaukk0
>>65
俺は >>5 で命名法を全否定したつもりはないけどな。
システムハンガリアンというか、 >>4 の「型と意味の二重の思考」を批判した。
部分的にはアプリケーションハンガリアン的なものは有りだと思ってるよ。

型は当然に意味を表すために付けられる (べきである) し、
名前は (なんらかの命名規則によって) 意味を表すようにする、
結果的に名前が型を表すこともあるけれども、
一貫して「意味」で考えればよいだけというつもりだった。

意味 → 型、名前

で、>>8 で「型は意味だ」ということが述べられていたので、

意味 → 型 → 名前

というつもりなら、中心に据えるレイヤが違うんだろうな (でもやってることはそんなにかわらん) ってことで、
な〜んか腑に落ちないけどまあいいやという気持ちが >>11 って感じ。
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況