18/12/02 00:45:19.85 Bx+z5yQP0.net
>>301
まあそれがゆとりが嫌われる理由なんだけどな。
お前も含めて自覚がないのが救いようがない。
お前ら、もう既に老害になってると思うぜ。
314:デフォルトの名無しさん
18/12/02 00:53:05.03 +Qh0SqlG0.net
よく分からん捨て台詞だな
315:デフォルトの名無しさん
18/12/02 00:55:37.62 twRH93OM0.net
URLリンク(ja.wikipedia.org)
ゆとり世代については明確な定義、範囲はなく諸説ある。
小中学校において2002年度施行(高等学校は2003年度)の学習指導要領による教育を受けた世代(1987年4月2日 - 2004年4月1日生まれ)。
小中学校において1980年度以降(高等学校は1982年度以降)の学習指導要領による教育を受けた世代。1966年度生まれ以降。
1966年度生まれ以降。
1966年度生まれ以降。
1966年度生まれ以降。
1966年度生まれ以降。
1966年度生まれ以降。
316:デフォルトの名無しさん
18/12/02 01:01:50.46 Bx+z5yQP0.net
>>304
俺に言ってるのなら説明しても良いが、タダではやらん。
お前が説明に値するだけの頭があることを先に示せ。
具体的には、現状の議論について、何らかの進展があるレスをまずしろ。
317:デフォルトの名無しさん
18/12/02 01:23:06.59 26H0WWJ10.net
>>294
まず、副作用という言葉は C が生まれる前から使われていたし意識されていたことですよ
Lisp をやってれば分かることだけど
C 全盛時にCプログラマが副作用という言葉を使わなかったのは当然でしょうね
C は副作用そのものであるノイマンアーキテクチャを素直に表現できる言語と
目されていたわけで (i++ とか)、それこそ最初はグローバル変数も使いまくりだったのでは
また、引数で文字列を渡すにもポインタを使わざるを得ないので、それが�
318:j壊されることを 防ぐ手立てがなかった (今でもないか) 引数経由でなくても、ポインタが使えるということは、そこに任意のアドレスを設定でき、 任意の場所に書き込めるということなので、C の関数で副作用を防ぐ手立てはないわけですよ C 界隈で副作用うんぬんが取り沙汰されるようになったのは const 引数の導入や、 グローバル変数の弊害が意識されるようになって、むしろ民度が上がってきたと見るべきかと あと、Oracle のストアドプロシジャ PL/SQL をやったことはないですか あの文法は Ada そのものなんだけど
319:
18/12/02 01:24:03.02 xpb/M8Xl0.net
>>305
1966以前と1966以後では教育内容で変化があったのですか?数学に関する限り一時期は線形代数も微積分もやる、という過剰な状況だったと思っています
320:デフォルトの名無しさん
18/12/02 01:41:19.09 1UGGVPSQ0.net
>>294
オラクル社の第一言語は、Ada言語を借用したPL/SQLだぞ。
C言語が例外処理機能を受け入れなかったのは完全な失敗。
321:デフォルトの名無しさん
18/12/02 01:45:35.26 1UGGVPSQ0.net
>>308
そうですよね。いま働いている日本人のほとんどはゆとり教育です。
ただ昔は教科書に載っているだけでまともに教えていないと思います。
学年トップレベルだったという年配の多くが義務教育の範囲さえ、完全に忘れているか、知らなかったりします。
322:デフォルトの名無しさん
18/12/02 01:46:50.51 Bx+z5yQP0.net
>>307
> 引数経由でなくても、ポインタが使えるということは、そこに任意のアドレスを設定でき、
> 任意の場所に書き込めるということなので、C の関数で副作用を防ぐ手立てはないわけですよ
それは「副作用」ではなく「バグ」と言うんだよJava以外では。
その他諸々色々勘違いするのは自由だが、
さすがにそれだと話が通じなさすぎて煙たがられてるだろ。
> あと、Oracle のストアドプロシジャ PL/SQL をやったことはないですか
> あの文法は Ada そのものなんだけど
無いね。
ただ、Oracleがそうなら、Ada文法がまだ生き続けていることにはなる。この点は訂正しよう。
とはいえ、それが「参考にする意味があるか」とは別だよ。
本当に意味がある物は、「オブジェクト指向」や「クロージャ」のように、
ほぼ全ての言語でサポートされる事になる。
現状、procedure/function/Subを区別してない言語がメジャーで、
区別した言語(Ada/Pascal/VB)はことごとくマイナーだし、
最近のクロージャのようにC#/C++/Java等のメジャー言語が
相次いで方針を変更してサポートした、ということもない。
それは不要だった、ということで結論は出てる。
それを反例と持ち出してきても意味がないだろ。
323:デフォルトの名無しさん
18/12/02 01:48:13.42 jISJOvCb0.net
老害がブチ切れてて草
変ったのは世の中じゃなくてお前の脳味噌やぞ老いぼれ
324:デフォルトの名無しさん
18/12/02 01:50:31.40 Bx+z5yQP0.net
>>305
> 小中学校において1980年度以降(高等学校は1982年度以降)の学習指導要領による教育を受けた世代。1966年度生まれ以降。
そういうことをするからゆとりは駄目なんだよ。
325:デフォルトの名無しさん
18/12/02 01:55:27.80 Bx+z5yQP0.net
>>309
Oracleについては308の通り。
例外についてはCで採用しなかったのはとりあえずは正解だろ。
未だに各言語で例外方式が安定しないのは、未だにいい解を見つけられてない、ってことだよ。
326:デフォルトの名無しさん
18/12/02 02:36:57.19 twRH93OM0.net
自分がゆとりであることに気付かずにだからゆとりはと言い出すやつばかり。
それが今の時代。
327:デフォルトの名無しさん
18/12/02 07:38:01.21 3j0ioh6B0.net
>(当たり前だがグローバルは使わないとする)
副作用について議論するうえでこんな変な条件付ける人はいない。
あと当然だが、引数によって参照される関数スコープ外の値を変化させるのも副作用だ。
328:デフォルトの名無しさん
18/12/02 10:14:19.71 Bx+z5yQP0.net
>>316
> こんな変な条件付ける人はいない
君がグローバルを普段から濫用している人だとは理解した。
> あと当然だが、引数によって参照される関数スコープ外の値を変化させるのも副作用だ。
勿論。
というか、まともに議論する気があるのなら、明確に条件を確定させなければならない。
何も言わないのなら、C言語での『標準的な』コーディングを各自が想定することになる。
君が普段からグローバルを濫用しているのは理解したが、それは俺の『標準』ではないし、
君みたいな馬鹿が出てきて無駄に議論が空回りするのが嫌だから、俺は明示的にそれを除外した。
そしてこの条件付けは『標準的』であり、問題ないと俺は考えている。
君がグローバルを含めて副作用を議論したいのならそうすればいい。
俺はその議論には意味が無いと思うから参加はしない。
君の言うように、俺は「参照透過」は以下の2種類に分けて考えるべきだと思っている。
・狭義の参照透過…sin()等
・広義の参照透過…qsort()等やthis
・参照透過でない…その他全部、つまりクロージャやbindやグローバルを用いるもの
通常の文脈で言われる『副作用』はおそらく関数型()言語から来ている。
それは上記「参照透過でない」物を濫用した結果だ。
Cの場合は最初からそれが出来ないから、その議論が発生することはなかっただけ。
それとは別に、意識高い系関数型()の「『狭義の参照透過』だけでプログラミングすべき」、
というのは当たってはいるが、実際の所それは多値を返せないと厳しい。
そして多値返しよりも参照を返してそこからアクセスしろ、というのがメインストリームの言語だろ。
それの方が楽だから。
329:デフォルトの名無しさん
18/12/02 10:48:22.22 3LBO8TR+0.net
少なくともCにおける「副作用」はずっと昔からの規格で定義されている用語だから、
独自定義で話されるのは困る。
URLリンク(kikakurui.com)
> ボラタイルオブジェクトへのアクセス,オブジェクトの変更,ファイルの変更,
> 又はこれらのいずれかの操作を行う関数の呼出しは,すべて副作用(side effect)と呼び,
> 実行環境の状態に変化を生じる。...
330:デフォルトの名無しさん
18/12/02 11:25:56.48 Bx+z5yQP0.net
>>318
FPUのフラグか。なるほどそれは正しい『副』作用だ。
というか、『副』作用というからには当然「作用」(『主』作用)と対比されるべきで、
「printfが副作用」(>>296)というのはHaskellの定義だからな。
スレチというのはごもっとも。
331:デフォルトの名無しさん
18/12/02 12:58:23.54 mXB0v2zh0.net
C言語使う人ってアドレスって言ったほうがわかりやすい場合でもポインタっていうよね
ポインタの意味が多くて混乱する
332:デフォルトの名無しさん
18/12/02 14:18:51.99 uIlAasYL0.net
副作用は、volatile とか、何かの状態を変えること
関数型のmonad とか、
Vuex, Nuxt.js みたいに、1方向のライフサイクルを作って、
状態は、Mutation からしか変えられないとか
どこかのタイミングに、絶対に変化していない、ポイントを作る
WEB+DB 106号に載っている、Flux。
状態管理のデザインパターン、単一方向のデータフロー
333:デフォルトの名無しさん
18/12/02 20:00:19.47 nNQIp+BOM.net
なんだまたvoid君の無知っぷりが露呈したのか
334:デフォルトの名無しさん
18/12/03 06:04:46.06 9nl14toh0.net
C言語はファイルポインターを配列を指すようにして同じように扱うことはできませんよね。
それなので同じように扱うにはファイルポインターと配列のラッパーを自分で作らなければいけませんよね。
335:デフォルトの名無しさん
18/12/03 06:13:41.09 MMlQh9qb0.net
>>323
mmapやfmemopenを調べてみ
336:デフォルトの名無しさん
18/12/03 06:53:46.78 9nl14toh0.net
>>324
調べたらわかりました
ありがとうございます
337:デフォルトの名無しさん
18/12/03 10:00:18.38 KLYQbJ33a.net
fmemopenって何に使うと便利なの?
338:デフォルトの名無しさん
18/12/03 10:10:02.85 98KtjA3l0.net
なんだこれ?引数 void って初めて見たぞ。文法的にありなのかこれ?
339:デフォルトの名無しさん
18/12/03 10:44:00.29 7ySpxLkda.net
>>3
340:26 FILE * 経由の入力や出力をするように書かれているプログラムで使うと便利な場合があると思う。
341:デフォルトの名無しさん
18/12/03 12:19:30.10 dfidJp1A0.net
>>327
晒しage
342:デフォルトの名無しさん
18/12/03 12:27:39.88 7ySpxLkda.net
>>329
それはC言語を知らない初心者が前スレだったかで残した名言
343:デフォルトの名無しさん
18/12/03 13:14:41.09 dfidJp1A0.net
長文の連投で得意がってるあいつな
344:デフォルトの名無しさん
18/12/03 13:29:26.35 UG3pz1BhM.net
プロセスメモリエディタも初めて見たり副作用を知らなかったりする彼ね
345:デフォルトの名無しさん
18/12/03 14:06:18.11 xHLM582p0.net
Ruby には、StringIO と言う、メモリ上だけに存在する仮想ファイルがある。
これは、IO クラスの派生クラスではなく、
文字列クラスに、IO にある関数をDuck Typing したもの(インターフェース)
StringIOインスタンス.read, puts など、ファイル操作と同名の関数を使える
テストの際に、本当のファイルを作らなくても、
メモリ上だけでファイルの振りができるので、楽
346:デフォルトの名無しさん
18/12/03 14:31:36.79 +OGeTNm4M.net
へぇーっ!メモリ上だけに存在する仮想ファイル?Rubyすごぉ~い!
特許取った方がいいんじゃない?
ノーベル賞狙えるかもー!?
347:デフォルトの名無しさん
18/12/03 14:38:57.12 KLYQbJ33a.net
単体テストで使った様な気もしてきた
でもまあストリームは難しいわ。fopenよりopenが好きだよ
348:デフォルトの名無しさん
18/12/03 16:07:39.69 7ySpxLkda.net
ノーベル仮装ファイル賞
349:デフォルトの名無しさん
18/12/03 17:24:12.07 dfidJp1A0.net
C++にもstringstreamがあって
メモリ内でファイルイメージが作れる
しかもcin, cout, ifstream, ofstreamの
メンバ関数・フレンドが全て使える
350:デフォルトの名無しさん
18/12/03 18:30:35.22 +OGeTNm4M.net
なぁんだRubyパクリだったのか。ダッサ。
パクリRuby!
351:デフォルトの名無しさん
18/12/03 19:19:41.79 OHB3X56LM.net
>>329
このスレの初心者乙
352:デフォルトの名無しさん
18/12/03 21:56:42.64 r8O+Z3hZ0.net
>>332
プロセスメモリエディタを知ってる=Cを知ってる、になるのか。
さすがゆとり、だな。
お前らはそんなことばかりするから、お前らの居場所を無くして行ってるんだぜ。
自覚出来てないんだろうけど。
まあ、ゆとりに付ける薬はないって事だな。
三つ子の魂百まで、と同様、ゆとりの魂百まで、なのだろう。
353:デフォルトの名無しさん
18/12/04 00:25:16.59 VVlGsdy50.net
void君怒りのポエム
354:デフォルトの名無しさん
18/12/04 22:17:29.21 YeiHZFGw0.net
彼は自分がゆとりであることに気付かない。超ゆとりである。
355:デフォルトの名無しさん
18/12/05 00:34:11.12 SdYL/PxYZ
URLリンク(altohumano.com)
356:デフォルトの名無しさん
18/12/06 08:22:58.33 cC0kDT7D0.net
勉強始めて半年くらいの初学者だけどenumの便利さに今日気が付いて震えてる
case文がシェルスクリプトとかのと比べてあんなに使いにくいものになってるのはそういうことだったのね……。
357:デフォルトの名無しさん
18/12/06 09:11:25.93 mp97/YFka.net
なんにせよまあswitch/caseはあんまり使わない方がいいですよ。
358:デフォルトの名無しさん
18/12/06 10:46:35.55 y2fvjog80.net
なんで?
359:デフォルトの名無しさん
18/12/06 11:06:46.21 mp97/YFka.net
クソコードに発展しやすいんです。
if文の方がちゃんとしてる。
360:デフォルトの名無しさん
18/12/06 11:09:04.26 qlBG7toFM.net
偏見だしアホとしか思えん
361:デフォルトの名無しさん
18/12/06 12:09:10.95 uFg4otuRx.net
switchは単一の変数(大抵は状態)を比較してることが一目瞭然。
case内が長くなって醜いのは全く別の問題。
362:デフォルトの名無しさん
18/12/06 12:25:09.83 nzH90qpKa.net
まあ今となってはコンパイラが軽く最適
363:化してくれれば全く同じコードになってしまうかも知れず、どちらで書くかは見易さの問題だけかも知れない。 ま、switchはbreakなしで下に抜けるっていうifとの違いがあるからそれ利用してたら別だけどな。
364:デフォルトの名無しさん
18/12/06 14:08:22.67 CZHWXsyR0.net
switch~caseで、char 値の比較の場合、昔のコンパイラでも最適化した時、
条件分岐じゃなくて、テーブルジャンプにしてくれるものがあったなあ。
最近のコンパイラが if~else if~ で記述した時、どう最適化してくれるのかは知らない。
365:デフォルトの名無しさん
18/12/06 14:36:37.49 LNgus+SNa.net
文法に罪はない人が悪いと言って終わるならば、もうなんでもありで良いんです。
C++の方が選択肢が多い分圧倒的に優れてるとも言える。
366:デフォルトの名無しさん
18/12/06 14:39:02.58 LNgus+SNa.net
自分的にアホだと思う書き方はcaseの中身を{}でくくっちゃうやつです。
そんなことするなら関数呼べや。
367:デフォルトの名無しさん
18/12/06 14:59:28.18 dlLKQRwlM.net
case文内に関数にするほどでもない、ちょっとした処理を書きたいとき、その処理内だけで使う変数宣言は{}使ってその中に書いちゃうわ。
368:デフォルトの名無しさん
18/12/06 15:27:35.39 nzH90qpKa.net
そういやswitchのブロックの先頭でも変数宣言できるんだよな。
今はどこでもできるから関係ないとは思うが昔は驚いた。
369:デフォルトの名無しさん
18/12/06 17:17:12.54 cC0kDT7D0.net
地味に都合の良いスコープ範囲だから便利っちゃ便利だよね。
370:デフォルトの名無しさん
18/12/06 17:23:21.26 8Uba5j5za.net
たとえば、caseではクロージャ的なもんが使えて、関数ポインタに代入。
抜けた後でそれを実行、とかできるのなら許容するかも。
371:デフォルトの名無しさん
18/12/06 18:06:57.01 nzH90qpKa.net
それは普通にできるのでは?
372:デフォルトの名無しさん
18/12/06 18:53:53.96 VHVkoIH2M.net
>>355-356
宣言どころか文法的には実行文も書ける
もちろんまともなプログラマはそんなクソコードは書かない
URLリンク(www.jpcert.or.jp)
373:デフォルトの名無しさん
18/12/06 19:39:02.33 rq0vzYZsM.net
初期化されないのかよ。
最初から禁止にしといてくれや…
374:デフォルトの名無しさん
18/12/06 20:21:33.67 2HZFttMva.net
>>358
いや、クロージャ無いじゃん。
あってもいいと思うけど。
375:デフォルトの名無しさん
18/12/06 20:25:38.15 nzH90qpKa.net
のようなもの
376:デフォルトの名無しさん
18/12/06 20:45:48.14 TUEVaed40.net
構文やや変数キャプチャの問題はさておき、関数ポインタは原始的なクロージャっぽく使えるよね。
こんなん書いたらクロージャ原理主義者が反論しそうだけど。
377:デフォルトの名無しさん
18/12/06 20:49:35.87 nzH90qpKa.net
苦労者
378:デフォルトの名無しさん
18/12/06 21:11:52.76 qetyDFhY0.net
GNU拡張だと関数の中で関数定義できたっけ。
379:デフォルトの名無しさん
18/12/06 22:27:01.40 RVfmRZI1d.net
C言語勉強してます。
エラーにOBJが開けませんってでるんだけど、どうしたらいいか教えてください。
コンパイラーはbcpadです
380:デフォルトの名無しさん
18/12/07 02:34:07.16 4kVuFzeP0.net
bcpadって、懐かしい響きだな。
古すぎてなにか特別な理由がない限り使われなくなってるようなものだと思うんだが、なんでそれ使って勉強しようと思った?
381:デフォルトの名無しさん
18/12/07 20:07:09.75 S1fEuKj1d.net
授業で使ったからこれでいいかなーって感じ、これといった理由ないです笑
最近はどんなコンパイラーが主流なんです?
382:デフォルトの名無しさん
18/12/07 20:26:20.52 RTzoABIk0.net
Lattice C
383:デフォルトの名無しさん
18/12/07 20:32:40.15 F84vPdIda.net
MSのVisual Stdioに入ってるVC++か、gcc か、clangだね。
bcpad使った事ないけど、それで使えるbccも地味に生き残ってて進化してた。
(久しぶりに見に行ったらフリーのは最新じゃないけど、地味に進化してた)
エンバカデロがまだインプレス(買収される前)だったり、ボーランド(社名変更前)だったりしてた時代のbccコンパイラ環境設定記事がまんま使えるはず。
384:デフォルトの名無しさん
18/12/07 20:55:30.39 qRyaIDL9a.net
LinuxまたはWindowsのWSLのUbuntu等やCygwinの中でもgccが動く。Macでも中はUNIXなので動く。
385:デフォルトの名無しさん
18/12/07 21:34:48.53 0/x3pMw+0.net
windowsならmsvc
unix、unixクローンならgcc
コレで十分
windowsでいちいちgccでコンパイルする必要なんかない
たまに確認に使う程度
386:デフォルトの名無しさん
18/12/07 21:58:04.56 b95DkfHn0.net
Windowsでネイティブに動かせるGCCもあるし、
無理してVC使わなくても良いと思う
387:デフォルトの名無しさん
18/12/07 22:33:44.42 S1fEuKj1d.net
今調べたらけっこうあるんだな、、
これのここがダメ!とかここが強み!とかあったら教えて欲しい🙏
388:デフォルトの名無しさん
18/12/08 02:14:28.50 5PBkTMHJa.net
Winならmsvc(VC++)かなぁ。。。速いしVS入れれば個人用途に限りMFC(MSのC++ライブラリ)付きで無料で使える。
ただ、最新のC/C++への対応状況は多分一番対応が悪い。
つい先月見た限りでは、bccは地味に対応状況は良いので、Win32APIが付いてて最新のC/C++使いたいってのには一番環境整え易い。(setbccで一発)
Linux/Unix系はclangかな。
gccにはconio.hが無い。(msvc、bcc、clangにはある)
最新のC/C++対応状況じゃclangとgccが2強だけど、Win用にWin32APIは最初から付いてたか分からない。
WinでGUIするのに情報少なかったから、最新のC/C++の勉強にしか使ってない。
389:デフォルトの名無しさん
18/12/08 05:48:44.85 xmV4OmOO0.net
conio ライブラリの ncurses を使った Linux 用の互換ライブラリはあるよ(多分UNIX系OSならLinux以外でも動くような気がするが)。
URLリンク(ja.osdn.net)
ていうか conio と curses ライブラリの両方が存在する状態になってから30年ぐらい経ってるので既に世界中で互換ライブラリは作られてると思う。
UNIX系OSでconioが標準的なものとして取り入れられない理由はもっと昔から curses や termios があって根付いていたからだと思う。
後から出てきた MS-DOS 画面専用ライブラリを組み込む気になる人はあまりいなかったんだろう。
390:デフォルトの名無しさん
18/12/08 08:04:27.69 5PBkTMHJa.net
助かった。
昔読んだ入門書に環境依存と書いてたけど、互換ライブラリあるんだね。
getch関数地味に使うのよ。
調べたらバッファオフしてから普通のgetchar使ってるのか。
そのままLinux流を覚えても良いかな。
どっちにしても良い機会だった。
有り難う。
391:デフォルトの名無しさん
18/12/08 10:14:50.43 +xxwdKok0.net
>>375
> WinでGUIするのに情報少なかったから、最新のC/C++の勉強にしか使ってない。
MFCなんて言ってるから少ないんだよ。それ、20年前の話だし。
MFC -> .NET(Forms) -> .NET(WPF) -> UWPか?もう一つくらい有った気もしたが。
『標準』への対応という意味では遅いけど、
そもそも標準が糞な所はMS独自拡張が行われているからそれなりには困らない。
最新のならC++11にはほぼ対応してたはずだし、「どれがいいですか?」なんて聞く奴には問題にならない。
まあ、お前らは最新の文法を使えることが腕前だと勘違いしているようだから、大問題なのだろうけど。
それも含めて自由にやればいいが。
Borland Builderは一時期Cをリードしたのは�
392:鮪タだが、今だに開発が継続されていたのは俺も今知ったレベル。 Borland信者でなければ普通は地雷扱いで使わない。 というか、win環境ならVS以外を考える意味がない。 無料でGUIのIDEなら第一選択肢がVSで、実際それで十分で終わり、のはず。 無駄なところで苦労したくなければ、とりあえずみんなが使ってる物を使っておけ。
393:デフォルトの名無しさん
18/12/08 10:22:20.61 eB2yg23l0.net
C/C++でFormsやWPFなんて使えないんだからしょうがないじゃん。
394:デフォルトの名無しさん
18/12/08 10:26:03.56 +xxwdKok0.net
普通の人やMSの定義なら「使える」わけだが。
まあどう見ても平行線だからもういいが。
395:デフォルトの名無しさん
18/12/08 10:50:52.94 eB2yg23l0.net
C++/CLIでも持ち出す気か
396:デフォルトの名無しさん
18/12/08 11:51:32.86 PBftE5qw0.net
>>375
bccって揃えやすいか?
ダウンロードするのに個人的なことを根掘り葉掘り聞かれるのが
たとえば俺なんかウゼーと思うが
対応状況が良いって、C++98だぜ?
テンプレート実引数にメンバポインタを渡すとコケるあたり致命的だろ
397:デフォルトの名無しさん
18/12/08 12:13:07.40 +xxwdKok0.net
>>382
いやこっちだろ。一応ClangベースでC++11らしいぜ。
URLリンク(www.embarcadero.com)
Clang標準のGUI環境としてはありなのか?
或いはVSでgccやClangを動作させている奴もいるし、そっちの方がマシなのか?
いずれにしても人柱物件だと思うぜ。勇者に期待だな。
398:デフォルトの名無しさん
18/12/08 12:16:03.45 UjmNmcZda.net
最近はwindowsでもQt使ってくれみたいな話は多いですね
399:デフォルトの名無しさん
18/12/08 13:05:07.00 +xxwdKok0.net
一応訂正(補完)しておく。
× > Clang標準のGUI環境としてはありなのか?
○ Clang標準のGUI環境『のIDE』としてはありなのか?
今更CでGUIアプリを作る意味はないし、Qtも流行らないよ。
やれば分かるが、GUIに関しては今現在はHTML/CSS/JavaScriptが最強だ。
マジでそれ以前のGUIなんて全部ゴミ。
だから全部の環境がHTML/CSS/JavaScriptを追いかけているのではないかな。
WPFもGtkもまだCSS部分が出来てない。Qtも見た目その辺の感じ。
Qtはそもそも今時珍しく仕様を開示してない.。この辺が超絶イケてない。
(例:QMLのビデオを試しにみようとしたが目隠しが出る)
400:デフォルトの名無しさん
18/12/08 15:03:57.91 AnxWbhvF0.net
そうか、じゃあwebglでも使うか。
401:デフォルトの名無しさん
18/12/08 15:27:14.56 AnxWbhvF0.net
あとQtはgpl/lgpl3でもライセンスされてるぞ?ドキュメントも公開されてる。
仕様を開示してないとかどこ見て言ってるんだよ
402:デフォルトの名無しさん
18/12/08 15:59:03.07 +xxwdKok0.net
>>386
WebGLはGUIではなくグラ(フィックス)だし、
それ主体ならMFCでも大して変わらないと思うが。
Canvas自体はむしろ旧インタフェースをHTML側に輸入したものだし。
ただ、GUIやるならマジでHTML/CSSのお手軽さは一度試した方がいい。
今のところ他プラットフォームも同様の場所を目指しているから、無駄にはならんし。
CanvasでGUIやる気なら、背景にjpg貼ったなんちゃって仕様のHTMLの方が楽だし、見た目だけなら同じに出来る。
もちろんCanvasの上や下にHTMLを重ねてそっちでイベントだけ取り扱うことも出来る。
これらは旧来のインタフェース(Forms等)でも出来るが、それ用に設計されてないからいろいろ話が面倒になる。
が、まあ、CでGUIアプリを作ろうとすること自体が若干間違いで、
ビュワー等大きなデータを扱う(=速度がそれなりに必要)でなければ、
60fpsさえ出れば何でもいいし、Cでやる意味はないよ。
>>387
他環境と比べての話だぞ。
以前ドキュメント探してもろくなのが無かったし、
今日チュートリアルビデオを見ようとしても登録しないと目隠しが出るし。
こんなのでQtが流行るわけがないね。考え方が15年以上遅れてる。
それでもQtと心中するのも自由だけど。
403:デフォルトの名無しさん
18/12/08 17:15:39.30 AnxWbhvF0.net
>>388
開示してないって断言してるじゃん。チュートリアルは仕様じゃないよ?
意見変えるならそう言ってよ。
404:デフォルトの名無しさん
18/12/08 17:42:53.93 +xxwdKok0.net
>>389
変えてない。Qtはゴミだよ。
あれで公開していると思うのなら他フレームワーク等見てみろよ。
405:デフォルトの名無しさん
18/12/08 18:40:20.20 hIfZgykd0.net
ほとんどC言語関係ないけどQtは最初,マルチプラットフォームで使えてC++バインディングが公式で提供されているっていう理由で
かなーり期待したんだけどね……。結局今はGTK+に戻ってしまった。
406:デフォルトの名無しさん
18/12/09 09:54:16.91 8tZnBeFG0.net
Cってほんとに実行速度が速いの? 他のコンパイル式の言語に速度で勝る理由が分からん。
インタプリタならともかく。
407:デフォルトの名無しさん
18/12/09 11:07:31.14 dkLieERx0.net
・C言語自体が単純で低水準、変換しやすい
・コンパイラの最適化とそこに投入された人月
というわけでC言語そのものじゃなくてコンパイラで生成された機械語が早い
408:デフォルトの名無しさん
18/12/09 15:36:30.25 e81YHx5p0.net
URLリンク(www.c-tipsref.com)
この辞典の作者はnumeratorを知らないらしいなwww
409:デフォルトの名無しさん
18/12/09 15:56:34.95 LXVWu9Mt0.net
>>314
よくもまあPL/SQLを知らないのに批判できるよな。
PL/SQLの例外処理はOracle DatabaseがSQL、ビルトインパッケージの結果をうまく例外として伝播してくれる。
あなたは単に例外を作り出す方の実装が悪いものを見ているだけ。
410:デフォルトの名無しさん
18/12/09 15:58:53.53 LXVWu9Mt0.net
>>320
アドレスを指しているアドレスがポインタ。
ポインタが指しているアドレスにポインタがあるわけではない。
411:デフォルトの名無しさん
18/12/09 16:03:51.04 LXVWu9Mt0.net
>>392
C言語は低水準言語であるから、うまくやれば速いマシン語になるが、ちょっとしたことでむしろ遅くなるマシン語を生みやすい。
アーキテクチャの知識がない場合は、誤解したアーキテクチャを想定したコードを書いてしまい、実行速度が遅いものができあがる。
412:デフォルトの名無しさん
18/12/09 16:59:21.16 c1W3T6/y0.net
>>396
>>397
ん??
413:デフォルトの名無しさん
18/12/09 18:56:28.62 +IQ+xQud0.net
>>396
>>397
どうやら違う世界線から紛れ込んできたと見える
なんでこういうcrazyなことを言う輩に限って自信満々に断言するんだ
謎
414:デフォルトの名無しさん
18/12/10 15:01:58.63 Yf20pj4f0.net
初心者です。
>>396-397のレスを読んでちょっと混乱しているんですが、
C言語は高水準言語で、
ポインタ変数自体は「アドレスを格納できる4バイト?の変数」っていう認識で合っていますか?
415:デフォルトの名無しさん
18/12/10 15:10:08.76 FyPZmeq6a.net
何バイトかは決まっとらん。
サイズに注意出来るようになったらあなたは中級者。
416:デフォルトの名無しさん
18/12/10 15:44:39.90 Yf20pj4f0.net
あーそうか、
4byte(32bit)だと0x00000000から0xFFFFFFFFまでの?4294967296通りのアドレスが保存できるんですね。
なので処理系?によって変わるってことなんですね。
ありがとうございます。
417:デフォルトの名無しさん
18/12/10 15:58:27.14 4x6+51xya.net
この頃の64bit環境だとアドレスも64bitだと思う。
クロスコンパイルする場合や意図的に32bit用のバイナリを作るようにコンパイルする場合を除く。
418:デフォルトの名無しさん
18/12/10 16:54:58.91 o+toD3xT0.net
ポインタ変数のサイズは32bit幅、
ただしセグメント部16bitのオフセット部16bitで
有効な全範囲はトータルで20bit。
419:デフォルトの名無しさん
18/12/10 16:56:42.73 /sc6zE4j0.net
いつの時代の話だろう
420:デフォルトの名無しさん
18/12/10 17:03:42.11 Ezpzf515M.net
プロテクトモード
何それ美味しいの?
421:デフォルトの名無しさん
18/12/10 17:04:09.37 M7qQG5lGH.net
やべー
あの頃から35年も経ったのかよ
漠然と20数年かなとか思ってたよ
422:デフォルトの名無しさん
18/12/10 17:16:13.17 Yf20pj4f0.net
一体何の話をしているんです!?
教えてくださいおじい・・・紳士さま。
423:デフォルトの名無しさん
18/12/10 17:33:22.27 OF068zeT0.net
16bitCPU時代のアドレスの話
424:デフォルトの名無しさん
18/12/10 19:37:12.53 cqLRK3I00.net
映画タイタニックでも「near far wherever you are」と謳われているほどポインタは面倒
425:
18/12/10 20:20:50.73 NenbAhKQ0.net
>>410
…うまい
でも near far とかもう通じないんじゃないかな?
426:デフォルトの名無しさん
18/12/10 20:29:46.12 4x6+51xya.net
>>408
昔々、8086があったとさ。
めでたしめでたし。
終わり。
427:デフォルトの名無しさん
18/12/10 20:32:35.54 4x6+51xya.net
英語版
A long time ago,in a galaxy
far,far away....
428:デフォルトの名無しさん
18/12/10 23:14:07.07 l83Jt/Qga.net
>>400
OSによる。
4バイトは8ビット(=1バイト)x4なので32ビット。
32ビットOSなら、それで正しい。
じゃあ16ビットOSや64ビットOSの場合は?
429:デフォルトの名無しさん
18/12/10 23:16:39.78 l83Jt/Qga.net
>>404
セグメントは16ビット迄だよね~。
430:デフォルトの名無しさん
18/12/10 23:22:09.98 ADpwiSWg0.net
>>415
つPAE
431:デフォルトの名無しさん
18/12/10 23:38:01.37 l83Jt/Qga.net
いあ、知ってるよ?
でも今でも意味あるの?
Athlon64にPCの64ビット化を先越された時代の、その苦し紛れの拡張。
64ビット標準だけで今後PCに乗り切れる時代は来ないであろうメモリ容量をサポートしてるのに。
(理論上の限界来る前に、製造技術上の限界が来る)
Winはあえて制限してるが、時代とともに緩めるだけっしょ。
432:デフォルトの名無しさん
18/12/10 23:53:27.02 bJUChMIiM.net
このスレッドは妄想コンピュータで話すやつが張り付いているね。昔は単純な話だったけどさ。
433:デフォルトの名無しさん
18/12/11 00:26:54.92 qpk98o5j0.net
8ビットがなつかしいね?
434:デフォルトの名無しさん
18/12/11 07:34:54.16 zUaOIyWC0.net
>>417
> 64ビット標準だけで今後PCに乗り切れる時代は来ないであろうメモリ容量をサポートしてるのに。
32ビットになった時にもそんな話をしてたな w
435:デフォルトの名無しさん
18/12/11 09:17:41.73 7sleUDEz0.net
プロセスルールの限界から実用的で物理的なメモリの上限はあるんだろうけど、何がどう進化するか分からないからねぇ。
単純に超多層化プロセスルールが一般化するかもしれないし、もしかするとクラウドRAMサービスとCPUアーキテクチャが融合してその限界突破なんて時代が来るかもしれん。
人間の創造力は無限と信じよう。
436:デフォルトの名無しさん
18/12/11 10:15:17.85 qpk98o5j0.net
4GBと言う上限は意外に早くたどり着いた
4K動画をオンメモリーで編集したいとなると
途端にぶつかる壁だな
次は誰がこの壁にたどり着くかな?
437:デフォルトの名無しさん
18/12/11 12:57:57.93 ZRU2RXnk0.net
Visual Studio 2017のC/C++コンパイラってどこのフォルダに置いてあるんですか
(もしくはファイル名、あるいは、商標名?)
調べても「VSに付属するVisual C++にC/C++コンパイラが同梱されている」程度の
情報しか出てこない・・・
そのコンパイラは何て名前でどこに置いてあるんだ・・・
438:さまよえる蟻人間
18/12/11 13:14:43.83 CGbAPZXN0.net
>>423
スタートメニューのVSコマンドプロンプトを開いてみい。
439:デフォルトの名無しさん
18/12/11 13:42:28.53 ZRU2RXnk0.net
はい
**********************************************************************
** Visual Studio 2017 Developer Command Prompt v15.9.3
** Copyright (c) 2017 Microsoft Corporation
**********************************************************************
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community
440:デフォルトの名無しさん
18/12/11 13:48:36.76 ZRU2RXnk0.net
\Microsoft Visual Studio\2017\Community\VC の中を compiler で検索した結果
compiler.cpp
ん・・・?これ?
実行ファイルじゃなくてソースファイル・・・?
分からない、もうダメだ(絶望)
441:デフォルトの名無しさん
18/12/11 13:51:50.68 rotYdjfa0.net
その昔は cl.exe に link.exe のフロントエンドで make は別途だったが今はどうなんだろう
442:さまよえる蟻人間
18/12/11 13:55:01.02 1cpVaJ7Sd.net
cl.exeとかcl64.exeなどの名であると思う。
443:デフォルトの名無しさん
18/12/11 14:00:29.46 ZRU2RXnk0.net
ありました!(なぜか4つも)
というかcl.exeってコンパイラだったんですね
コンパイラその他を呼ぶための媒介物かと思ってますた
感謝
444:さまよえる蟻人間
18/12/11 14:18:43.44 CGbAPZXN0.net
最近はx64とかx86とかARMとかARM64とかいろんな環境があるから、コンパイラは複数必要になっている。
445:デフォルトの名無しさん
18/12/11 14:51:38.89 ZRU2RXnk0.net
>とかいろんな環境があるから、コンパイラは複数必要
なるほど 勉強になりました
446:デフォルトの名無しさん
18/12/11 20:20:15.88 3ovMnnL0M.net
CプログラマでいまのCPUを理解しているやつなんてごく僅か。わざわざC言語を作る必要がない。もっと高水準言語で作って、VMと優秀なコンパイラに任せた方がいい。
447:デフォルトの名無しさん
18/12/11 20:46:12.25 g9W94UvY0.net
初心者です。
>>432ののレスを読んでちょっと混乱しているんですが、
>>いまのCPUを理解
というのがまず何を指しているのか分かりません。
パーソナルコンピュータに内蔵されているCPUでしょうか、炊飯器に内蔵されているCPUでしょうか。
>>C言語を作る必要が無い
作らなくてもすでに存在していると思うのですが、自作が必要なものなのでしょうか。
>>もっと高水準言語
C言語自体が高水準言語だと思うのですが、これ以上の高水準とはどういう基準なんでしょうか。
自然言語をコンパイルするとかでしょうか。
>>VMと優秀なコンパイラ
VMというのはVirtualMachineの略でしょうか。VM上で動作するC言語というのがあるのですか?
VMを動かすほどのリソースが無いようなマシン上では何を動かすのでしょうか。
優秀なコンパイラ、ということは Cのコンパイラは優秀ではないのでしょうか。
おじい・・・紳士のみなさま、ご教授お願いいたします。
448:デフォルトの名無しさん
18/12/11 21:55:08.95 ihMfYHRY0.net
Windows でも、ファイル操作なら、Ruby !
画面なしのツールなら、たいていのものは作れる
ポインタで時間を浪費することもない
449:デフォルトの名無しさん
18/12/11 23:16:54.03 j8P28cRB0.net
>>433
嘘を嘘と(ry
450:さまよえる蟻人間
18/12/11 23:27:54.09 CGbAPZXN0.net
相手にするのが時間の無駄。悩む時間で基本情報とITパスポートの勉強するのがはるかにまし。
451:さまよえる蟻人間
18/12/11 23:43:31.10 CGbAPZXN0.net
おじい、とか言って馬鹿にしちゃダメだよ。ワード、エクセルのエキスパートで、原子炉のタービンを設計するような「ものすごい人」も見てるんだからね。
452:さまよえる蟻人間
18/12/11 23:50:36.12 CGbAPZXN0.net
あと補足だけど、30歳定年説は、人件費を削るための嘘だからね。
人不足の今時にこんなことを言ってるアホの取引先は排除すべし。
453:さまよえる蟻人間
18/12/11 23:59:29.31 CGbAPZXN0.net
今時ハードディスク使ってモニターと照明費を削るようなケ�
454:`臭い企業とは取り引きしません!
455:デフォルトの名無しさん
18/12/12 00:19:15.01 ysgUNYaF0.net
Code For Japan というイベント内でも、
PDF, Excel などの表示情報が入ったデータを、
エンジニア(住職)が供養する企画をやっているw
456:デフォルトの名無しさん
18/12/12 06:43:02.35 MN/7vBAt0.net
>基本情報とITパスポートの勉強
何のことかと思って調べてみれば情報処理技術者試験のことか
そう言えば昔に第一種と上級シスアドに合格してたこと思い出したわ
457:デフォルトの名無しさん
18/12/12 11:11:59.11 Fd1X4TAb0.net
マシン性能の限界を突破する為に、関数型プログラミングがある。
458:デフォルトの名無しさん
18/12/12 11:23:33.13 MN/7vBAt0.net
関数型は抽象表現能力は高いが実行効率を追求する様な用途向きではないぞ
生産効率も圏論などの数学的思考に慣れていないと下手すればOOPよりも悪化する可能性が高い
459:デフォルトの名無しさん
18/12/12 12:19:40.64 XAdiQzbba.net
( ´_ゝ`)フーン
460:デフォルトの名無しさん
18/12/12 12:31:12.08 4PEjGm8GM.net
それ以前にマシン性能を言語で突破できたらノーベル賞ものかと w
461:デフォルトの名無しさん
18/12/12 12:38:27.52 b75HkCZx0.net
CPUは関数型言語を直接実行するようにできてないから遅いでしょ。
462:デフォルトの名無しさん
18/12/12 12:42:36.11 x/hCtcVY0.net
フォースとともにあれ
463:デフォルトの名無しさん
18/12/12 12:55:07.41 AGB/ZeXIx.net
CPUの限界を超えれる関数型言語上で関数型言語を作れば元の関数型言語の限界を突破できる。
その作った関数型言語上でまたry
んなわけねーよw
464:デフォルトの名無しさん
18/12/12 13:11:22.57 XAdiQzbba.net
SFのスレはここですか?
465:デフォルトの名無しさん
18/12/12 13:12:45.03 5HIThNOt0.net
【平和を実現するために】 武器調達の中止、格差拡大の抑止、労働移民の禁止、国政からのバカウヨ排除
スレリンク(liveplus板)
466:デフォルトの名無しさん
18/12/12 13:15:11.92 SHf/dQVX0.net
関数型プログラミングはλ計算の時点で全く理想的だから
有限のアドレッシングで動いてる今のCPUには全くそぐわない
だから関数型と今のCPUアーキテクチャは根柢から反りが合わないんじゃねえかと
すると関数型の書法を現状の機械語に書き直すだけでロスが出てくる
理想的なモンを劣化させてるに等しいが技術上はそうするしかない
そもそも関数型を直接実行できるようなCPUを人類が作れるかどうか
無限の再帰と無限のストリームが必要になっている時点で怪しい
467:デフォルトの名無しさん
18/12/12 13:25:42.01 LIx8RHBsa.net
昔どっかがLisp用にスタックコンピュータだか何だか作ってなかったっけ。
それはともかく、関数型言語でも結局どういうマシン語に落とすかだから、最適化技術で高速化は出来るはずなんだがな。
Cは低水準な操作も出来るから速いコード書けるとはいえ、素直なコードは最適化無しだと他の言語と変わらないし、
速度で言えば別に低水準な操作出来る訳でも無いFortranはC並みに速いわけで。
最適化への技術や時間の掛け方が違うってだけ。
468:デフォルトの名無しさん
18/12/12 13:28:27.57 SHf/dQVX0.net
シンボリクスだ
469:さまよえる蟻人間
18/12/12 14:37:12.07 duFENGTGd.net
理論的限界を超えたら、その理論のモデルが事実に反する訳だから、理論の反例になってしまう。
470:デフォルトの名無しさん
18/12/12 15:28:39.64 02Irmhu2M.net
ループに展開されることを期待して末尾再起化にハゲむってギャグだよな。
最初からループ書けよw
471:デフォルトの名無しさん
18/12/12 15:38:07.68 LIx8RHBsa.net
ループだと関数渡せないから。
あとはリストを受け取ってリスト返す関数とか、IOモナドとかは
再帰関数がそのままループになる。
(リストもモナドなので、モナドを返す再帰関数がループになると言える)
472:デフォルトの名無しさん
18/12/13 14:18:51.88 oii7E7F70.net
初心者です。
inline指定子について教えて頂きたいのですが、
関数ポインタからinline関数を呼び出す場合、どのように展開されるのでしょうか。
また、関数ポインタを格納する配列から呼び出すような場合はどのように展開されるのでしょうか。
473:デフォルトの名無しさん
18/12/13 14:32:27.38 1m7XwvCgM.net
inline関数の展開は環境依存
呼び出し方が如何なる方法であれ関数の構造によってはインライン展開される保証はない
ループ構造を含んでいると殆ど期待できない
474:デフォルトの名無しさん
18/12/13 14:56:19.82 oii7E7F70.net
なるほど、ありがとうございます。
まさに、
for (i = 0; i < length; i++) {
func_ptrs[i](hoge);
}
みたいなことを試そうとしているところでした。
こういう場合は展開は期待できないということですね。
今回も勉強になりました。
475:デフォルトの名無しさん
18/12/13 17:31:05.02 jSkPpV300.net
>>422
次は16EBの壁だな
476:デフォルトの名無しさん
18/12/13 18:29:51.36 Bj9kGxVc0.net
gccもclangも最適化を-O3にしても
if(a=='a'||a=='b'||a=='c'||a=='d'||a=='e'||a=='f')
をif('a'<=a&&a<='f')に置き換えてくれないのな
477:デフォルトの名無しさん
18/12/13 18:40:11.12 Fv0+Omexa.net
Tではないと
478:デフォルトの名無しさん
18/12/13 18:48:07.23 Fv0+Omexa.net
>>461
え?gccで -O -S で置き換えられたように見えるアセンブリ言語出力したぞ。(97引いて5以下かどうか見ているやうなやつ)。
-Oなしだと一つ一つ比較していて明らかに違う。
479:デフォルトの名無しさん
18/12/13 18:48:36.88 Gz5l93Ou0.net
GCCの動作環境は特定OSだけではないと思う
480:デフォルトの名無しさん
18/12/13 18:51:31.61 Fv0+Omexa.net
CPUによっては一つ一つ比較するように書いた方が速いなんてこともあるのかも知れないが、普通はそうならないように思う。
481:デフォルトの名無しさん
18/12/13 19:07:27.96 oii7E7F70.net
ソース全体で見たときに(a < 'a') や (a > 'f')の可能性もあるから最適化されないということでしょうか?
482:デフォルトの名無しさん
18/12/13 19:08:30.18 y280e6J90.net
>>461
>>465
a=='a'のときにべたの方が速いからだろ。
a-fが均等な確率だ、というのをコンパイラに対して教えてないし、教える方法もない。
だからコンパイラが勝手にそこを改変するようでは困るだろ。
(大半がa=='a'と分かっていて最速コードが欲しいときに記述出来なくなる)
C言語はそういう言語なんだよ。自動的に勝手にやってくれる言語ではない。
細部まで自分で指定できるからこそ極限までチューニング出来る。
最速コードが欲しければ、a-fの確率まで考えて、自分で指定しろ、でしかない。
483:デフォルトの名無しさん
18/12/13 19:28:54.20 VenLBJVu0.net
ワシのとこでも -O で「即値97を引いて即値5と比較…」が出たわ。
-O なしだと真っ正直に即値との比較が6回。
>>461 に書かれた通りの ('a'<=a&&a<='f') にならないと言っても、
'a'以上か? 'f'以下か? の判定2回よりもっと効率的になってるでしょ。
もちろん gcc のバージョンによる違いかも知れんが。
484:
18/12/13 19:56:57.11 mMIcaeGH0.net
>>458
ときどき夢にみます、inline 指定がどんな場合にも百発百中 inline になるコンパイラがあればどんなに嬉しいか…
485:デフォルトの名無しさん
18/12/13 19:58:30.01 Fv0+Omexa.net
>>467
あー。なるほど。
かといって言語の規格として最適化についてまで決まってたっけ?
その辺は決まってなくてコンパイラしだいのような気がするが。
486:デフォルトの名無しさん
2018/12/1
487:3(木) 20:01:00.67 ID:Fv0+Omexa.net
488:デフォルトの名無しさん
18/12/13 20:23:30.62 y280e6J90.net
>>470
規格云々以前に、適用ヶ所と文化の問題。
C言語がガチで使われている領域はそういうところだから、「書いたとおりのコードを吐け」でないと困るし使えない。
だから適当に改変するコンパイラは嫌われる。
対してC++は「出来るだけコンパイラにやらせる」思想だし、そもそもCほど掘り下げる使い方はされないから、
「可能な限り自動的に最適化しろ」な気はするが。
489:デフォルトの名無しさん
18/12/13 21:03:29.67 Bj9kGxVc0.net
C言語のアセンブリがすぐ確認できるサイトで調べてみたんだけど、
違うみたいだね。
490:
18/12/13 21:27:21.48 mMIcaeGH0.net
>>471
なるほど…
そういうときは、call されたときは inline に展開するけれども、関数のポインタとして渡されたときに動かすためだけに(実際にポインタから呼ばれるかどうかは考えずに)inline の関数を別にバイナリーに展開しておくっていうのはどうですか?
491:デフォルトの名無しさん
18/12/13 21:28:48.05 k+IaCMCPM.net
>>472
この人何言ってるんだろう…
492:デフォルトの名無しさん
18/12/13 21:30:50.24 Pd0B4/Sw0.net
>>472
ん??
493:デフォルトの名無しさん
18/12/13 21:53:47.05 y280e6J90.net
>>475
>>476
お前がな
494:デフォルトの名無しさん
18/12/13 22:39:39.76 fVy8DFiFa.net
>>474
関数内でstaticの変数が宣言されるケースも忘れずに。
495:デフォルトの名無しさん
18/12/13 23:12:49.49 k+IaCMCPM.net
ガイジかな? w ⇒ ID:y280e6J90
496:デフォルトの名無しさん
18/12/13 23:49:06.95 y280e6J90.net
>>479
まずお前がガイジじゃないことを示せよ
ゆとりなら死ね
497:デフォルトの名無しさん
18/12/13 23:54:03.07 Gz5l93Ou0.net
踏まないように気をつけて歩こう
498:デフォルトの名無しさん
18/12/14 05:40:44.32 yDEitqc60.net
うわっ、ガイジと言うよりマジキチやん ⇒ ID:y280e6J90
>>481が意味深になってて笑うわ
499:デフォルトの名無しさん
18/12/14 06:20:30.12 lAbDnTGa0.net
>>468
どうやったらそんなコードされるの?
なにをやっても全部比較しかでないのだが
500:デフォルトの名無しさん
18/12/14 06:26:32.39 lAbDnTGa0.net
いまやったら引き算と比較一回になった。
別の関数の中に比較を入れないと駄目みたいだった。
一個ずつ比較させたいときはvolatileを使えばいいんだな。
501:デフォルトの名無しさん
18/12/14 06:30:05.99 lAbDnTGa0.net
最適化をいれるとaが定数だとaが消されるからaを別の関数の引数にすることで
消されないようにできる。
volatileで消さないようにするとなぜか比較が最適されない。
502:デフォルトの名無しさん
18/12/14 06:46:52.77 gWmPrUHE0.net
>>484-485
それはvolatileの間違った使い方だから止めとけ。
最近そういう投稿も多いが。
503:デフォルトの名無しさん
18/12/14 06:52:31.89 TYVfP/dyM.net
最適化は処理の最中に使う変数が外部(別スレッドや割り込みハンドラ)から変更されないということを前提としてるから、volatileつけるとaの比較途中でaそのものが変更されるかもしれないので逐一比較になる。
まぁスタック上のローカル変数aが外部から変更されるってのは通常は単なるスタック破壊のバグだけどね。
504:デフォルトの名無しさん
18/12/14 06:53:45.77 8u55nHdC0.net
>>472
おまえ4.3BSDのccとかまだ使ってるのか?
505:464
18/12/14 07:50:49.15 FIv/Q2MJ0.net
>>483-484
素直なコードで出るはずだけどなぁ。
サンプル abcdef.c
第1引数の最初の文字が [a-f] なら yes, それ以外なら no と表示
(引数が与えられなかった場合は no を表示)
$ cat abcdef.c
#include <stdio.h>
int main(int argc, char
506:*argv[]) { int a; a = (argc>1) ? argv[1][0] : 'z'; if (a=='a'||a=='b'||a=='c'||a=='d'||a=='e'||a=='f') printf("yes\n"); else printf("no\n"); return 0; } $ gcc -S abcdef.c 最適化なし 比較6回 $ gcc -O -S abcdef.c 最適化 97引いて5と比較
507:デフォルトの名無しさん
18/12/14 09:57:08.83 v3sklYn80.net
volatileは磁気コアメモリ時代の命令じゃねえのか
508:デフォルトの名無しさん
18/12/14 10:14:56.92 lAbDnTGa0.net
>>489
mainで未定の値を作るのがむずかしいんだよ
aを初期化しなければ未定の値になると普通おもうんだけど
何故か何かの値に決められて最適化でaが消えちゃうのよね
509:デフォルトの名無しさん
18/12/14 10:15:15.85 QZB89f550.net
現在でも組み込み開発でSFRを弄るにはvolatile宣言は必須
510:デフォルトの名無しさん
18/12/14 10:28:42.01 lAbDnTGa0.net
結論を言うとvolatile で最適化を調べるために最適化を抑制したのが間違いの原因だっと
ということだな。
511:デフォルトの名無しさん
18/12/14 12:14:57.88 E1rpoA/W0.net
volatileは変数がI/Oポートにマッピングされてることを想定した仕様
コンパイラによる省略とかを許さず書いてある通りにアクセスする
512:デフォルトの名無しさん
18/12/14 12:47:24.45 TZB/LQMkx.net
>>494
I/Oだけじゃないよ。
別スレッドなど異なる実行コンテキスト間で共有する領域へのアクセスはvolatileをつけないといけない。
SFRへのアクセスもソフトとハードという実行コンテキストが異なる。
513:デフォルトの名無しさん
18/12/14 14:14:04.61 7OLXAkOEa.net
静的変数は全部つけないといかんのだろうね。
利用の趣旨としては。
514:デフォルトの名無しさん
18/12/14 15:46:34.42 FWw1nr6R0.net
ID:y280e6J90はvoid君だろ
515:デフォルトの名無しさん
18/12/14 16:07:06.94 cCP3RgWTa.net
volatile の使い所
1. マルチスレッドで他スレッドと共有される変数(ただし、別途ロックも掛けた方が良い)。
2. シグナルハンドラとその他の処理で共有する変数。
3. longjmp() 使う時。
516:デフォルトの名無しさん
18/12/14 16:08:45.11 cCP3RgWTa.net
これ書き忘れてた。
4. 指している先の内容が本当に揮発性の場合(I/Oポート等)
517:デフォルトの名無しさん
18/12/14 16:22:16.94 lsnrrwE80.net
記述された手続き以外の要素によって変数値が変わるなら
518:デフォルトの名無しさん
18/12/14 19:01:54.99 RfUJ40dd0.net
>>498
volatile変数をマルチスレッドに使うとかいう誤った知識を流布しないでくれ
volatileに指定してもマルチスレッド共有変数に求められる
* メモリフェンス
* 演算の原子性
は確保できない
URLリンク(stackoverflow.com)
519:デフォルトの名無しさん
18/12/14 19:20:00.03 td3PjTJAa.net
原子性って全然直交した概念ちゃうか。
確保できるとかできないとかいう話になるのがおかしい。
520:デフォルトの名無しさん
18/12/14 19:41:07.95 gWmPrUHE0.net
>>498-499
×××○
知らない人が見たらマジ議論と勘違いするのも無理はないが、
2chでのlongjmpなんてネタだから無視でいい。
>>501
全くだ。
というかマジな話、何をどこに使うべきかイマイチ分かってないのなら、
とりあえずいわゆる「正しいプログラミング」を目指した方がいい。
ここでの
521:与太話は、ネタをネタと(ry、でしかない。
522:デフォルトの名無しさん
18/12/14 20:47:21.99 8u55nHdC0.net
>>498
マルチスレッドは断じて関係ない
アフォwヴァカwww
523:
18/12/14 21:07:51.74 +oZBuxlP0.net
volatile なんか忘れて素直に pthread とか C++11 とか使っていればいいと思うのです…
524:497
18/12/14 21:15:41.90 6hfmhPbO0.net
>>502
そのはずなのに使えるなんて言う妄言痴言が飛び交っていたんだから重症だよ
>>503
シグナルハンドラに関してはvolatileが必要じゃない?もちろんその変数に対するatomicityも要求されるけど
525:デフォルトの名無しさん
18/12/14 22:13:48.43 gWmPrUHE0.net
>>506
知らんよ、俺はLinuxのsignalなんて使って無いし。
そのページには必要だと書いてあるし、そうなんだろうさ。
が、そもそも、俺に言わせれば
・volataileで実装出来る=ポーリングループ&せいぜいハンドシェーク=糞
・プロセス間通信する意味がない
スレッド間通信でsleep/wakeupで何も問題ないし、その方が自然だ。
この場合に自前でvolatileなんて書くことはない。
ハードウェアを直接叩かないのにvolatileとか、設計を見直した方がいいと思うぜ。
526:デフォルトの名無しさん
18/12/15 00:19:10.79 MJLVMCBK0.net
>>433
Cのコンパイラは環境依存になるため、コンパイラの出来、不出来がある。
527:デフォルトの名無しさん
18/12/15 01:44:33.10 USiGJg2x0.net
必要条件と十分条件の違いが分かってないやつがいるな。
528:デフォルトの名無しさん
18/12/15 09:51:27.56 hAY8T09E0.net
>>507
フェンスがないのにハンドシェークとは、これいかに
529:デフォルトの名無しさん
18/12/15 11:50:06.13 nIs3KSLY0.net
>>510
> 標準シグナルの場合、そのシグナルがブロックされている間に 同じシグナルの複数のインスタンスが配送されても、 1 つだけがキューに入れられる。
> URLリンク(linuxjm.osdn.jp)
しかし実際ハンドシェークだと思うぜこれは。
意識高い系()ゆとり()がCをやるとfenceという『CPU命令』が必要だと思っちゃうのか?
まあ無理も無いとも思えるが。
530:デフォルトの名無しさん
18/12/15 11:53:03.04 qrRqm5Rq0.net
それはC言語の話なのか、OSの話なのか、CPUの話なのか
531:デフォルトの名無しさん
18/12/15 12:22:47.52 nIs3KSLY0.net
フェンスが必要になったのはコンパイラ側の都合だから、C言語の話だね。
これが理解出来ないのはお前がゆとりの馬鹿だからだ。
マジな話、馬鹿の癖に煽るゆとりは死んで欲しいね。
お互いに何も得る物がない。
532:デフォルトの名無しさん
18/12/15 16:08:16.17 uiukVmhyM.net
>>513
533:デフォルトの名無しさん
18/12/15 16:24:43.93 tkQQweukM.net
フェンスが必要なのはCPUとコンパイラ双方のためだ。やっぱvoid君は馬鹿だね。
534:デフォルトの名無しさん
18/12/15 17:21:35.13 hAY8T09E0.net
>>511
ほうほう、fenceはCPU命令ではないんだな
それでそれで? volatileとどういう関係があるんだw
535:デフォルトの名無しさん
18/12/15 18:37:35.51 nIs3KSLY0.net
>>514-516
ゆとりは死ななきゃ直らないと再認識した。
ゆとりが馬鹿であり続ける権利を尊重し、教えてやらないことにする。
つっても、ググればいくらでも出てくるし、ゆとり以外には実害はないはず。
マジな話、上達したい奴は、ググっても疑問が解消しないときのみ、掲示板等に頼るようにした方がいい。
自力で勝手に進んでいけるか、いちいち構ってちゃん状態になるかでは、上達速度に雲泥の差が出る。
こんなところで下らない煽り合いに興じてるから、ゆとりはゆとりのままなのだと思うし。
StackOverflow(英語版)はかなり�
536:Iススメだ。迷ったらそこを頼れ。
537:デフォルトの名無しさん
18/12/15 19:04:30.55 /O2tQ50qM.net
void君は謎の捨て台詞好きだよね。かっこ悪いよ。
538:デフォルトの名無しさん
18/12/15 19:15:51.64 qrRqm5Rq0.net
ここにはお前に用がある人はいないそうだ
539:デフォルトの名無しさん
18/12/15 19:17:41.02 CVS0UY4MM.net
霊界は存在するよね。ググればいくらでも出てくるしww
540:デフォルトの名無しさん
18/12/15 19:40:59.06 nIs3KSLY0.net
以下、C言語について詳しいつもりの、格好いいつもりの粘着君が教えてくれます。ご安心を。
(レベルはあのコードを糞コードと認識出来ないようなので推して知るべし)
マジな話、volatileをスレッド同期に使え、なんてのは世界中の誰も言ってないだろ。
勿論longjmpもgotoもその類だ。
ここはそれを分かってるロートル連中が与太話をするところであって、
マジの初心者が来るのは危険だと思うがな。ネタをネタと(ry
初心者なら、まずは正しいプログラミングを目指すべきだと思うぜ。
本来はリアルで先輩/上司/先生に教えを請えるのが一番いいが、
駄目ならStackOverflow(英語版)を俺はオススメするが。
最近は知恵遅れも知恵袋と化してきていて、例えば以下(PHPのスレより、ただし削除済み)
URLリンク(detail.chiebukuro.yahoo.co.jp)
そこで焼け出された知恵遅れゆとりがこちらに押し寄せてきているのだと推測しているが、
お互いにとって不幸なことになってる。
ただし知恵袋が機能するなら、本来はIDがある分向こうの方がましだから、向こうを使った方がいいと思うが。
知恵遅れゆとりがスクラム組んで押し寄せることに対して、2chは防御手段がない。
実際、こいつらが役に立つことを一回も言ったことがないのも事実でさ。
こいつらは死ぬまでイナゴし続けるんだろうな、って思う。
541:デフォルトの名無しさん
18/12/15 21:18:31.36 hAY8T09E0.net
ニヤニヤ
542:デフォルトの名無しさん
18/12/15 21:37:43.77 VC87camXa.net
C言語について詳しいつもりの、格好いいつもりの粘着君ってこんな名言残した人の事ですか?
>なんだこれ?引数 void って初めて見たぞ。文法的にありなのかこれ?
543:デフォルトの名無しさん
18/12/15 22:00:05.11 nIs3KSLY0.net
>>523
お前らがその30年前に解決した話に異常に固執するのも意味不明だがな。
それはお前らのレベルではそれが全てだ、と言っているに等しいわけだが、それについては恥ずかしくないのか?
544:デフォルトの名無しさん
18/12/15 22:03:06.74 hAY8T09E0.net
ぐうの音も出ねえって
こいつのためにあるような言葉だなw
545:デフォルトの名無しさん
18/12/15 22:33:19.53 3LFJSGA60.net
void君て、半角カナ君とかなり似た匂いがするけど、亜種か別設定キャラだったりするのだろうか?
546:デフォルトの名無しさん
18/12/15 22:35:12.80 MJLVMCBK0.net
C言語はあとから標準化されたのと、コンパイラの実装はUNIXを想定しているため、OSが異なるとコードの意味まで変わる。
547:デフォルトの名無しさん
18/12/15 22:44:04.38 8aRCy95z0.net
オレは要点を簡潔明瞭にレスしてるからな
あったま悪い低学歴底辺のキミラの生きうつしになるvoid君と一緒にされたら困るワケ
キミラにとってvoid君はただの同族嫌悪
548:デフォルトの名無しさん
18/12/15 23:22:08.85 BLCVn7NJ0.net
初心者です。
ソートとコンパイラの最適化について教えて頂きたいのですが、
挿入ソートを書いてその実行時間を計測しました。
動的に確保した10000の要素数を持つ配列に、rand()関数でランダムな値を入れて、
clock()関数でソート時間を計測しています。
コンパイラはMinGWから入れたGCC6.3.0で、-O1と-O無しで実行時間にかなりの差が出ます。
バブルソートや選択ソート�
549:ナは極端に大きな差が出ないのですが、挿入ソートだけはかなり差が出ます。 -O無しだと7秒前後、-O1だと1.7秒ほどで完了します。 自分が書いた挿入ソートが正しい内容になっているかと、 このプログラムでの最適化でどのようなことが行われているのかおおまかに教えて頂きたいです。 挿入ソートは以下の様に書きました。 void insersion_sort(unsigned array[], unsigned length) { register unsigned *start = &array[0]; register unsigned *sorted = start; register unsigned *end = &array[length - 1]; while (sorted < end) { register unsigned *crnt = sorted + 1; while (crnt > start && *crnt < *(crnt - 1)) { swap(crnt, crnt - 1); crnt--; } sorted++; } }
550:デフォルトの名無しさん
18/12/15 23:41:43.90 nIs3KSLY0.net
>>529
> コンパイラはMinGWから入れたGCC6.3.0で
そのレベルならVS使えってマジで。
GUIでグレークポイント貼って追跡出来るだけで全然違うから。
> 自分が書いた挿入ソートが正しい内容になっているかと、
自分でデバッグしろドアホ。
自前でチェックすれば済むんだから、簡単に出来るだろ。
for (int i=0;i<10000-1;i++) if (array[i]>array[i+1]) printf("BUG: %d, %d, %d, %d\n",i,i+1,array[i],array[i+1]);
とか。
> register
使うな。
ってかおまえ、何を参考にして学んでる?
> void insersion_sort(unsigned array[], unsigned length)
> unsigned array[]
これもあんまりやらないと思うけど。
> 最適化でどのようなことが行われているのかおおまかに教えて頂きたい
それをマジで聞きたいならオブジェクトコード(逆アセンブルコード)を貼る必要があるわけだが。
551:デフォルトの名無しさん
18/12/15 23:50:10.65 BLCVn7NJ0.net
>>530
レスありがとうございます。
VSなら使っています。VSCodeですがw
ちなみにGUIでデバッグも出来ますね。
バグは出ていないのにデバッグする意味ってあるんですか?
質問の意図としては、「ちゃんと正しいアルゴリズムで実装できているか」という質問をしているのです。
「動かないからおかしいところ教えてください」という意味ではありません。
register指定子を付けるだけで、付けていないときに比べて2倍ほど変わるのですが、
付けないほうが良い理由を教えて頂けますでしょうか。
unsignedもあまりやらない意味を教えてください。
今はrand()から帰ってくる値が入っているだけですので意味ないのは確かですが。
552:デフォルトの名無しさん
18/12/15 23:53:27.39 BLCVn7NJ0.net
× 2倍ほど変わる
〇 ソート時間が2倍ほど変わる
連レス失礼
553:デフォルトの名無しさん
18/12/16 00:07:00.48 w2yggEy4a.net
引数voidにすると魔除けになるかもな
554:デフォルトの名無しさん
18/12/16 00:10:07.53 GOuL0+IB0.net
度々ごめんなさい。配列の桁数を間違えていました。
×10000
〇100000
です。
555:デフォルトの名無しさん
18/12/16 00:11:33.51 nrAiyUBx0.net
>>531
C言語に詳しくない俺でもわかるが、CPUは正と負の数を扱っているから、正の数と指定されると余計な処理が挟まる。
556:デフォルトの名無しさん
18/12/16 00:13:46.60 +TcxNu6P0.net
>>531
> ちなみにGUIでデバッグも出来ますね。
それならいい。
> ちゃんと正しいアルゴリズムで実装できているか
ならwikiでもどうぞ。いちいち聞くんじゃなくてさ。
URLリンク(ja.wikipedia.org)
> register指定子を付けるだけで、付けていないときに比べて2倍ほど変わるのですが、
マジで?
> 付けないほうが良い理由を教えて頂けますでしょうか。
URLリンク(cpprefjp.github.io)
つかマジで、お前が参考にしている本なりサイトはかなりヤバいと思うぜ。
(Cでも同じはずだが、実際効いているのであれば違うのか?)
> unsignedもあまりやらない意味を教えてください。
いや、書き方が曖昧だったが、[]をやらない。大概は、 unsigned *array だと思う。
つか、全般的に
557:コードが妙な書き方になってるから、直した方がいい。 初心者なら、単に教科書かその類に問題があるだけだと思うし。 >>532 この文脈でそこを誤解することはあり得ないから大丈夫。 (なのはリアルだけで、2chでは信じられないレベルのコミュ障がいるのもまた事実だが)
558:デフォルトの名無しさん
18/12/16 00:15:38.43 GOuL0+IB0.net
>>535
なるほど、ありがとうございます。
書き始めたときは何も考えていなくて、とりあえず大きい値が入れられるようにunsignedにしていましたw
今後正負で大きい値も扱える型の配列に直そうと思います。
559:デフォルトの名無しさん
18/12/16 00:24:06.30 GOuL0+IB0.net
>>536
レスありがとうございます。
ちなみにそのwikiの説明文を見て挿入ソートを書いています。
ソースの部分は読んでいませんが。
GCCは最適化を有効にしなければregisterが効くなんてのは結構有名だと思っていたんですがそうでもないんですかね。
配列引数に[]を書かないというのは、別に個人の趣味みたいなもんだと思うので良いんじゃないでしょうか。
他の人とコーディングするなら規約などに従いますが、今は自分一人で書いているだけなので。
[]が書いてあれば配列を渡すというのが一目瞭然であるから付けているだけです。(arrayという名前や、lengthが必要な時点で分かりますが)
*start = &array[0];としているのも同じ理由です。
*start = arrayと書くより分かりやすいと思うからそうしているだけです。
別にコーディング規約の話をしているわけではないのでこの辺でよろしいでしょうか?
560:デフォルトの名無しさん
18/12/16 00:25:21.59 +TcxNu6P0.net
>>535
まあそれはあるが、細かすぎるからいいかな、って思ってた。
>>537
あとな、多分、 unsigned ではなくて、 unsigned int の方が主流のような気がするが。
まあそれ以前に531の指摘通り、intでやれ、ということではあるが。
561:デフォルトの名無しさん
18/12/16 00:28:37.95 GOuL0+IB0.net
あとちなみに、registerが非推奨になっているのはC++の話ではないんですかね?
その辺も詳しい方いましたら教えてください。
562:デフォルトの名無しさん
18/12/16 00:29:37.27 GOuL0+IB0.net
>>539
unsigned intの省略型がunsignedだと思っていたのですが違うのでしょうか?
563:デフォルトの名無しさん
18/12/16 00:33:29.78 +TcxNu6P0.net
>>538
> GCCは最適化を有効にしなければregisterが効くなんてのは結構有名だと思っていたんですが
知らん。
というかそのそも最適化無効で使うことがほぼあり得ない。
さらに言えば、-O1ってのも奇妙で、普通は-O2か最近は-O3。
マジで君、全般的に色々おかしいんだよ。
> 別にコーディング規約の話をしているわけではないのでこの辺でよろしいでしょうか?
好きなように書けばいいんだが、上達速度を上げたいなら、『他人と同じコーディングルール』で書いとけ。
それで損はしない。
慣れてる書き方の方が速く読めるから、
他人のコードを読むときに同じ時間でより沢山のコードを読めるようになり、上達しやすくなる。
564:デフォルトの名無しさん
18/12/16 00:40:59.45 GOuL0+IB0.net
>>542
ちなみにO2とO3も試しましたが、O1と変わらないですね。
-O無しだとこの速度で、一体どこから速くなるんだろうと-O1を試したら速くなっていた、というだけの話です。
最適化無効で使うことがあり得ない、というのも今初めて知りました。ありがとうございます。
私から逆に言わせてもらうと、あなたも全般的におかしいと思います。
まず、質問に対する回答に全くなっていないという点。
あと、「上達速度を上げたい」などと一言も書いていないのですが、
一体どこからそう読み取って、「他人と同じコーディングルールで書け」などと余計なお世話を押し付けてきているのでしょうか。
先にも書きましたが、「今は自分一人で書いているだけ」なので勝手にさせていただきます。
あと万人に共通しうる「他人と同じコーディングルール」とやらのご教授もできたらお願いします。
できたらで結構ですが。
565:デフォルトの名無しさん
18/12/16 00:41:28.75 +TcxNu6P0.net
>>541
> 通常は、unsignedの後にintやlongなどと記述して用いるが、これを省略しunsignedとだけ記述した場合はunsigned intであるとして処理される。
> URLリンク(www.wdic.org)
そのようだが、ほぼ見ないと思うぞ。
まあ俺は仕様に詳しいわけではないし、俺の揚げ足取りをしたがっている
566:粘着君に期待しよう。 彼は喜々としてヒャッハーしてくれるだろうし。 ただ何度も言ってるが、全般的に色々標準的ではないので、教科書なり参考サイトを見直した方がいい。 そこで意固地になられる理由も俺には分からないが。
567:デフォルトの名無しさん
18/12/16 00:46:03.68 Q57qqdXG0.net
> 自分が書いた挿入ソートが正しい内容になっているかと、
じゃあまずチェックプログラムを作りなさい
①入力の列の値がすべて出力の列の値に含まれているかチェックする関数
②出力の列の大小関係が適切になっているかチェックする関数
①、②が面倒だったら、同じ入力の列の値を使って
qsort()の結果と出力の列の結果が同一になっているかチェックする関数
いろんな大量の乱数列使って問題がおきなかったらとりあえず誤りは検出されなかったことにすればいい
で、その前に
こういった試験するためのテストドライバをまず作ってみなさい
試験するためにはこういった機能があるテストドライバ用の関数が必要になると考えられるからな
①擬似乱数を生成する
②n個の乱数列を生成する
③n個の列を複製する
④n個の列をダンプする
というわけで作業に戻りなさい
568:デフォルトの名無しさん
18/12/16 00:46:05.25 +TcxNu6P0.net
>>543
前後したが>>544がそのまま当てはまる。
とはいえ、まあ分かった、俺は君には今後回答しないことにする。
それがお互いの為のようだし。
569:デフォルトの名無しさん
18/12/16 00:47:26.92 Q57qqdXG0.net
低学歴底辺ドカタのアドバイスなんか
聞く必要ないからな
570:デフォルトの名無しさん
18/12/16 00:50:09.46 JR5j914d0.net
半角まで出てきたwww
571:デフォルトの名無しさん
18/12/16 00:50:43.18 Q57qqdXG0.net
低学歴底辺ドカタ内部のオキテの話なんか
どうでもいいワケ
どうみても質問ではそんなどうでもいい話なんか書かれてないからな
572:デフォルトの名無しさん
18/12/16 00:54:38.84 GOuL0+IB0.net
>>544
「unsigned int」と書くか「unsigned」と書くか、や、
「あなたがどう書いているかを見かけるか」なんて正直、本当にどうでも良い話です。本当にありがとうございました。
「あなたが思う『標準的』」とかも本当にどうでも良い話です。
揚げ足取りを従っている粘着君に期待するのは勝手なんですが、私を出しに使うのはご遠慮願いたいです。
もっというと他所でやってほしいです。どうでも良いので。
573:デフォルトの名無しさん
18/12/16 01:00:00.06 GOuL0+IB0.net
>>545
レスありがとうございます。
①入力の列の値がすべて出力の列の値に含まれているかチェックする関数
少ない要素数の配列では目でチェックしましたが、
100000の要素数の場合、これは行っていないので作ってみようと思います。
574:デフォルトの名無しさん
18/12/16 01:12:48.33 +TcxNu6P0.net
>>550
なるほど君も別の方向にコミュ障だから、>>532な訳か。
俺は別に君をダシにしたわけではなくて、
君の質問の>>540-541に関しては粘着君が喜々として答えてくれ、それが君の為にもなるだろう、と言っているだけ。
ちなみに君が欲しがっている回答は、現時点では情報不足で誰も正確には答えられないんだよ。
それも最初に言ったろ。
なんつーか、ゆとりはマジでこのパターン多過ぎ。
表面だけ丁寧で、中身がものすごく無礼、というか。
お前はお姫様/王子様ではないんだぜ。
逆に半角君も俺にはよく分からんが。
表面だけやたら人を罵倒しているが、実際はいちいちシコシコ回答してるから、手間はかかっている。
コンプレックスの固まりで他人を馬鹿にしたいだけなら粘着君みたいになるはずだし、
(馬鹿にするだけで一切自分の意見を言わない
=意見を言うとそこに反論される可能性が発生するから怖くて出来ない)
何がどうなると半角君になるのかよく分からん。
575:デフォルトの名無しさん
18/12/16 01:20:36.44 GOuL0+IB0.net
>>552
>>546
あとあなたも大概「無礼」ですよ。人を侮辱する前にご自身の発言を読み直したらいかがですか?
いきなり「ドアホ」言う人は中々私の周りに
576:はいないです。 きっと「コミュ障」だからかもしれませんねw
577:デフォルトの名無しさん
18/12/16 01:26:00.46 +TcxNu6P0.net
>>553
そのレス自体が俺の方が数段上手なことを示しているわけだが、それも理解出来ないのだろ?
だから君はコミュ障なんだよ。まあいいが。
ま、きみは2chには向いて無いと思うぜ。
578:デフォルトの名無しさん
18/12/16 01:32:48.16 GOuL0+IB0.net
>>554
>>546
「どちらが上手か」や「コミュ障かどうか」や「2chに向いているか」を議論するスレでは無いのは理解できておられますか?
なんにせよ私にとってあなたは、全く理解の足しにならない人間だということは、低能コミュ障な私にもよく理解できましたので、更に数段上を目指してご邁進くださいませ。
かしこ。
579:デフォルトの名無しさん
18/12/16 01:35:58.25 nrAiyUBx0.net
>>538
C言語というよりコンピュータの基本を勉強した方がいい。CPUのレジストリは限られているから、本当にレジストリを使うマシン語がはかれたらOS、他のソフトウェアを阻害しかねない。
マルチプロセスではない昔のコンピュータならまだわかるが、CPUを占拠するようなコードを書くのは尋常ではない。
580:デフォルトの名無しさん
18/12/16 01:37:47.75 nrAiyUBx0.net
>>541
省略してはならない。これ基本。
可読性も落ちる。
ふざけているのか?
581:デフォルトの名無しさん
18/12/16 01:44:53.73 nrAiyUBx0.net
>>555
ネット上に転がっているサンプルはデタラメ、悪い例のオンパレードだったりする。
ちゃんと信用できるところを見ろ。
だいたいint型が何バイトで、CPUのレジスタ長が何ビットかわかってる?
582:デフォルトの名無しさん
18/12/16 01:53:47.94 nrAiyUBx0.net
コーディングスタイルは個人の好みで、できればよい、動けばよいなどと言う人間がこのようなソート処理を作るはずがない。
速い遅いのこだわりもどこから出てくるのかわからない。
583:デフォルトの名無しさん
18/12/16 01:57:29.82 GOuL0+IB0.net
>>556
メモリ周りの理解が深まると思い、C言語を学習してます。
レジストリ、というのはレジスタのことでしょうか?
register指定子ついてですが、
それをそのまま適用するどうかはコンパイラ依存だと認識しているのですが違うのでしょうか。
これら以外にレジスタを必要とする値や演算があったならば、それを采配するのはこのソートを行うプログラムではなくてOSではないでしょうか。
そもそも、たった3個のポインタ変数がCPUのレジスタを占拠してしまうほどのサイズを持っている変数とは思えません。
>>557
ふざけていませんし、そもそもここで質問する前提にコーディングしていませんでしたので、
「自分の分かりやすいように」記述していました。
つまり「可読性」は「自分にとって可読」であるものです。読みにくければ申し訳ないですね。
まぁこの数行程度のソースで読みにくいと騒ぐ上級者様がいるとは思えませんが。
あとさっきも書きましたが「コーディング規約」について質問しているのではありません。
この数行が読みにくくてしょうがない!というのであれば読んでいただかなくて結構です。
読んでくださる方に聞いているので。
確かに省略しすぎるのは自分もどうかと思っていますよ。
初めて「printf」なんて見たときは「なんのfやねん」って思いましたから。
584:デフォルトの名無しさん
18/12/16 02:02:53.44 zisHaYIc0.net
voidはまた質問者の気分を害して悦に浸ってるのか。こいつマジでスレの害悪だわ。
585:デフォルトの名無しさん
18/12/16 02:04:29.37 GOuL0+IB0.net
>>558
良いも悪いも、そもそもサンプルなんて読んでいませんし、挿入ソートがどういうモノか、というのだけを読んで書いていますので。
そもそも、ここもそのネット上なわけで。私が書いている関数の内容が正しく動くかや、あなたが今書いていることも信用していいんですかね?
疑い始めたらきりがありませんよ。
くだらない議論なので無価値ですね。
>>559
作るはずがない、と言われても作りました。何の根拠が?w
速い遅いのこだわり、とか書いていますが、そもそもこだわっていません。
「なんで自分の書いた挿入ソートのコンパイルが、最適化の有無でこんなに速度が変わるんだろう」というふとした疑問を書いているだけです。
私が、「速い挿入ソートが書きたい」なんて一言でも書いたでしょうか?
586:デフォルトの名無しさん
18/12/16 02:11:16.40 JR5j914d0.net
レジストリwwwww
587:デフォルトの名無しさん
18/12/16 02:14:08.51 GOuL0+IB0.net
さて、夜はふけてきましたが、
一部やかましいだけで有用な情報も得られなさそうなので、そろそろ休みます。
私が原因でスレをお騒がせしてしまって申し訳ございませんでした。
もし、挿入ソートが速くなる理由等分かるかたいましたら、また別の日にご教授頂けると嬉しいです。
ひとまずはテスト用のドライバ関数を作ってみたいと思います。
>>545さんありがとうございました。
みなさまおやすみなさい。
588:デフォルトの名無しさん
18/12/16 02:26:17.39 cTh7msTfM.net
自演お疲れさまでした
589:デフォルトの名無しさん
18/12/16 02:31:39.01 GdI2y+/Wa.net
おやすみなさい
590:デフォルトの名無しさん
18/12/16 02:44:07.72 GdI2y+/Wa.net
経験としては、O3にするとバクが顕在化するんであんまり使わないですね。
自分だけなら対応できるけど100人で作ってるプログラムはなかなか難しい。
591:デフォルトの名無しさん
18/12/16 04:45:04.91 lv3vm4Nk0.net
逆だろ
バグを顕在化させやすい条件を故意に作るんだよ
ストレステストとかそういうのだし
592:デフォルトの名無しさん
18/12/16 08:41:25.08 +JTyra3G0.net
>>529
一般に最適化は、常に同じ結果を出力する最短の計算に変換される。
ソートと書いてあるが、コードに特に比較条件がないので、これは単に
例えば(1 2 3 4 5)->(5 4 3 2 1)と入れ替えている。
元のコードは4+3+2+1=10の入れ替えが発生するが、単に入れ替えるだけなら、
5を1と4を2と、・・・と入れ替えればいい。計算数は2となる。
大小関係の確認を正しく入れれば、他のソートと同様なるかもしれない。
と、以上のように、俺が思っているだけなので、確認した方がいい。
593:デフォルトの名無しさん
18/12/16 09:54:31.21 +TcxNu6P0.net
おーい粘着!生きてるか!
折角俺様が「registerなんて見ねえ!」なノリなんだから、
一生懸命仕様を調べて突っ込みに来いよ!
お前の存在価値なんてそれくらいしかないんだし。
>>561
ゆとりなお前らはそれが駄目なんだよ。話が全く進まないだろ。
俺が間違っていることを言っていると思うのなら、ズバッと突っ込みに来るべきなのさ。
お前らはそれをする度胸もないまま、文句しか言えないわけでさ。
ゆとりが何万人いても何も作れなかったのはそれが根本的原因だよ。
少なくとも半角君は前に進むレスをしてるだろ。
彼が10人いれば確実に事態は進展する。
纏まることはないと思うが、それでも烏合の衆でしかないお前らより数段マシだ。
その言い方だと、お前も>>529のコードのやばさが分かってないだろ。
その他ゆとりも大概そんな感じだが。
それで粘着するのはお前らが全員馬鹿だと自身で証明しているようなものなのだが、
それも理解出来ないのだろ?
導くつもりなら、本当に見てやらないといけないのは「根本的に方向性を間違ってないか」であって、
完全にずれていると分かっている初心者の質問にも優しく答えてあげることではないんだよ。
それは逆に迷惑だと俺は思うがな。本人の為にならない。
とはいえ、どういうレスをするかは本人の自由だし、お前らなりのポリシーがあればやればいい。
それで「ゆとり専用:ぼくにやさしいすれ」が成立するのならそれもありだろう。
問題は、お前らゆとりは何もしない/出来ない癖に文句ばかり言ってるわけでさ。
それが本当にいけない。
594:デフォルトの名無しさん
18/12/16 10:01:21.28 aG56rBWDa.net
>>569
シェルソートとかコムソートじゃねえかな�
595:サれは
596:デフォルトの名無しさん
18/12/16 10:11:10.20 lv3vm4Nk0.net
>>570
525のコードのやばさが一番わかってないのはおまえだ
registerだあ? 全然関係ねえよ、おまえ上っ面しか見てねえ証拠だ
597:デフォルトの名無しさん
18/12/16 10:18:48.77 +TcxNu6P0.net
>>572
それで、お前は525のコードに
・問題がない、のか、
・俺が指摘してないもっと大きな問題がある、のか
を言えない/意図的に言ってないだろ。
それがお前らの最悪なところだよ。
突っ込まれるのが怖くて言えないのだとは思うが、
だからゆとりは死ななければ直らない、と言ってるわけでさ。
で?どっちなんだ?
後者なら堂々とマウント取りに来いよ。
598:デフォルトの名無しさん
18/12/16 11:10:40.38 lv3vm4Nk0.net
>>573
ほらな、何がやばいのか他人に聞かなきゃわからないだろ
煽れば教えて貰えると思っている甘ったれ野郎
599:デフォルトの名無しさん
18/12/16 11:39:09.26 Q57qqdXG0.net
というワケで評価用のテストドライバをテキトーにさくっとオレが書いてやったぞ
URLリンク(ideone.com)
あとはテキトーにやりなさい
オレのエレガントなテストドライバ関数群を使えば
いろんな整列アルゴリズムをバカでもチョンでも簡単に評価できる
①乱数列生成 :aho_malloc_random_data()
②列複製 :aho_malloc_clone_data()
③大小関係チェック:aho_check_seq1()
④要素存在チェック:aho_check_seq2()
リファレンス評価用に標準ライブラリqsort()もあわせて評価した
100,000件辺りの秒数で件数増加に伴うゴミっぷりの程度も評価している
このスレの低学歴知恵遅れたちが騒いでるようなコードについての問題は一切ない
vs2017でも適切に期待通りに動作することは確認した
評価する前から予見できてたことだが
挿入ソートがゴミすぎて困ることだけは改めて分かる
それ以外一切問題ない
低学歴知恵遅れが騒ぐコトはいつも的外れなワケ
600:デフォルトの名無しさん
18/12/16 11:49:03.98 +TcxNu6P0.net
>>574
それはお前のことだよゆとり。
そしてだからこそお前らは全く進歩せず、今でも池沼ゆとりのままな訳だ。
お前らは本当にワンパターンで、コミュ障も酷い。
それをパターン暗記で誤魔化そうとしているわけだが、そりゃ無理だ。
実際、それはお前にとって何ももたらさないし、その積み重ねが今な訳でさ。
少なくとも俺は何ヶ所も訂正すべき点を具体的に指摘している。
それに対してマウントを取るつもりなら、もっと重大なことを具体的に指摘せねばならない。
それをお前は出来ないから、どこかで見たフレーズで誤魔化そうとしているわけでさ。
ゆとりはマジでこれが酷い。
非ゆとりは、基本的には、自分で調べて理論武装し、挑んでくる。
この過程で成長する。だから、その後で紛糾しても、少なくとも当人には利益があるし、
当然勘違いしてたらぶっ叩かれるので修正もされる。つまり確実に本人は前進する。
お前らはこの過程をやろうとしないから、全く成長しないし、実際、してない。
だから今のお前が具体的に何も言えないわけでさ。
それを認めるのならまだしも、それをコピペフレーズで誤魔化そうとしているのだから重傷だよ。
聞くは一時の恥、聞かぬは一生の恥、って奴だよ。
リアルやID制のサイトならまだしも、
匿名掲示板ですら『恥』と思って聞けないその虚栄心では、リアルでは全く聞けてないだろ。
だからお前らは相変わらず池沼な訳でさ。
601:デフォルトの名無しさん
18/12/16 11:54:04.82 Q57qqdXG0.net
コレで挿入ソートがゴミ同然なのが
一目瞭然で分かる
sort(>>529のコード)
URLリンク(i.imgur.com)
qsort
URLリンク(i.imgur.com)
つまりもともとこんなゴミみたいなシロモノを
時間かけて最適化するのはムダ
602:デフォルトの名無しさん
18/12/16 11:54:37
603:.67 ID:W0MJyJGm0.net
604:デフォルトの名無しさん
18/12/16 12:07:06.08 fTV/MXSFa.net
ソートの性能は机上でわかるから、最適化について教えてくれや。
あとスーパースカラーの効き方とか絡めて語ってくれると助かるわ。
605:デフォルトの名無しさん
18/12/16 12:24:14.24 +TcxNu6P0.net
>>579
× 教えてくれや
× 助かるわ
お前らゆとりが駄目なのはそこなんだよ。他力本願過ぎ。
そして指摘しても糞女と同様開き直るし、救いようがない。
お前がどういう風に分かってないかなんて誰も知らないのだから、
お前自身がいろいろ調べて、
○ 俺的にはこう思うんだが、どうかな?
とやらないと駄目なんだよ。
具体的に上手くやったのは497で、497-499-502-503とならざるを得ない。
そのサイトには「シグナルでは使う」と書いていたから、それを否定する俺の見解を質してきたわけだ。
このやりとりは少なくとも彼には利益があっただろう。
そしてこの積み重ねが差になっていく。
お前も含めて、粘着共は何一つ意見を言えない。言う知能すらないからだ。
その差がどうして生じたのか、いちいち教えてやってんだからよく考えろよマジで。
606:デフォルトの名無しさん
18/12/16 12:25:29.13 XNrlNwMM0.net
>>529
挿入ソートの場合は、挿入すべき場所に直接挿入すればよいので、
swapで何度も入れ替えないようにして、必要なところに直接挿入するのがいいかもしれません。
一瞬バブルソートのように見えて、挿入ソートってこんなのだっけ?と思いました。
最適化についてはこのコードだけではなんともいえませんが、
大まかでよいのであれば、全体をclock関数で時間計測したように
この関数の中で経過時間を計測してみるのもよいと思います。
効果のある場所が限定できると推測もしやすくなりますので。