C++相談室 part153
at TECH
[前50を表示]
300:デフォルトの名無しさん
20/10/19 00:20:11.11 lLBStDOZ.net
コンパイラの都合というよりかはcとの互換性とランタイム速度優先のための仕様によるものだろう。
てかむしろもっとコンパイラの都合考えたらもう少しまともな仕様になっとるわ。
301:デフォルトの名無しさん
20/10/19 05:23:08.92 f5AfjsGE.net
スーパーマンはある種の天才で、体系的に天才を教育する方法はないと思う。特に今現在の教育は全体の平均値を上げる事に主眼を置いているから。
大多数がほどほど幸せになる方法としてある程度うまくいってたけど、極少数が全体に絶対的な影響を及ぼすソフトウェアの世界だと効率の悪さが目立ってくるよね。
天才を見つけておいて必要な時に協力してもらうしかないんじゃないかな。全てにおいて天才はいないし来てもくれないので、得意分野では天才的みたいな奴と仲良くしておくぐらいか
302:デフォルトの名無しさん
20/10/19 11:06:36.21 4f6/Swqm.net
体系的に天才を教育する方法
ってのは実は簡単で、C++をやらせればいい
303:デフォルトの名無しさん
20/10/19 11:15:17.99 8zry6OWB.net
それは教育する方法ではなく
多数の中から天才を見つける方法なのでは?
304:デフォルトの名無しさん
20/10/19 11:37:24.11 VFLM6HTy.net
選ばれても来るかどうかは天才次第
305:デフォルトの名無しさん
20/10/19 12:11:42.92 0OpHGeV7.net
プログラムの才能のある人材を発掘する方法は、以前だとLispかHaskellをやらせるのが定番だったけど今はどうなのかね?
306:デフォルトの名無しさん
20/10/19 12:44:51.59 QMGC8XAt.net
まずクソ企業で天才が居座るメリット無くね?
誰かが頑張ってくれるだろうみたいな雑魚集団と仕事したくねーわ。
307:デフォルトの名無しさん
20/10/19 13:49:59.16 asy7wTux.net
>>296
天才とは言っていない
URLリンク(equallove-2017.blog.jp)
URLリンク(equallove-2017.blog.jp)
URLリンク(star.programming-study.com)
2020年10月17日放送分
TK-80の産みの親?
元マイクロソフトでwindows95の開発に参加?
良く判らんけど
Windows95の生みの親に直撃!開発秘話やプログラミングの裏話、子どもたちに伝えたい思いを告白
308:デフォルトの名無しさん
20/10/19 15:44:35.47 99pu8OZG.net
>>301
誰かが頑張ってくれるだろうみたいな雑魚がいない企業をおまえさんは知っているの?
309:デフォルトの名無しさん
20/10/19 20:56:03.32 lLBStDOZ.net
残念ながらGAFAでもその種の馬鹿はいる。
310:デフォルトの名無しさん
20/10/20 00:14:11.70 0Qd32UHv.net
君たち C++ の話をしろ
311:デフォルトの名無しさん
20/10/20 03:00:21.68 C47XLKZf.net
deleteで解放しようとするとたまに落ちるバグがあるのですが
try〜catchで囲っても、やっぱ落ちます。
これって例外で処理することはできないんでしょうか?
それともやばいバグ過ぎてつかまえられないだけなのでしょうか?
312:デフォルトの名無しさん
20/10/20 03:05:40.63 U9bI1hKI.net
投げない例外は捕まえられないのでは?
313:デフォルトの名無しさん
20/10/20 03:09:48.67 C47XLKZf.net
>>307
これじゃダメなんでしょうか?
すみませんC++よくわかってなくて…
try{
delete p;
}catch(...){
std::cerr << "error!" << std::endl;
}
314:デフォルトの名無しさん
20/10/20 03:14:10.05 U9bI1hKI.net
>>308
pのデストラクタの中で何かが起きていて、そこで例外が投げられないから補足できないのでは?
それと経験的に、再現性の無いバグは、十中八九、未定義の記憶域を読むことで発生する。
315:デフォルトの名無しさん
20/10/20 03:23:38.12 NaQDrxzK.net
丼なスパゲティーコードをメンテしてるか気になる
316:デフォルトの名無しさん
20/10/20 03:27:44.66 C47XLKZf.net
>>309
デストラクタは何もないので
どこかでメモリ処理がおかしくなってるんでしょうね…
一旦、動くようにしてみたかったのですが、もうちょっと調べてみます。
ありがとうございました。
317:デフォルトの名無しさん
20/10/20 03:36:12.53 NaQDrxzK.net
そういうときに役に立つのがprintfデバッグだろ
どの工程で起こったのかある程度目星がつく
318:デフォルトの名無しさん
20/10/20 04:45:58.59 C47XLKZf.net
>>321
継承元の親クラスを何個も辿ってよく調べたら
コンストラクタの中で怪しいポインタにアクセスしている個所がありました。
おそらくこれが原因だと思います。
皆さん有難うございました。
319:デフォルトの名無しさん
20/10/20 07:34:58.90 OBwoowsU.net
デストラクタとdelete演算子はデフォルトでnoexceptなんで、
例外発生時点で異常終了してしまい、try〜catchじゃ捕まえられないそうだ。
URLリンク(cpprefjp.github.io)
320:デフォルトの名無しさん
20/10/20 07:48:57.86 wzOsKsv0.net
そういう問題じゃねえよ
不定のポインタは検出不能だ
321:デフォルトの名無しさん
20/10/20 08:40:05.01 OBwoowsU.net
いや、今回の問題の解決のために書いたわけではなくて、
>>308のように書いても無駄だと伝えるために書いた。
そのあたり明示せずに書き込んですまん。
322:デフォルトの名無しさん
20/10/20 11:34:12.27 pHiz9StD.net
atexit()
exit()
で捕捉出来ないかな
323:デフォルトの名無しさん
20/10/20 11:51:22.81 uu0FmVn9.net
デバッガに頼るのは甘え
プロはprintfだけで正しくデバッグする!
324:デフォルトの名無しさん
20/10/20 11:56:25.10 pHiz9StD.net
プロは logger 使うし
百歩譲っても使うのは fprintf の方
325:デフォルトの名無しさん
20/10/20 13:10:32.17 wzOsKsv0.net
printfが使える環境ならな
そうでない場面がごまんとあるから
選択肢は多いに越したことはない
326:デフォルトの名無しさん
20/10/20 13:21:42.91 NaQDrxzK.net
シリアルモニタくらいは用意できるだろ
327:デフォルトの名無しさん
20/10/20 13:21:52.61 vcQhkuUZ.net
基本的にprintfデバッグの延長
制度化体系化されたprintfデバッグがログ取り
loggerはより高度なprintfデバッグであり、その基本がprintfデバッグになる
この変数を眺めりゃ万事OK という直感が涵養される
loggerの出力先が10万キロ離れたプリンタなこともある
328:デフォルトの名無しさん
20/10/20 13:23:45.82 wzOsKsv0.net
オシロ使ったりもする
329:デフォルトの名無しさん
20/10/20 13:26:30.76 C+6cO9mm.net
路地穴は使うよね
330:デフォルトの名無しさん
20/10/20 13:28:29.10 56eYC1pE.net
スペアナくらいは普通使うよね
331:デフォルトの名無しさん
20/10/20 14:24:10.56 wzOsKsv0.net
無線屋さん?
332:デフォルトの名無しさん
20/10/20 14:27:50.64 Y3GT62kx.net
C#を作ったアンダース・ヘルスバーグもデバッガのステップ実行よりもprintfを使うってインタビューで言ってたな
333:デフォルトの名無しさん
20/10/20 14:34:50.28 kixGkAna.net
尻穴は使うよね
334:デフォルトの名無しさん
20/10/20 17:41:32.21 AdA8N6MK.net
C++23のdraftが公開されてた
URLリンク(wg21.link)
335:デフォルトの名無しさん
20/10/20 17:48:19.32 wzOsKsv0.net
>>329
情報ありがとう
336:
20/10/20 22:08:32.52 glKVTYwZ.net
>>300
C のポインタ、特に関数ポインタ、とか
リカーシブ、とかで十分でしょう
337:デフォルトの名無しさん
20/10/21 00:07:59.13 HJxHMNRz.net
尻カーブ?
338:デフォルトの名無しさん
20/10/21 11:15:30.61 xBgAWF1Y.net
シッタカブリ
339:デフォルトの名無しさん
20/10/21 11:18:26.05 F4fghCXJ.net
printfデバッグなんてあり得んけどな。
340:
20/10/21 11:45:48.97 SYSvovlW.net
>>334
でも最初のうち、プログラムが小さいうちは、それが一番手っ取り早いですね
341:デフォルトの名無しさん
20/10/21 11:52:32.13 xBgAWF1Y.net
printf デバッグは完成後に printf の行を消すと動かなくなったりするω
342:デフォルトの名無しさん
20/10/21 12:15:19.02 EPxGxCCv.net
関数化やクラス化でプログラムを小さくするわけで、あんまり関係ないな
assertを使うときもそうだが、デバッグ用のコードに副作用を入れちまうのはヘボ以下
343:デフォルトの名無しさん
20/10/21 12:41:52.63 BgzupaSs.net
デバッグOffして弊害残すヤツは動作の仕組み把握出来てないだけだろ
>>336、まず貴様のコーディングセンスを磨いてから出直してこい青二才
344:デフォルトの名無しさん
20/10/21 23:09:27.50 oE8Yb73v.net
非同期で動くブツ同士の通信はprintfデバッグ大活躍なのでは…
誰がいつ何を呼んで何を渡したのかと呼ばれたほうが本当に受け取ったのかがすぐワカル
printf消去忘れについては条件コンパイルを使えば良いし、
Ad-hocな追加ならいかに大量にやってもソースコード管理システムで安全に消すこともできるわけやし、
345:デフォルトの名無しさん
20/10/22 00:49:05.87 VEHOj23m.net
未定義動作踏んでるときとかにprintfを呼び出すことでたまたま動くようにできたりする
ということか
346:デフォルトの名無しさん
20/10/22 10:43:36.11 vPWH9GQz.net
>本当に受け取ったのかがすぐワカル
buffer flush しないと判らんし
flush すると勝手に改行する環境とかあるし
そこまで便利ってほどでもなくね
nonbuffered しろってか
347:デフォルトの名無しさん
20/10/22 10:47:06.06 ZfML18uZ.net
ここまでの話をまとめると
やはりprintfデバッグが最強、ということですね
348:デフォルトの名無しさん
20/10/22 12:25:12.96 QhFI+vyp.net
#ifdef DEBUG
#define PUTCHAR(a) (putchar(a), fputc(a, _fpDbg))
#else
#define PUTCHAR(a) (putchar(a))
#endif
PUTCHAR(*ptr++);
みたいなことをやれば デバッグ時だけ*ptr++ が二回評価されて結果は変わってしまう。
349:デフォルトの名無しさん
20/10/22 12:29:38.65 PrgepFj3.net
>>343
インライン関数に置き換えられるだろ
少しは頭使え
350:デフォルトの名無しさん
20/10/22 12:30:03.14 Pdn6awLx.net
デバッグ関係ねーじゃん
351:デフォルトの名無しさん
20/10/22 12:31:48.09 QhFI+vyp.net
>>344
そんなことは当たり前。
IQが低い人と話すとこれだから困る。
352:デフォルトの名無しさん
20/10/22 12:34:55.42 PrgepFj3.net
>>346
わかってるならインラインで書けよ池沼
353:デフォルトの名無しさん
20/10/22 12:38:34.09 QhFI+vyp.net
>>347
駄目な例を敢えて書いたんだ。
どうしてそれが分からないの、あなた達には?
IQが高い人には駄目な例が単なる例として出されたのだと分かるのに
ここの人達にはそれがわからない。
354:デフォルトの名無しさん
20/10/22 12:39:39.22 3l9/RVrp.net
>>339
非同期なアプリでprintf使うとタイミングが変わることがあるから安心できんな
デバッガよりは遥かに良いけど
355:デフォルトの名無しさん
20/10/22 12:41:58.22 QhFI+vyp.net
>>336 が
「printf デバッグは完成後に printf の行を消すと動かなくなったりするω」
と書いていたが、>>340が指摘した理由だけではないので、
そうなる他の理由の1例を>>343で書いた。
356:デフォルトの名無しさん
20/10/22 12:45:00.97 QhFI+vyp.net
これが考える力なんだよ。
マスコミを含めて「知識知識」と言う人が多いが、生まれつきの頭が悪いと
>>344 >>347 のような馬鹿な発想しか出来ないのでどうにもなら無い。
俺に比べれば、おまえが池沼の癖に。
357:デフォルトの名無しさん
20/10/22 12:48:35.56 t0UpjLw/.net
マクロを使う必要性が全く感じられなくてリアリティがない
358:デフォルトの名無しさん
20/10/22 13:11:57.24 PrgepFj3.net
>>351
おまえ自分のこと頭おかしいと思わないならかなり進んだ病気だな
359:デフォルトの名無しさん
20/10/22 14:13:12.96 +Chcwfvy.net
>>353
精神病院に行け。
360:デフォルトの名無しさん
20/10/22 16:17:21.51 t0UpjLw/.net
C++の話しねえやつは出てけ
361:デフォルトの名無しさん
20/10/22 17:13:27.21 Ztx90rC8.net
C++ラーメン次郎うめえ
362:デフォルトの名無しさん
20/10/22 18:56:55.19 N0tQIHiY.net
>>350
たぶんみんなは
そりゃマクロ使えば何でもありありだろ
そんなことでドヤるとかバカじゃねーの
って思ってる…
363:デフォルトの名無しさん
20/10/22 19:00:31.57 wCIm4hGG.net
>>335
printfデバッグを肯定するとは
ロートルの吹きだまり感かなりある
364:デフォルトの名無しさん
20/10/22 19:08:50.28 lftkiv5C.net
printfごときで騒いでる方が精神いかれてんだろ。。
365:デフォルトの名無しさん
20/10/22 19:11:08.49 dQkQeqlj.net
今はJTAGがあるので、そんなにお金がかからない。
それでも、プロセッサごとにデバッグ環境を用意できるわけないだろ!!というのが日本企業の現状なら、中韓に任せて野菜でも育てる道が効率よい。
中韓は用意できるし、売り切ることが出来る。
printfデバッグなんてインパール作戦と同じ。
物量が違いすぎる。
366:デフォルトの名無しさん
20/10/22 19:15:22.48 dQkQeqlj.net
お前たちは農民に戻れ。
ハイ解散。
367:
20/10/22 20:52:46.17 RiQFyYLu.net
>>360
私のマザーボードの JTAG/IEEE1149.1 はどれですか?
368:デフォルトの名無しさん
20/10/22 21:09:21.98 dQkQeqlj.net
>>362
OS開発の場合は、専用のボードを用いることを視野に入れる。
それが無理なら、中韓に任せて撤退するべし。
369:デフォルトの名無しさん
20/10/22 23:42:23.12 PrgepFj3.net
#ifdef DEBUG
#define PUTCHAR(a) do{auto b=a;putchar(b), fputc(b, _fpDbg);}while(0)
#else
#define PUTCHAR(a) (putchar(a))
#endif
死ねザコw
370:デフォルトの名無しさん
20/10/23 08:10:45.22 DuAJkWLf.net
センズリマクロ
371:デフォルトの名無しさん
20/10/23 12:27:51.26 mEDgqyfG.net
>>364
else節もコピーしろザコw
372:デフォルトの名無しさん
20/10/23 12:34:55.69 wQpWPNJn.net
教師が「こういうやり方はしてはなりません」と言っただけなのに、
生徒「そういう場合は、inline使えよ馬鹿教師」
という馬鹿生徒の集まり。
学級崩壊。
373:デフォルトの名無しさん
20/10/23 12:38:30.14 DuAJkWLf.net
教師が「こういうやり方はしてはなりません」と言っただけなのに、
生徒A「そういう場合は、inline使えよ馬鹿教師」
生徒B「こういうやり方ならいいんだよ、死ねザコw」
教師「」
374:デフォルトの名無しさん
20/10/23 12:48:55.12 wQpWPNJn.net
inline関数や、>>364のやり方が分かった上で教師は言っている。
それとも、おまえらの通った学校の教師はそんなことも分からない
くらい程度が低かったのか?
どこの学校だよ。
375:デフォルトの名無しさん
20/10/23 13:33:06.99 g1Zoxl1Q.net
ここは教室じゃねぇんだよバカが
とっととキエロ
376:デフォルトの名無しさん
20/10/23 13:52:00.54 DuAJkWLf.net
俺が通った学校の教師か
化学のおじいちゃん先生だったな
当時C++はまだ世に出てなかったから
マクロの使い方は知らなかっただろうな
377:デフォルトの名無しさん
20/10/23 15:17:01.62 vvEFmscd.net
へー、Cにはマクロないんだ?
378:
20/10/23 16:10:04.88 HRhvOpQY.net
>>372
#define マクロはありますが、lisp 様仕様マクロはありません
379:デフォルトの名無しさん
20/10/23 16:52:36.06 GtGn5ZF1.net
c++の文句をいって
cの話を延々はじめる
そしてどっちも言い尽くされた話
printfデバッグやってるじじいの特徴
380:デフォルトの名無しさん
20/10/23 16:57:39.47 DuAJkWLf.net
>>372
C++が世に出る前っていつ頃かわかってる?
その頃のCを化学のおじいちゃん先生がやってると思ったの?
おまえさんでさえK&R Cなんか使えるのか?
381:デフォルトの名無しさん
20/10/23 17:12:38.69 2f10zgGH.net
DxLib は printfDx で printf 推奨ω
382:デフォルトの名無しさん
20/10/23 17:55:43.35 vvEFmscd.net
>>371 ではC++はまだ世に出てなかったからマクロの使い方は知らなかっただろうと言ってるのに
>>375 では化学のおじいちゃん先生がCなんてやってるわけないだろうと言っている
それではC++が世に出ててもその頃のC++なんておじいちゃん先生はやらなかったのでは。
だとすると >>371 はいったい何が言いたかったのか…
383:デフォルトの名無しさん
20/10/23 20:21:43.75 DuAJkWLf.net
>>377
同一人物なんだが君は何に見えたのかな??
384:デフォルトの名無しさん
20/10/23 20:22:37.35 DuAJkWLf.net
で、君はK&R Cは使えるのか?
385:
20/10/23 20:23:29.32 IQ0Nf1Vk.net
>>379
K&R1 か K&R2 かを指定してください
386:デフォルトの名無しさん
20/10/23 20:32:42.02 DuAJkWLf.net
もちろん1よ
2なんて馬鹿言うわけねえだろ
何が言いたいの? おまえさんは
387:デフォルトの名無しさん
20/10/24 00:28:14.62 5I5noegP.net
>>341
>nonbuffered しろってか
別に
非同期要素同士のハンドシェークがうまく行っているかは
callerとcallerの呼び出し順序に崩れが無いことをメッセージの中身とともに確認できればほぼほぼ十分なので
printf()を呼んでから出力されるまでの時間はあんま拘る意味は無い
388:はちみつ餃子
20/10/24 02:46:57.76 yf0wmlMH.net
非同期な処理を観察するってのは非同期な処理が「失敗しているかもしれない」のを見つけ出さなきゃいけないってことだよね。
複数のスレッドが競合したりする場合もあるってことだよね。
printf は歳入可能でもないし、問題があるときは printf の処理も信用できないと思うんだけど。
信用できないけどバッファに溜まったまま吐き出されないということはなるべくないようにしたいって話でしょ。
389:デフォルトの名無しさん
20/10/24 06:18:58.62 S/SsQhb2.net
printfが再入可能でないってどゆこと? strtokみたいに状態を持つのか?
390:デフォルトの名無しさん
20/10/24 08:34:42.41 H3Ix9ZgH.net
スレッドセーフとリエントラントってどう違うの?
391:デフォルトの名無しさん
20/10/24 08:40:39.80 VP+yyMyu.net
単一スレッドでも再帰なんかで再入は発生しうる
関数内でクリティカルセクションなどを使ってスレッド同期するようにしていても状態を持つ作りだと同一スレッドからの再入で異常になることはある
392:デフォルトの名無しさん
20/10/24 08:44:50.93 VP+yyMyu.net
Cランタイムは通常スレッドセーフだよね
だから複数スレッドでprintfを読んだりerrnoを参照してもよい
Windowsの場合、_beginthreadで作成したスレッドはCランタイム安全、CreateThreadで作成したスレッドはCランタイム安全ではないとかいう話もあった
393:デフォルトの名無しさん
20/10/24 11:13:00.25 aZOaF4i3.net
>>385
今、リエントラント(再入可能)という言葉は余り聞かなくなっているが、
ハードウェアに密着したプログラムを書くときに、ハードウェア割り込みの
割り込みルーチンがまだ終わってないタイミングで、同じ割り込みが生じ、
同じルーチンが再帰的に呼び出されることがあり、そのような呼び出しに
対応しているものを「リエントラント」と呼ぶことがあった。
ただし、そのようなプログラムは複雑になりがちなので、ハードウェア
割り込みが生じ、割り込みルーチンがまだ終わってないタイミングで、
同じ割り込みを発生させる原因がもう一度発生しても、割り込みルーチン自体を
呼び出さないようにする手法が使われることが多かった、というか、
その様にプログラムすることが標準とされ、そのためにプログラマブル割り込み
コントローラなるものが、その役割を果たすモードを持っており、それが通常、
有効な状態にされていた。
394:デフォルトの名無しさん
20/10/24 11:21:13.53 aZOaF4i3.net
>>388
一方、単一スレッドプログラムの場合、mallocの中からmallocが再帰的に呼び出される
ことはそもそもない。printfも同様。
なので、複数スレッドが動作している場合でも、各スレッドにおいては、
mallocやprintfが再帰的に呼び出されることはない。
そして、mallocを作る場合、Heapに関する重要データを読み書きする時、クリティカルセクション
のようなもので囲って、1つのスレッドだけが読み書きできるようにするような手法が使われる。
この場合、その区間を実行しているのは、最大で1スレッドのみであり、複数スレッドが
同時に実行することはない。
もちろん、malloc自体は同時に複数のスレッドが呼び出しても良いが、malloc内部で重要データ
の読み書きが行なわれるのは、必ず1スレッドのみで、それ以外のスレッドは待機させられる。
割り込みハンドラをリエントラントにする場合には、このようなクリティカルセクション的な
やり方は絶対に使えない。
まず、割り込みハンドラは、実際に実行しているのは1スレッドと言えば1スレッド。
割り込み自体が、1コアしかなかったZ80などにおいても有った概念でもあるし、それは当然であるが。
395:デフォルトの名無しさん
20/10/24 12:26:35.65 w2qFem8L.net
おじいちゃん
スレタイ読もうか
396:デフォルトの名無しさん
20/10/24 12:29:55.83 +GevKgJx.net
coutデバッグと言うべきってか
397:デフォルトの名無しさん
20/10/24 12:34:34.81 UCFHvZt3.net
>>388
多重割り込みの話と勘違いしてねーか?
同一割り込みなんて起きなくてもメインルーチンで使ってる関数を割り込みルーチンで使う可能性があるならリエントラントでないとおかしくなるよ
そもそもシングルスレッドで割り込み使ってなくてもある関数内で直接的もしくは間接的に自分自身が呼ばれる場合もリエントラントでないとおかしくなる
最近の言語だとグローバル変数とか静的変数使ってなきゃ(例外はあると思うが)リエントラントになるのであまりに気にする必要はなくなった
398:デフォルトの名無しさん
20/10/24 14:30:45.75 ZbhxKyMw.net
ちゅうことはスレッドセーフなloggerが全部同じファイルにログを書き込むんだろ
これもうそのまんま出力に逐一印字させた方がいいんじゃね
399:デフォルトの名無しさん
20/10/24 15:33:28.19 H3Ix9ZgH.net
>>391
いや、厳密にはstd::coutデバッグというべき(ドヤ
400:デフォルトの名無しさん
20/10/24 15:35:14.21 LXBNuCv6.net
printf()はスレッドセーフ
複数スレッドから呼べる
規格のどこに書いてあるかは示せないが探せばあるはず
なぜなら、ファイルI/Oやからなあれ
もちろんこれは、printf(("ABC")とprintf("CDE")をそれぞれ別スレッドで呼んだ場合、
ABC、CDEという表示になるという保障にはならないが
実際にはたいていのケースで行単位で分かれてくれるからデバッグには困らない
行が頻繁に混じってしまってデバッグにならないようなら初めて行単位の排他の追加を検討する
みたいな
401:デフォルトの名無しさん
20/10/24 15:37:01.80 LXBNuCv6.net
ただしもちろん割り込みルーチンからprintf()を呼ぼうとするような猛者は知らん
火の粉がこっちに降りかからない限り
放っておいて差し上げなさい
402:デフォルトの名無しさん
20/10/24 15:38:11.89 cYR5fjBG.net
保障にはならないが〜
実際にはたいていのケースで〜
こういうの一番困る
403:デフォルトの名無しさん
20/10/24 17:06:18.74 ZbhxKyMw.net
printf使ってヘンになってるならまだ許せるが自前のクソloggerが全般的にクソ動作してると排除したくなる
404:デフォルトの名無しさん
20/10/24 17:47:23.40 H3Ix9ZgH.net
非同期シグナル安全な関数のリストにprintfがない・・・
URLリンク(docs.oracle.com)
405:デフォルトの名無しさん
20/10/24 17:57:44.41 lGAQOfIr.net
自前でロックすりゃいいだろ
406:デフォルトの名無しさん
20/10/24 18:01:02.56 H3Ix9ZgH.net
printf実行中に割り込みが発生して、なおかつそのhandlerでprintf使ってると
デッドロックが発生する(?)
※printfは内部でmallocを使ってるので、>>389に書いてあるようにheapの
操作時にロックを取得しようとするため
という感じかな?
407:デフォルトの名無しさん
20/10/24 18:10:47.63 lGAQOfIr.net
なら自前のprintf作ればいいだろ
標準に頼りきるバカが
408:
20/10/24 18:13:44.58 sM3RwuUT.net
>>402
>自前のprintf作ればいい
こういう台詞は、その能力の欠けたものが得てして言いがちなことだよなあ‥‥と
409:デフォルトの名無しさん
20/10/24 18:32:15.74 lGAQOfIr.net
己の道は己で切り開くものだ
貴様らジャップどもは文句たらたらと言ってるだけで行動に移そうとはしない
猿に退化する課程の獸だな
410:デフォルトの名無しさん
20/10/24 18:55:26.18 W2/6It6m.net
>>404
ワイらがジャップだとしたら
お前はいったい何なんだよ
411:デフォルトの名無しさん
20/10/24 19:34:38.35 kvu4j0jg.net
>>404
無関係な問題まで何でもかんでも民族や国籍に結びつけて的外れな非難をしようとするとは、怒りに囚われて論理的思考力が壊滅的にダメージを受けてるんだろう。プログラマとしては致命的だなw
412:デフォルトの名無しさん
20/10/24 19:40:13.77 LXBNuCv6.net
割り込みルーチンの中からprintfを読んだら危
413:ッなのは 一般にOS機能のうちクリティカルセクション(ロック)みたいな高級な機能が ユーザーが勝手に定義した割り込みルーチンのコンテキストでは使えないからじゃわ; OSはOSで割り込みを受けてスレッドのコンテキストを管理しているので、 それとは非同期に起きたOSのあずかり知らない割り込みで OSの高級な機能が呼ばれたらOSの管理情報の排他が崩れる
414:デフォルトの名無しさん
20/10/24 19:44:20.88 LXBNuCv6.net
割り込みルーチンから呼んでも安全なprintf()を自力で実装するとしたら
メインのOSとコードベースをまったく異にする必要があるのでOSの自力実装に近くなってくる
やっぱ割り込みルーチンからはprintf()呼ばないというのが一番スマート
415:384
20/10/25 08:15:28.48 B8Qi0Gue.net
聞くんじゃなかった
printf( → fprintf(stdout,
みたいなもんでstdoutが静的記憶域期間とか
そういう説明が聞けるのかと思いきや
なんだこりゃ・・・
416:デフォルトの名無しさん
20/10/25 08:36:53.97 fEg6VUML.net
stdoutが静的記憶だとして(大概のOSではIOBで管理しておりそうなっているはずだが
printf()をユーザー定義な割り込みルーチンから呼ぶと
それの排他を安全に行える人がだれも居なくなる、
417:デフォルトの名無しさん
20/10/25 10:46:14.61 zd7LSfWt.net
printfデバッグでダメならputデバッグでいいじゃん
418:デフォルトの名無しさん
20/10/25 11:40:46.63 luVqTFHx.net
printfごときでいちいちケチつけやがって陰気なヤロウどもだぜ
419:デフォルトの名無しさん
20/10/27 20:01:20.88 9N87g439.net
こいつらは屁理屈言いたいだけでデバッグする気なんて少しもない。
420:デフォルトの名無しさん
20/10/27 23:03:02.20 1nczmGPR.net
お金払われればやるよ
421:デフォルトの名無しさん
20/10/27 23:23:32.01 2LDrYrw3.net
金もらわないとデバッグしないの?
つまらない人生だね
422:デフォルトの名無しさん
20/10/27 23:25:33.33 IA9V1GzZ.net
そんなに楽しい事ならお前がやれば?
423:デフォルトの名無しさん
20/10/28 13:38:51.49 6icraQaZ.net
やらないならクソみたいなこと言ってないで黙ってりゃいいのに
424:デフォルトの名無しさん
20/10/28 14:00:21.64 a3TqMSUE.net
普通は成果物に対して報酬を得るよね
バグを出したら潰すのは当たり前
お金払わなきゃデバッグしないとか言ってる人は客先常駐のような労働時間に対して賃金を得る労務提供型なんだろうか
労働者から脱却しないとソフトウェア開発の本当の楽しさを知ることはできない
425:デフォルトの名無しさん
20/10/28 14:20:56.34 XBU5yUok.net
1レスの中で矛盾していくスタイル嫌いじゃない
成果に対して報酬があるならお金のためにバグ潰す
時間給なら貰えるお金は変わらないから「バグ潰すのは当たり前」と洗脳したり脅したりしないとバグは潰されない
426:デフォルトの名無しさん
20/10/28 14:50:59.10 K+lW0Fsg.net
いや、いるんだよ
他人が書いたコードを有料で引き継ぐ人
414がそうとは見えないけどね
427:デフォルトの名無しさん
20/10/28 21:57:28.94 bY6aZzj9.net
つーか普通に仕事してたらちょいちょい
前任者が逃げた、とか潰れた、とか逮捕された、とかで
クソみたいなゴミクソウンコのコードをわたされて
これ保守してねー、みたいなクソみたいな仕事
おしつけられることなんてまれによくあることだろ
そんでなぜかそいつのクソゴミコードのバグを
まるでおれが出したかのように責められる、までがセット
428:デフォルトの名無しさん
20/10/28 22:56:44.64 a3TqMSUE.net
ここってサラリーマンが多いのね
429:デフォルトの名無しさん
20/10/28 23:22:28.00 58wSuA1P.net
そんなん公然と拒否するか
0から作り直すかの二択だろ
430:デフォルトの名無しさん
20/10/29 05:18:26.87 A02IsQiB.net
>>421
そういう状況はママあるけど
> お金払われればやるよ
って言う状況とは違うだろ
431:デフォルトの名無しさん
20/10/29 08:31:38.61 VBEUGOAK.net
>>421
担当を引き受けたのなら、過去の潜在バグであってもお前の責務だろ
432:デフォルトの名無しさん
20/10/29 15:25:24.71 wtO1e/xm.net
>>423
こういう人間はソフトウェアなんかやらんでコンビニバイトでもやってた方が向いてるよ。
433:デフォルトの名無しさん
20/10/30 00:03:30.35 Wx+7ZgRN.net
C++でもPythonの内包表記みたいにVectorの要素舐めていって
全ての要素に特定の処理をしたものを別のVectorに代入することってできますか?
434:デフォルトの名無しさん
20/10/30 00:17:54.24 V+g0QAOl.net
まずPython処理系を書きます
435:デフォルトの名無しさん
20/10/30 00:26:39.96 XbvTe/rK.net
内包表記に近いことは無理じゃない?
initialize listでもしかして?って思ったけどうまくできそうにない
436:デフォルトの名無しさん
20/10/30 08:18:43.66 ooe1U4VR.net
つtransform & lambda
437:デフォルトの名無しさん
20/10/30 09:52:48.93 5giIBuWJ.net
std::transform(s.begin(), s.end(), t.begin(), [](int e) -> int { return e * 2 });
きっとforのほうが読みやすくて速いと思う
438:デフォルトの名無しさん
20/10/30 10:04:53.11 73xlUHi2.net
あとはvalarrayとかな
439:デフォルトの名無しさん
20/10/30 10:06:43.70 uffCAw9U.net
表現上はあたかもラムダ式使った華麗なことやってるように見えるけど
マジでそう見えてるだけで、コンパイルするとfor文とそんなに変わらなくなるんじゃね
むしろどっかの時点でただのfor文に置き代わったりしてるんじゃないの
440:デフォルトの名無しさん
20/10/30 10:22:13.62 73xlUHi2.net
インタープリターよりは速いよ
441:デフォルトの名無しさん
20/10/30 11:34:39.85 7MkyV1Cp.net
URLリンク(cpprefjp.github.io)
442:デフォルトの名無しさん
20/10/30 11:37:53.83 7MkyV1Cp.net
URLリンク(www.fluentcpp.com)
443:デフォルトの名無しさん
20/10/30 11:41:09.18 7MkyV1Cp.net
>>433
ループ分解されて要素分コード増えてる可能性もあるな
444:デフォルトの名無しさん
20/10/30 13:24:53.40 Z0VCec0D.net
forよりも関数的に書いた方が順序は気にせんでいいってメッセージを込めることはできるわけだが、
まあそういう風にかける場合って大抵forで書いても可読性下がらんほど簡易な内容のことが多い。
445:デフォルトの名無しさん
20/10/31 00:26:11.33 T4Ek6w2r.net
ヒエッ…、、OpenMPし放題…!
446:デフォルトの名無しさん
20/11/01 15:21:18.11 iuijWT2g.net
競プロで使いたいのですが
if i = 0 then return 0
elif i > 0 then return i - 1
を出来るだけ早く求めるには何かいい方法ありますかね?
ビット演算とかでなんとかなりませんかね?
447:デフォルトの名無しさん
20/11/01 15:26:15.37 Ncbqgsya.net
>>440
それの速度が競プロで問題になることなんてないだろう。
そんなこと気にするよりアルゴリズムの計算量のオーダーを小さくするとか枝刈りをしっかりするとか有意義な方に頭を使った方がいい。
448:デフォルトの名無しさん
20/11/01 15:26:18.66 BdB3gM+x.net
unsignedですか?
449:デフォルトの名無しさん
20/11/01 15:36:25.10 f5GbRfBo.net
simdの比較使えば結果がビットマスクで取得できるのでそれを使うのが定石
両方計算してビット演算で選択
c++関係ない
450:デフォルトの名無しさん
20/11/01 15:38:18.92 Lkejt9vc.net
>>440
数値のビット数が解っているなら高速化できる
451:デフォルトの名無しさん
20/11/01 15:49:40.49 Lkejt9vc.net
>>440
ていうか比較は一回でいいだろコレ
なんで2回も余計に比較してんだ?
return i>1?i-1:0;
452:デフォルトの名無しさん
20/11/01 15:50:59.41 Lkejt9vc.net
>>440
ていうか比較は一回でいいだろコレ
なんで2回も余計に比較してんだ?
ちょっと間違えた
return i>0?i-1:0;
453:デフォルトの名無しさん
20/11/01 16:00:31.30 Lkejt9vc.net
>>440
elifのあとはなにを返すんだや?
モロに中途半端やないかいワレ
454:デフォルトの名無しさん
20/11/01 17:02:44.45 h5xlMYDq.net
つか>>440はelseが何かわからんが、
iがi≧0でやってくるのならデクリメントの飽和演算に見える件について:
455:デフォルトの名無しさん
20/11/01 17:10:40.93 h5xlMYDq.net
SIMD使うと飽和演算は楽勝かもしれんが、4個とか同時に並列に計算するんでなければ
かえって遅いんじゃ…
456:デフォルトの名無しさん
20/11/01 19:21:41.23 PTqWSgE4.net
>>440
アセンブラだったら、
sub eax,1
jnb lab1
xor eax,eax
lab1:
ret
でおしまい。最大で4クロック。
jmp命令は1つだけ。同じことをCで書くなら、
if (--i < 0) {
i = 0;
}
return i;
とか。
457:デフォルトの名無しさん
20/11/01 21:20:20.31 f5GbRfBo.net
クロック数は蛇足でしょ
458:デフォルトの名無しさん
20/11/01 23:07:30.49 gRIt+Ld+.net
減算が必ず実行されるのはもったいない
... and eax,eax
... jz f@
... dec eax
@@:
... ret
459:デフォルトの名無しさん
20/11/01 23:12:12.57 gRIt+Ld+.net
test ってあったかな...
460:デフォルトの名無しさん
20/11/01 23:32:16.35 h5xlMYDq.net
and eax,eaxも同じようなものなのでは…
どっちも多分パイプライン1段消費
ていうか投機的実行から戻す際のペナルティーは
常にデクリメントする>450の方が小さい可能性が微レ存
知らんけど
461:デフォルトの名無しさん
20/11/02 00:26:45.06 dW4oDZpY.net
そっかー
投機的実行はまったく念頭にありませんでした
i が 0 である確率が小さいと考えるのかしら
462:デフォルトの名無しさん
20/11/02 01:48:22.41 U5Xnw0i6.net
sub eax,1
adc eax,0
でなんとかなんないの?
463:デフォルトの名無しさん
20/11/02 14:18:33.78 WhiKrslV.net
>>450
一瞬でも < 0 になったらまずい環境なら
if(--i < 0) はダメ
464:デフォルトの名無しさん
20/11/02 15:41:23.80 OFRBeKTl.net
>>452
減算を行う場合の方が頻度が高いと予想されるので、>>450の方がその場合に
命令数が少なくなるので平均速度は速い。
465:デフォルトの名無しさん
20/11/02 15:44:36.12 OFRBeKTl.net
>>456
そのコードは凄い。
466:デフォルトの名無しさん
20/11/02 16:02:50.72 sYYC+nm2.net
>>456
キャリーちゃんか
467:デフォルトの名無しさん
20/11/04 00:22:15.96 eR5jspY1.net
Macで環境構築どうすればいいですか
適当に記事あさればいいですか
468:デフォルトの名無しさん
20/11/04 00:32:44.91 pJnXfGcc.net
yes
469:デフォルトの名無しさん
20/11/04 08:22:43.71 3PEz6xa2.net
>>461
新し目のC++使うならhomebrewでg++-9でも入れるのがベターかも。
たとえばstd::filesystemとかcatalinaのXCode(clang++)でも対応したんだが、
バイナリを古いmacに持ってったら予想通り動かんかった。
470:デフォルトの名無しさん
20/11/04 20:11:40.32 X2fHUOCE.net
自クラスの終了時のコールバックメソッドで…delete this;すると…うまく消えるんだけど…。
コールバックメソッドは…boolを返す…delete this;した後も…メソッドは動き続けて…るんだよ…。
std::coutも反応してる…メインスレッドとかで…処理されているからですか?何故かが…解らない…。
471:デフォルトの名無しさん
20/11/04 20:26:01.44 X2fHUOCE.net
464です…。いろいろ調べたら…できるみたいですが…なんでできるのかは…解りません…。
472:蟻人間
20/11/04 20:30:16.22 tdZ4i2Gl.net
thisインスタンスに影響しない関数のコードは多分、C言語の関数みたいに生成される。
関数のコードは不変な実
473:フだと思う。
474:デフォルトの名無しさん
20/11/04 20:50:15.92 H9SHlq4g.net
難しく考えすぎ
extern "C" void the_call_back(struct obj_ptr* This)
{
free(This);
}
こうなってるだけだよ
*Thisを殺しても関数から戻るためのスタック情報はどうもせんだろ
475:デフォルトの名無しさん
20/11/04 21:35:20.66 rY/M/1xY.net
struct S1;
using V1 = std::variant<S1>;
struct S1
{
std::vector<V1> m_v;
};
これ合法?
476:デフォルトの名無しさん
20/11/04 21:39:36.00 occL3fQ7.net
ダメ
477:デフォルトの名無しさん
20/11/04 21:44:35.56 rY/M/1xY.net
主要3コンパイラでコンパイル出来るうえ
URLリンク(python5.com)
紹介してる人が居る。
478:デフォルトの名無しさん
20/11/04 22:56:42.61 rY/M/1xY.net
駄目な根拠わかりませんか?
479:デフォルトの名無しさん
20/11/05 00:49:04.74 WV05kVNu.net
>>468
URLリンク(timsong-cpp.github.io)
> In particular, the effects are undefined in the following cases:
> ...
> - if an incomplete type is used as a template argument when instantiating a template component, unless specifically allowed for that component.
480:デフォルトの名無しさん
20/11/05 01:14:10.93 E+L4EB1M.net
C++17以降、std::vectorは不完全型を許容していて、std::variantは
using V1 = std::variant<S1>;
の時点でインスタン化されていない。
これはどう解釈すればいいのかな?
481:デフォルトの名無しさん
20/11/05 01:20:36.91 E+L4EB1M.net
これが合法なら良かったんだけど、どうも無理っぽいな。
482:デフォルトの名無しさん
20/11/05 01:46:23.37 E+L4EB1M.net
using V1 = std::variant<S1>;
の時点では、テンプレートの明示的なインスタンス化はしていないし、使用していないので暗黙的なインスタンス化もされていない。
ってことでいいよね?
483:デフォルトの名無しさん
20/11/05 01:54:08.91 E+L4EB1M.net
boost::make_recursive_variantやstd::anyを知らないわけじゃないんだけど、オブジェクトが必要になるたびにnewするならC#やJavaで十分なわけで、C++のうまみ成分はこういうところにあると思うんですよね。
何とかなりませんかね?
484:デフォルトの名無しさん
20/11/05 02:27:49.98 tM7hzUED.net
>>463
ありがとうございます。
Mojaveあたりです。
485:デフォルトの名無しさん
20/11/06 16:04:48.24 cCU0l/b0.net
コンストラクタの引数と初期化リスト上のメンバー変数が同じ名前でも、ビルドが通って意図どおりに動いちゃうのだけど、これって仕様通りの動作?
こんなん
: apple(apple)
486:はちみつ餃子
20/11/06 16:58:12.08 O5a96eYY.net
>>478
仕様通り。 問題ないし、むしろ名前を一致させるスタイルを好む人もいる。
487:デフォルトの名無しさん
20/11/07 17:39:09.77 gsFmAuV5.net
Foo::Foo(const Fruit& apple)
: apple(apple),
banana(apple),
orange(this.apple) // できない
{
}
が問題無いのか左様か、
いや待てFoo::appleが実はFruitクラスでなくてFruit2クラスで、
orangeにFruit2クラスを受け取るコンストラクタしか持たずかつconstメンバだったらどうすんじゃ…
…
488:デフォルトの名無しさん
20/11/07 17:53:59.86 gsFmAuV5.net
Foo::apple、Foo::banana、Foo::orangeではなくて
Foo::m_apple、Foo::m_banana、Foo::m_orangeとしておけば悩む必要は無い
ヘッダファイルでもこの順で宣言したとして、
Foo::Foo(const Fruit& apple)
: m_apple(apple),
m_banana(apple),
m_orange(m_apple) // できる
{
}
でおk
489:はちみつ餃子
20/11/07 17:56:49.27 24XfCTPm.net
>>480
普通に出来るやで。 this->apple の間違いじゃろ。
メンバの初期化順は (初期化リストの順序と関係なく) クラス定義内でデータメンバを書いた順序なので気を付けてな。
490:デフォルトの名無しさん
20/11/07 17:57:34.44 CPm1qeuk.net
this
javascriptのやりすぎで脳が壊れたか
491:はちみつ餃子
20/11/07 18:00:03.51 24XfCTPm.net
>>481
名前を同じにしてもうたらまずいケースがあるやないけということを >>480 は言ってるので、
名前変えればいいよってのは的外れ。
492:デフォルトの名無しさん
20/11/07 18:13:54.67 gsFmAuV5.net
>orange(this->apple)
ホンマやΣ(゚д゚;)!いけたわ、
警告をいつもエラー扱いにしているからてっきりエラーかとオモテタ、(言い訳
493:デフォルトの名無しさん
20/11/07 18:30:43.14 2NiwF/8v.net
みなさまthx
classのときはメンバ変数に何らかのprefixなりsuffixなり付けてるから名前が被ることはなかったのだけど、構造体は何も付けないことが多くて、あれ、これってOKなんだっけ、って今更ながら気になってしまいました。
メンバ定義順に初期化ってのも知らんかった…
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
289日前に更新/258 KB
担当:undef