1 名前:デフォルトの名無しさん [2018/08/16(木) 23:36:02.22 ID:fOCSKLtw.net] C言語の話題のみ取り扱います C++の話題はC++スレへ 質問には最低限の情報(ソース/コンパイラ/OS)を付ける 数行で収まらないソースは以下を適当に使ってURLを晒す https://paiza.io/ https://ideone.com/ codepad.org/ C11 www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf C99 www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf kikakurui.com/x3/X3010-2003-01.html C FAQ 日本語訳 www.kouno.jp/home/c_faq/ JPCERT C コーディングスタンダード https://www.jpcert.or.jp/sc-rules/ 前 C言語なら俺に聞け 146 https://mevius.5ch.net/test/read.cgi/tech/1525031257/
596 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 12:25:33.09 ID:cD6Bz7+B.net] マシンによって違うのか? M-180HはCEモードでないと動作しなかったが
597 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 12:43:00.44 ID:zs5ycFHj.net] そういうことだね 俺んとこではPWOFFするオウンコードとかできたし
598 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 20:09:52.14 ID:cD6Bz7+B.net] それマイクロ関係ないだろ
599 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 06:31:31.30 ID:QWemr4wG.net] すみません思い切り初心者の質問です。 printf("%s: abc", str); ↑こういう文が abcのみが変わる形で(str変数は変更されません) 沢山登場するプログラムを作っており コピペが面倒だしバグの温床になりそうなので #defineマクロなどを使って引数にabcを指定すると上記の文がまるごと出力されるようにしたいと思いました。 そこで #define PR_POS(_pos) printf("%s: _pos", str) という定義を作ったのですが恐らく引用符の中身は変更されることはないので #include <stdio.h> #include <stdlib.h> #define PR_POS(_pos) printf("%s: _pos\n", str) int main(void) { char str[256] = "text"; //printf("%s: abc\n", str); PR_POS(abc); exit(EXIT_SUCCESS); } というプログラムを作っても実際コンパイルしたものを実行すると text: _pos という望んでいない出力が返ってくるだけです これを text: abc という出力にするにはどうすればいいでしょうか……。
600 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 06:43:34.91 ID:jQ6ZKbRR.net] >>591 #define PR_POS(_pos) printf("%s: " #_pos "\n", str) でいけるはず 詳しくは プリプロセッサ 文字列化演算子 とかでぐぐれ
601 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 06:44:40.48 ID:Df6BGOL7.net] #define PR_POS(_pos) printf("%s: " #_pos, str)
602 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 06:45:58.45 ID:Df6BGOL7.net] かぶった しかもまちがった >>593 は無視して
603 名前:591 mailto:sage [2018/08/31(金) 07:04:03.05 ID:QWemr4wG.net] >>592 うわあああ! ありがとうございます。 正直 検索しても検索しても一向にそれらしき答えが見付からなかったんで もう方法がないのかなとか思ってました……。 文字列化演算子なるものがあるのですね。用語まで教えていただいてほんとうに感謝しています。 しかもC99でも定められてるっぽい? (gcc -std=c99 -Wall -Werror -pedanticで警告がなかった) 嬉しいです。これで随分すっきりしたソースコードになりそうです! >>593 さまもありがとうございます。
604 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 07:18:20.44 ID:4o8e5lPA.net] #include <stdio.h> #define DEBUG(fmt, ...) \ fprintf(stdout, "%s:%d #%s " fmt "\n", \ __FILE__, __LINE__, __func__, ##__VA_ARGS__); 初心者ならこのマクロを覚えておくと良いぞ。誰もが一度は使うはず。
605 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 07:26:18.95 ID:jQ6ZKbRR.net] >>595 > しかもC99でも定められてるっぽい? X 3010:2003 (ISO/IEC 9899:1999) 6.10.3.2 #演算子 制約 関数形式マクロの置換要素並びの中にある各#前処理字句の次の前処理字句は,仮引数でなければならない。 意味
606 名前:K則 置換要素並びの中で,仮引数の直前に#前処理字句がある場合,対応する実引数の前処理字句列のつづりを含んだ一つの単純文字列リテラル前処理字句によって,#前処理字句と仮引数を置き換える。(後略) http://kikakurui.com/x3/X3010-2003-01.html [] [ここ壊れてます]
607 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 07:48:00.90 ID:QWemr4wG.net] >>596 すいません。初心者なのにめちゃめちゃ上から目線みたいになってしまうんですが assert()を使わないのはなぜですかね。 POSIX C99でも定義されているので ほとんどどのコンパイラでも処理できると思うんです。
608 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 08:16:53.54 ID:4o8e5lPA.net] >>598 マクロの紹介だけだから。 デバッグ方法としてならassertを多用したほうが良いぞ。
609 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 08:23:18.46 ID:LcHwdHfr.net] フィールドのエラーログ用に>>596 みたいなコードをリリースバイナリにも埋めることがあるけど その場合はassertじゃ役に立たないんだよな。
610 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 08:31:20.23 ID:uM5wy4o0.net] 斜め読みだけど、abcが変わってstrが変更されないならabcの方を文字列変数にしてprintfすれば良いんじゃね?
611 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 08:33:49.15 ID:CKe+Ima+.net] >>596 可変長引数マクロはgccだけって記憶があったけどC99規格で使えるんだね。 「可変部の実引数が0個の場合に……」のgcc拡張とゴッチャになってた模様。 >>598 警告を表示しても動作を止めたくない場合には重宝するよ。 デバッグ中に「ここまでは処理が通過した」と確認する時とか。
612 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 08:40:41.19 ID:QWemr4wG.net] >>602 なるほど。 assert()関数だと引数の結果が0の場合問答無用で停止してしまいますもんね。
613 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 09:08:12.10 ID:9zTxkh/J.net] 本番のコードと差が出て邪魔なのでassertはあまり使いませんね。 どうせデバッガ使うというのもあるし。
614 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 09:17:03.63 ID:QWemr4wG.net] >>604 本業の方の意見はほんとありがたいです。 コンパイルエラーと違ってassert(3)は実行時にエラーを吐くので同じ「実行するときに診断する」プログラムでassert(3)より高機能なデバッガ(GDBとか)を使うということですか? --- >>591 の処理ですが以下のように書き直したところ望み通りに動きました。 みなさまありがとうございます。感謝します。 #include <stdio.h> #include <stdlib.h> #define PR_POS(_pos) printf("%s:" #_pos "\n", str) int main(void) { char str[256] = "text"; //printf("%s: abc\n", str); PR_POS(abc); exit(EXIT_SUCCESS); }
615 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 10:04:04.85 ID:Qsv+Vg4k.net] assertの使い道って「ここでは必ずhogeになる!」という意志をコードに残すという意味はあるかな。 言ってるとおりで動かすときはgdb使うし、開発中は単体テストで同等以上の確認するしで、実用性は今はあまり無いと思いますね。
616 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 11:00:23.86 ID:mNRFahys.net] assertはどっちかつーと単体テストでよく使う
617 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 12:32:32.62 ID:QMdn6GpG.net] 本番コードでもassert使うかな ハードエラーみたいなのはカバーしきれない
618 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 12:51:53.38 ID:jQ6ZKbRR.net] >>606 > assertの使い道って「ここでは必ずhogeになる!」という意志をコードに残すという意味はあるかな。 assertion の意味は主張だからむしろそれが正しいとも言えるな > 実用性は今はあまり無いと思いますね。 最初作るときはそうでも改修時に全然触ってない所のassert()に引っかかることもあるから俺は基本入れてる
619 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 07:11:07.60 ID:667Fbrpy.net] int a = 42; a = a++; ↑これがコンパイルエラーになる理由って 「左辺aに対する代入と右辺aに対するインクリメントのどちらの演算を優先して処理するか不定である為」 で合ってますか? 不定じゃなくて未定義かも……。
620 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 07:29:52.76 ID:fa3EYjvI.net] エラーになるか? 警告ではなく
621 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 09:00:51.15 ID:667Fbrpy.net] >>611 -Werrorとかにしてました
622 名前:611 mailto:sage [2018/09/02(日) 09:07:14.14 ID:667Fbrpy.net] >>611 あれ。すいません。よく分からなくなりました。 $ gcc -pedantic -std=c99 -Wall -Werror -O2 でコンパイルするとエラーになり停止しますが $ icc -std=c99 -Wall -Werror -O2 でコンパイルするとあっさり通りますね……。
623 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 09:27:27.59 ID:pzXMyV5h.net] >>610 未定義っす (>>1 C FAQ の 3 章を参照してください) 蛇足ながらシーケンスポイントの間でオブジェクトを変更できるのは高々1回だけとか、そんな感じのルール >>613 gcc の -Werror オプションは警告をエラー扱いにするっす
624 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 09:59:41.19 ID:GR8jnF/5.net] 未定義だからコンパイラは何をしてもいい
625 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 10:00:57.15 ID:667Fbrpy.net] >>614 ありがとうございます。 ちなみにicc (Intel(R) C/C++ Compiler)で-Wallおよび-Werrorオプションを設定したときは 警告もなにも出力されることなくコンパイルに成功してしまったんですが 理由とか分かりますかね。すいません。変な質問で……。
626 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 10:19:45.38 ID:667Fbrpy.net] >>614 あと,おっしゃる通り(すくなくともC99では)未定義でした。ありがとうございます。 > 直前の副作用完了点から次の副作用完了点までの間に, > 式の評価によって一つのオブジェクトに格納された値を変更する回数は,高々1回でなければならない。 > さらに,変更後の値の読取りは,格納される値を決定するためだけに行われなければならない。 (JIS X 3010:2003 p.48; 参考 https://dotup.org/uploda/dotup.org1632204.png)
627 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 11:28:11.60 ID:owKXNyzr.net] >>610 そういう文法的になことには今は拘らない方がいい。(これは他言語学習者の方が酷いが) 上達の妨げにしかならない。 プログラミング言語は、「正しく書いたときに正しく動作する」ようにしか設計されていない。 特にCはそうだ。 意味不明なことを書いたらだいたい全て「未定義」であり、 意味不明なことを書く奴が悪い、ということになっている。 そしてそれが「未定義」と覚えることも、実質的な意味はない。 そんなコードはすぐに修正され、存在しないからだ。 実際、 a = a++; なんてコードは、どのOSSにもないはずだ。 この意味で、Cは全くの素人の入門者用ではない。 例えばC#はそこら辺厳しい言語で、そういった意味不明な書き方は全てコンパイルエラーにされるはず。 (さすがにその例では知らんが、例えば「未初期化の変数を使用」とかがエラーになる) というか、マジでそのレベルならC#やった方がいい。 文法エラーなんてサジェストが出てOK押したら自動的に修正してくれる。 お前がどんな環境でやってるのかは知らんが。 ただ、こういった無駄な遠回りをしなくて済むだけでも、君にとってC#は有効だと思うよ。 つか、初心者は全ての文法を押さえないといけないと勘違いするようだが、それは間違いだ。 自分が使うだけの文法を押さえ、さっさと使うべきだ。 お前だって日本語の全ての漢字が読めるわけでもないのに日本語を使ってるだろ。 プログラミング言語も同様で、手段でしかないのだから、文法を一通り確認したら、 さっさとゲーム等何でもいいから作れ。 ネタがないのならそれはそもそも今プログラミングを学ぶ必要がないとも言えるし、 それでもやりたいのならラズパイでも買ってきてLEDチカチカでも目指せ。 文法を学ぶことが目的になってはいけない。それは完全に空回りだ。
628 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 11:39:01.45 ID:mdI4MGys.net] やりたいことはシンプルに書けよってことだな。 最終的に a にどうなってほしいのか、それってもっと端的に書けないの?ってこと。 Cオタクになるのが目的じゃなければな。
629 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 12:11:10.31 ID:owKXNyzr.net] (ちなみに補足)>>610 初心者には理解不能だと思うが、 「文法で許されていることが全て許される」環境なんて実質的に存在しない。 だから文法のコーナーケースについてはそもそも覚える必要がない。 (とはいえ、肝心のK&Rがフリーダムすぎて…ってのはあるが) これは小説→ラノベの流れと同じで、 美辞麗句の技巧に走る必要はなく、簡単な文を書き連ねて面白い筋を書け、ということ。 プログラミングにおいてはこれが徹底していて、 同じ物なら、簡単な方が『常に』いい、ということになっている。 ただ、どこからが複雑なのか?というのは議論になる。 例えば自然言語で韓国が漢字を廃止した際、 「停留所」を「ばすが とまる ところ」と書き換え、老人が「舐めとんのか!」と切れた。 実際、全員が読める漢字を「もっと簡単に」という理由で平仮名に書き換えられても困るだろ。 丁度これと同じ(だが方向は逆)で、 新しいプログラミング言語は比較的すんなり書ける文法が用意されており、 それを使うべきかどうかでは揉めたりしている。 ただ、Cは古いのでまどろっこしい文法しかなく、ベタな書き方しか出来ない。 だから比較的この論争に巻き込まれることはないはず。 (それ以前に文法セット自体が小さくて、え?これだけ?のはずだが) >>619 天然と養殖では学びのベクトルが逆なんだよな。 天然: 1を足したい → a++ と書くのか 養殖: a++と書くと → 1が足されるのか 結果、要因側をenumすると文法一覧になるのが養殖で、これが間違いの元だ。 そしてそれを馬鹿正直に一つずつ潰すから文法エリートになっていく。 そうではなく、要因側のenum結果はやりたいこと一覧になって、全部揃えばゲームが作れる!が正しい。
630 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 12:24:17.27 ID:667Fbrpy.net] >>620 ちょっと反論があります。正直Cどころかプログラミング初学者なのですが……。 要するに私は養殖≠ナあり,そのような学び方では成長しないと仰りたいわけですよね。 まあ確かに自分でも「規格厨」というか,衒学的な性格をなのは自覚してます しかしプログラミング言語というのは自然言語とは違う面が多々あると思います。 そして「文法を網羅すべきか」という点においては特に違うと思います。 プログラミング言語は少なくとも概念においては文法に正確に従えば定められた動作を確実に行ないます。 日本語の文法を遵守して話しても考えが伝わらないのとは全く異るところです。 だから私はプログラミング言語においては先に(かなり厳密に)文法を学ぶべきであり, 「文法を学ぶ」ことのなかには未定義動作に関する諸々の知識を習得することも含まれていると考えます。 偉そうにすいませんでした。まあ上手くいかなければまた考えを改めるつもりではいます。
631 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 12:32:31.40 ID:mdI4MGys.net] やりたいことを素直に書いたつもりで未定義な文法になってしまうなら、もっと論理を考えた方がいいかも。 やりたいことを行う手順を整理できてないってことだと思うよ。 a = a++; ということが結局どういう動作するのかを知ることより、何をしたくてそういう(矛盾をはらむ)書き方になったのかを自己分析した方がいい。 もちろん基本的な文法は勉強しておく前提はあるよ。 おれは養殖とか天然とかは分からんけど。
632 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 13:02:03.12 ID:gypPfsRT.net] Cは文法的にはコードのデザインをほとんど規定しないからね。 そういう意味では頑張って覚えるほどでもない。まあ量も少ないので覚えてもいい。 でも古いコードとの互換性にこだわる様なおっさんにはならんでくれやという感じ。
633 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 13:06:08.54 ID:nnaQ2akS.net] >>621 あなたの言うことにも一理ある。 でもこの板にいる人は1つの言語しか使えない人って少数派で、たいていは3、4つまたはそれ以上の言語を操るマルチリンガルな人が多いと思う。 んで、その人たちはどうやって新しい言語を使えるようになるかって言うと、1つの言語をマスターすると(Prologとか特殊な言語は除いて)他の言語も方言みたいなもので、書き方の問題だけなことが多いのね。 その際には特定言語の重箱の隅をつつくような知識が必要なわけではなく、むしろ最大公約数的な知識、もっと言うと言語に依存しない設計力のほうが大事になってくる。 なので、特定言語のあまり細かいルールにこだわり過ぎないほうが良い、という経験論での意見は間違ってはないと思うよ。
634 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 13:21:05.23 ID:mdI4MGys.net] そうそう、しいて文法を覚えるなら適切に const を指定するクセを付けてほしいな(const に限った話ではないんだが)。 文字列を引数で受ける箇所全部が char* になってるコードを見るとクラクラするw
635 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 13:50:09.03 ID:owKXNyzr.net] >>621 反論自体は自由にやればいいんだよ。それが匿名掲示板のメリットなのだから。 ただ、書かれている内容については吟味しないといけない。 その中には君にも峻別出来る内容もあるはずだから。 (というか、こっちが君にも分かる範囲で《客観的な範囲で》話せばいいのだが) 事実から言うと、C言語は『当初から』バリバリの実用言語であり、今も現役だ。 これは同世代の他言語とは全然違う。 だから、普通に書いてれば「未定義」なんてのに命中するはずがないんだよ。 そんな言語、使い物にならないだろ? 次に、歴史も長いのだから、何をどうやったら嵌るかのノウハウも溜まっている。 それの集大成がコーディングルールであり、例えば goto 禁止論だ。 これについても是非はあるが、これまでの経験をタダで享受する気なら、乗った方が得だ。 そしてそれに従っておけば大体全て「未定義」は回避出来る。 具体的に言えば、警告レベルを一番か二番目に厳しい状態で使って、警告についてはほぼ全部直し、 google等「コードを実際に書いている連中」のルールに従って書けば、そもそも未定義なんて踏まない。 それらはそのように整備されているから。 業務で「コーディングルール無し、警告も全部無視してよし」なんてのはあり得ないし、 仮に個人レベルでそうでもバグが取れなくて無駄に苦労するだけ。 だから結果的に「未定義」なんて気にする必要ないんだよ。 一般的な環境で普通に書いてれば命中しないし、知る必要もない。 一通りも書けない初心者なら特にそう。他にやることはいくらでもある。 君は休日にプログラミングをやろうとしているのだから、本来は「天然」なんだよ。 それを自分で「養殖」型のカリキュラムにして、無駄に上達しにくくなってる。 そこが勿体ない。 君が何の為にCを学ぶのかは知らないが、もっと直接的にその結果を目指すべきだ。 とりあえず学ぼう、では全く上達しないんだよ。 それは日本人の英語でもそうだろ。使わないと上達しないんだよ。
636 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 13:50:53.63 ID:667Fbrpy.net] >>624 確かにそうですね。先に述べた通りプログラム全般に暗いのですが JavaやPythonなども大まかな構造(サブルーチンとか演算体系とか)は 似ているかなと感じました(見当違いなこと言ってるかも)。 もっと抽象的な立場になったほうがいいですかね。 >>625 アドバイスありがとうございます。 ggってみたところconstはその重要性の割に実務で使われていない傾向にあるみたいですね。 しかし役割を考えると,特に保守の面で,積極的に使うべきだなと確信しました。 「ここは固定された値代入を想定している」という意図を明確にできるってことですよね?
637 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 14:03:37.00 ID:667Fbrpy.net] >>626 そうですね。 動くプログラムを作っていたらa=a++;なんていう文は登場することはないですね。 お察しの通りプログラマーでもなんでもない独学状態なので, そういう人間が犯しがちなミスを防ぎたい一心で規格や文法などを厳密に勉強すべきと思っておりました。 C#についてですが,こういう事を素人が言うのはまさに傲慢ですけど, どうせ勉強するなら万人が使ってる/種々のソフトウェアを作っている標準言語を勉強したいな と思ったのがきっかけなので,正直C#はあまり乗り気になれません。
638 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 15:19:58.46 ID:mdI4MGys.net] >>627 const の役割はその通り、その値を書き換えないことを意思表示するためのもの。 strcpy の引数なんかを見ても分かると思うけど、このように使い分けするだけで関数の入出力もよくわかる。 ケアレスミスで入出力を逆に書いてもコンパイラが指摘してくれる確率が上がるし、コンパイラにとっても最適化のヒントになってる。 でも実際、const皆無のコードも珍しくない。 そんな所に自分だけ const 付けると、余所の関数を呼ぶために意味不明なキャストをするハメになってストレスMAXになる。 ただ厳密に考え出すと、値受けの引数 int x なんかは const int x であるべきでは?なんて思うけど、個人的にはそこまで強要はしなくてもいいかな… なんて思う。 でもポインタ受けの引数 char* p なんかは const char* p にすることを強要したい。 前者について緩いのは、その const はその関数の中の実装を縛るものであり、そんなことは関数の外の世界の人にとってあまり重要ではないから、というのが理由。
639 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 15:26:12.33 ID:FVhWhkTR.net] >>628 C#にマイクロソフト性を強く見出しているのか知らんがJDKがゴタついていて.NET Coreが出てマルチプラットフォームで優位性があり、Unityでゲームも作れる コンピュータを勉強したいならCでいいけどプログラミングを勉強したいならCと比較してもC#は十分万人が使っている標準言語としての地を持つよ
640 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 15:44:37.64 ID:Q8aSECkx.net] 組み込みなどの特殊な分野を除けばC言語の方こそ万人向けとは言い難いな C言語はそれほど広範な分野で利用されるような言語ではないよ
641 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 16:20:10.20 ID:d8qknsqq.net] C言語が使えない環境は少ないけど、かと言ってC言語を積極的に使う必要のある環境も少ない、かな? でも全ての基本として、低レベルなCを理解しておくのは有意だと思う。
642 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 16:34:34.65 ID:mdI4MGys.net] C の前にアセンブラやってみるのも悪くないと思うよ。 今はお手軽なワンチップマイコンも多いし。 欲を言えば昔の 8bitパソコンくらいがメモリもそこそこあってちょうどいいし、16bit くらいになるとスタックフレームも使いやすくていいんだけど、今そういうので丁度いいのはあまり無いのが残念なところだけど。
643 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 16:48:06.49 ID:owKXNyzr.net] >>628 君が思っているほど言語間の差異はないよ。 とはいえ、本気でコンピューターについて学ぶのならCは外せない。 最初からやる必要があるとは思わないが、それも含めて自由にすればいい。 最初はスクリプト言語(Ruby/Python/JavaScript)の方が上達は速いとは思うが。 >>627 > ggってみたところconstはその重要性の割に実務で使われていない傾向にあるみたいですね。 constもある意味宗教だからね。 使われてない理由は、単に、苦労に見合う結果を得られないからだよ。 Cに関してはconstを積極的に付ける理由もないからね。 C++は参照を導入したからconstを付けないと変更されるかどうかが分かりにくくなった。 Cだとポインタなら変更される(可能性がある)、そうでないなら変更されないと文法的に確定している。 だからgoogleは参照はconst以外禁止、というルールでC相当にしている。 C#では明示的にoutと書いて分かりやすくしている。 constを付けたことによるメリットは、constに対して代入したときにコンパイルエラーになることだが、 そもそもこれがないんだよ。constなんて間違う場所に使うものではない。 (ただし俺はCでストリング操作を積極的にやったことはないので、char*に関しては分からん。 >>629 が引っかかっているのもそこだろうし。 とはいえ、世の中はstringはimmutableということでほぼ確定してしまったし、 今更mutableなstringの作法について学ぶ必要もないはずだが)
644 名前:デフォルトの名無しさん [2018/09/02(日) 17:06:32.38 ID:4Jf6YH6e.net] >>633 まず、エミュレータを作ります。
645 名前: mailto:sage [2018/09/02(日) 17:48:53.86 ID:oSO4LvdH.net] >>626 >君が何の為にCを学ぶのかは知らないが、もっと直接的にその結果を目指すべきだ。 >とりあえず学ぼう、では全く上達しないんだよ。 うーん、これは非常にいい指摘ですね 私は、これに気が付くのにずいぶんと遅くなってしまいました
646 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 18:34:07.99 ID:5WqNet32.net] 素人は技術もないのに、登山で直線的に、絶壁を登ろうとするから失敗する。 勉強のプロは、斜めに進んでいくから、登れる 素人がすぐに思いつくような、直線的な方法をやってもダメ。 全員が失敗してる。 C の授業を受けた、ほとんどの大学生が、こんな授業は無駄・役に立たないと言ってるw 彼らはなぜ、そう言うのか、理由を考えたらよい C のようなポインタのある言語を、1年勉強しても、 ポインタを追っかけるだけで時間がつぶれるから、何も作れない その時間で、Ruby/Python/JavaScript の3つの動的言語をやれば、ツールを作れる まず素人は、動的言語・静的言語・ポインタのある言語の、 位置付けや難易度をわかっていない
647 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 18:36:32.73 ID:xLyKs+8r.net] ポインタってそんなに難しいか?
648 名前: mailto:sage [2018/09/02(日) 18:46:30.43 ID:oSO4LvdH.net] >>638 難しいと思います C++ に移ってからも、T ** を T *& に書き直すとかする段階で、自分のポインタ概念の認識が浅かったことを実感させられたりしたものです
649 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 19:00:28.56 ID:zPdaUXCQ.net] Cのポインタはシンプルだからわかりやすいと思います ビット演算のほうが難しいと思います m = (m & 052525) + ((m & 0125252) >> 1); m = (m & 031463) + ((m & 0146314) >> 2); m = (m & 007417) + ((m & 0170360) >> 4); m = (m & 000377) + ((m & 0177400) >> 8);
650 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 19:30:02.62 ID:nnaQ2akS.net] >>640 8進数表記って滅多に使わないから、たまに良かれと思って桁合わせでゼロパディングすると意図せず8進数になって悩むよな。
651 名前:デフォルトの名無しさん [2018/09/02(日) 19:43:35.59 ID:4Jf6YH6e.net] >>641 あ、それ、30年ぐらい前にハマった。 幸い8や9を使っている所でコンパイルエラーになったからよかったが(それでも当初はなんでエラーになるのかと悩んだがw)、もし使ってなかったらROMに焼いてからターゲットマシンで変な動きになって悩み続けた事だろう。
652 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 22:38:57.74 ID:u9h+2eE3.net] Cが全盛だった時代
653 名前:、否が応でもプログラミングの勉強はCから始めた。 昔の人は理解できて今の人には難しいと考えるのは傲慢ではなかろうか。 ところでアンサイクロペディアのC言語の項が18禁になってるのは全部椋田のせいだな。 [] [ここ壊れてます]
654 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 23:21:32.95 ID:owKXNyzr.net] >>643 > 昔の人は理解できて今の人には難しいと考えるのは傲慢ではなかろうか。 いや事実だ。理由は単純で、つまりは裾野が広がっているだけなのだが、以下。 1. C言語の難易度自体は昔と同じだが、C言語の問題点を修正したより簡単な言語が開発された。 2. 昔プログラミングをしてたのは理系の大学生/大卒だけだった。 今は文系も含め、しかも中高生から始めようとしている。 数学で培われる論理/抽象思考能力はプログラミングに不可欠なのだが、 これらがまだ整っていない状態の中高生や文系にプログラミングを教えるってのがそもそもの間違い。 どのみち今の状況で計算機科学専攻ならCは必修だろうし、そういう連中には問題ない。 ただ、そうじゃない連中がCをやる必要はないってこと。 Pythonだけで済む世界ならそれもありだ。
655 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 00:24:24.13 ID:gEsVL0BV.net] 昔も中高生の頃からプログラミングは始めていたけどな いわゆるベーマガ世代の年齢層がBASIC やアセンブラからC言語に流入してたので平均的レベルは比較的高かったように思う
656 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 00:32:54.22 ID:4uYLlRfz.net] 処理目的の抽象度が上がっているという現実もあるからなぁ
657 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 00:35:18.97 ID:wBpew+1c.net] プログラミングの学習は、最初電卓でやってた ニーモニックが16進表示みたいなやつだったな それで、ループや分岐、サブルーチンを覚えた その後は、Z80のアセンブラに移ったっけ 高級言語やりたかったけど、 8ビットのプアなPCしか持ってなかったし 漢字モア使えないPCで漢字ROM買って取付け 漢字非対応のドットインパクトプリンタに 機械語プログラム使って漢字出力してた
658 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 01:05:18.32 ID:co6OAOoM.net] >>645 ベーマガやってた連中はごく一部なのだから一般化するのは無理がある。 そしてそれに対応する連中は、今はもっと増えている。 家にPCがあるのが当たり前の時代だし、IDEも無料、 インターネットでOSSのソース見放題、質問も出来る。 昔の大学生も、大学で初めてプログラミングした連中はCで撃沈してた。 今は昔と比べてIDE等の環境が断然良くなっているが、 大学生の割合が増えた分、大学生の平均的頭は悪くなっている。 (昔は上位1/4が大学生だったが、今は上位1/2で、東京に至っては2/3じゃなかったっけ? 昔だと当然高卒だった連中が大学に行ってるのだから、Fランでは授業が成立しないのも当然) だから今の「平均的大学生」が大学でプログラミングを始めても、当然Cでは撃沈する。 今の「上位半分の大学=国公立+有名どころ」(=昔の上位1/4の頃の大学生相当)の理系で、 昔の大学生と同様にCで撃沈するはず。 それを文系含めて全員プログラミングをやらせようってのだからかなり無理がある。 とはいえ、個人差の方が大きいし、やるのは自由だ。 ただ、もっといい言語(改良された言語)は沢山あるのだから、無理してCに拘る必要はない。 情報/計算機系はどうしても速度勝負になるから、どのみちCは外せないが。
659 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 01:20:48.33 ID:kJOKS5+S.net] 今の平均的な大学生のレベル低下はゆとり教育の弊害だと思うが
660 名前:デフォルトの名無しさん [2018/09/03(月) 01:38:17.54 ID:y7r/YW4w.net] https://ja.m.wikipedia.org/wiki/%E3%82%86%E3%81%A8%E3%82%8A%E6%95%99%E8%82%B2 ゆとり教育(ゆとりきょういく)とは、日本において、1980年度(狭義では2002年度以降)から2010年代初期まで実施されていたゆとりある学校を目指した教育のことである。 1980年度から2010年代初期 1980年度から2010年代初期 1980年度から2010年代初期 1980年度から2010年代初期 1980年度から2010年代初期
661 名前:デフォルトの名無しさん [2018/09/03(月) 01:45:48.17 ID:dM1zEtwp.net] アセンブラ(マシン語)からやったほうが イメージしやすいと思うんだけどな。ポインタ周りとか 現代はPythonやC#が潰しが利くから昔でいうCの位置かな https://cpplover.blogspot.com/2016/05/mitsicp.html
662 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 02:48:03.81 ID:WkDP4f9E.net] みなさんほんとうに色々な助言ありがとうございます。 目的はなにかといいますと,ゲームを作りたいのではなく,むしろ計算機の仕組みなどを学びたいと思っています。 やっぱり始めはPythonのほうがいいんですかね……。 (ちなみにガッツりゆとり世代です。中学あたりで土曜日通学が復活したかな?)
663 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 05:37:12.02 ID:WkDP4f9E.net] 調べただけですがRustもよさげですね。私が学びたいと思っている計算機の基礎的な部分に触れられると同時に C99では非常に複雑で非本質的な努力を要求される,安全なメモリ管理やUnicodeに対応した文字列操作が 簡単に実現できるというのは魅力的です。また,Mozilla社が主導しているというのも好印象です。 難点は,かなり新規の言語なので,Cほど開発手法が洗練されておらず, またコンパイラの実装が一つしかないことですかね。 しかし開発版ながらRust製のOSもあるようですし,私がCを通じて得たいなと思っていた知見や概念を Cほど紆余曲折を経ずに取得できそうです。(学問に王道なしとは言いますがね……) これ以上は(というか既に大分)スレチになってしまうので書き込むのはやめます 青二才に貴重な時間を割いて様々な助言を頂いたこと,ほんとうに感謝しています。
664 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 07:47:15.40 ID:Sux6qqaT.net] 別にCでいいと思うよ。 ただ何使うにしても、画面表示とかができないとモチベーション上がらないかもね。 GUIとまではいかなくてもコンソール上にテキストで簡易グラフィックくらいやらないと、動いてる様を眺める楽しみが半減だ。 エスケープシーケンスとかを一緒に勉強するといいかもな。 とりあえずライフゲームでも作って眺めてみたら。
665 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 08:01:08.87 ID:gEsVL0BV.net] まあ手っ取り早くプログラミング全般を眺めるならマルチパラダイムの言語を最初に学ぶのも悪くはないと思うよ 手続き型、オブジェクト指向、関数型のマルチパラダイムなら、他にはC#やJavaScriptなどが環境が充実してるので手軽ではあるけどね
666 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 08:20:45.29 ID:/AUwjj56.net] 計算機の仕組み、つまりコンピュータの動作原理を学ぶならアセンブラだろうけど、普通のOSのAPIはCなので、やっぱりC言語を勉強するのはベストプラクティスだろうね。 PythonだったりC#だったりはプログラミングは習得できても動作原理は深く学べない。 果たしてC#等の高級言語しか使えない人の何割が割り込みやCPU動作モードやSFRについて正確に理解してるのやら。
667 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 08:30:03.31 ID:4uYLlRfz.net] >>653 Rustの方が細かなノウハウでコケずにコンパイラが指摘してくれるというのはあるが今の目的ならCの方が素直でいいと思う 実機の動きを追える上に色々な機能が付いていて嬉しいという言語なので覚える事が滅茶苦茶多いよ
668 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 09:18:58.58 ID:co6OAOoM.net] >>652 中高生なら学校の勉強しとけ。結果的にそっちの方が近道だから。 プログラミングは抽象思考が出来て自分でサイクルを回せる奴しか上達しない。 具体的に言うと、「○○→△△って事は●●→▲▲ってことだろ。 ならここをこう改造すればこうなるはず…ビンゴだぜ!俺って頭イー」 を『自分だけ』で勝手に繰り返せる奴だ。(β) 学校の教科でこれに最も近いのは物理で、次点で数学だ。 だからこのタイプの奴は物理と数学は『本人は特に努力した覚えが無くとも』無双出来る。 逆に言えば、そうなっていない奴は本質的にプログラミングに向いてない。 その場合は、そもそもプログラミングをやるべきではないと俺は思っているが、 それでもやるのなら、まず物理と数学の『勉強の仕方』を変えて『抽象思考』を身につけるべきだ。 (単に勉強するだけなら『暗記』でも一定まではカバー出来てしまうが、それでは意味がない) プログラミングを始める前に、プログラミングが上達する基礎能力としての抽象思考を身につけないといけない。 次に、既にこれが出来ていたとすると、 教科自体の内容はプログラミングには直接は関係ないから、中高生でも出来るのは事実だ。 (ここら辺のことをわきまえず、『中高生でも出来る』とだけ見て全員に教えようとしてるから問題がある。 とはいえ、主導している馬鹿共はプログラミングが出来ない連中だから、話が通じないのも当然だが) 仮に君がここまでは到達しているとして、話を進めると、以下になる。 > むしろ計算機の仕組みなどを学びたい 現状、C以外に選択肢はない。 > Rust 止めとけ。今のRustはプログラミング初心者用には出来てない。C以上に確実に撃沈する。 > Python 海外では「関数呼び出し、ループ、条件分岐」等の基礎の基礎を学ぶのなら一番早いと言われている。 現実的にはAWK/Perl/Ruby/JavaScript等いわゆるスクリプト言語全般は全てこれに当てはまるが。 ただ、上記の「プログラミングが上達出来る奴」ならこの部分は数日〜数週間で通過してしまう為、 言うほど関係ない。「初心者ならどの言語でも同じ」とよく言われているのはこれ。
669 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 09:19:38.61 ID:co6OAOoM.net] 例えば体育、運動神経のいい奴は何をやってもそこそこ上手いし、一瞬で上達するだろ。 あれと同じで、「プログラミング神経」のいい奴はどの言語でも上手く行くし、すぐ上達するんだよ。 だから言語自体よりは「プログラミング神経」としての『抽象思考』能力の方が重要なんだよ。 そしてそれがない奴が頑張ってみたところで、 ちょっと運動神経のいいやつが遊びでやってるのを見たらスゲー上手くて萎える、みたいなことになる。 だから本当は基礎能力としての抽象思考を鍛えることが重要で、プログラミングの上達はその結果にすぎない。 そこを「プログラミングを『教えれば』上達する」と勘違いしている馬鹿が色々やろうとしてるからおかしなことになってる。 『教えれば』上達するのは暗記科目であって、 上達する状況を整えた上で『勝手にやらせる』と自然と上達するのが非暗記科目だ。 で、言っちゃ悪いが君は多分「抽象思考」型ではなく、「暗記」型だ。enumして全潰しというのがそれ。 君は本質的にプログラミングに向いてないタイプだと思うぞ。 教科の延長でプログラミングを学びたいと思ってるのなら止めとけ。 上記(β)タイプは主に一点突破で、むしろ勝手に突っ込んでいって自爆するのが多い。 最近出てきたのはGateboxだが、いい感じに突き抜けてるだろ。 https://gatebox.ai/home/ www.itmedia.co.jp/news/articles/1612/14/news092.html こういうことを平気で出来る奴じゃないと上達しない。 君にはその臭いを感じない。
670 名前:デフォルトの名無しさん [2018/09/03(月) 09:45:55.75 ID:XmaAZlOW.net] https://ja.m.wikipedia.org/wiki/%E3%82%86%E3%81%A8%E3%82%8A%E4%B8%96%E4%BB%A3 ゆとり世代 ゆとり世代(ゆとりせだい)とは、ゆとり教育(ゆとりきょういく)を受けた世代のこと。 定義・範囲 ゆとり世代については明確な定義、範囲はなく諸説ある。 ・小中学校において2002年度施行(高等学校は2003年度)の学習指導要領による教育を受けた世代(1987年4月2日 - 2004年4月1日生まれ)。 ・小中学校において1980年度以降(高等学校は1982年度以降)の学習指導要領による教育を受けた世代。1966年度生まれ以降。
671 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 09:58:26.53 ID:udP6IpNT.net] やっぱりプログラミングより数学の勉強の方が全然大事だと思うわ 無駄な時間を過ごしたおっさんの後悔からの発言だけど 若者は線形代数と物理いっぱいやった方がいいよ
672 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 11:14:17.43 ID:sjKCXLyo.net] BIOSの割り込みサービスで画面に文字表示するやつよんだらどうなりますか?
673 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 11:36:38.73 ID:CjQwreEv.net] >>653 これでも買っとけ 70年代のTRPGの生の感触がばりばり伝わってくるAD&Dの本 コンパイラ―原理・技法・ツール (Information & Computing) | A.V. エイホ, R. セシィ, J.D. ウルマン, M.S. ラム, Alfred V. Aho, Jeffery D. Ullman, Ravi Sethi, Monica S. Lam, 原田 賢一 |本 | 通販 | Amazon https://www.amazon.co.jp/dp/478191229X
674 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 13:23:16.40 ID:G6xL0gpW.net] これは表紙買いしてしまう
675 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 17:00:11.86 ID:fBv9u5Bm.net] >>618 > そういう文法的になことには今は拘らない方がいい。 臭い物に蓋してんじゃねえ 無理に気になる必要はなくても 気になったのに誤魔化せって最低なアドバイスだ 学問そのものを全否定する暴論だ
676 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 17:42:03.71 ID:kgEYN356.net] そんなに気になるならコンパイラを読めば良い コンパイラを読まずにああだこうだと言ってそれを学問と言い張るのは今更ニーチェを読んで学問と言い張っているのと似ている
677 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 18:03:25.66 ID:bm6csMD2.net] ゲームブックの訳本かしら
678 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 18:07:52.25 ID:fBv9u5Bm.net] しどろもどろの典型だな
679 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 18:26:17.33 ID:ttVcJTrG.net] 組込み開発者におくるMISRA‐C:2004―C言語利用の高信頼化ガイド、MISRA‐C研究会、2006 この本は、日本の大企業から、C の専門家が数十人集まって作った。 この100ルールまで行かないと、教えられない 汎整数拡張・副作用完了点・短絡評価・bool とか、各概念が難しい。 とても初心者に教えられない 特に学生なんて、現実を知らないから、文法があっていれば正しいと思う、 固定概念があるから成長できない 現実には、MISRA-C、100ルールに従わないと話にならない。 学生にはそういう事はわからないから、アホみたいなコードを書く コードは、正しい文法で書いても、ダメだから。 可読性・保守性・バグを起こさない、Ruby みたいなコーディングが大切 だから、Rubyでプログラミング学ぶのが大切。 学ぶのは文法規則じゃない! システムを作る・保守するためのプログラミング!
680 名前:669 mailto:sage [2018/09/03(月) 18:34:29.69 ID:ttVcJTrG.net] Ruby の女神・女優の池澤あやかも、同じことを言ってる。 慶応大学卒だけど、大学で、C の授業は無意味だって 山陰地方のRuby合宿へ行って、webアプリが作れるようになった Cの開発時間の大半が、ポインタ・バグでつぶれるから、プログラミングを学べない。 文法がわかるだけで、ものを作れないから楽しくない だから、Cの授業の評判が悪い。 無意味な授業だよなって だから初心者は、Rubyから初めて、まず動くものを作る
681 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 18:58:25.85 ID:LFbByM25.net] 最初の質問者は計算機の仕組みを知りたいのであってWebアプリを作りたいわけでもMISRA Cルールを知りたいわけでもない件
682 名前:デフォルトの名無しさん [2018/09/03(月) 20:30:15.22 ID:E2St7m4+.net] 典型的な超頭悪そうなヤツラが ひたすら長文連投してる
683 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 20:31:53.98 ID:zLYH5Np3.net] >>670 またrubyガイジかよ。Cスレにまで出張ってくるななよ
684 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 20:35:14.84 ID:i7qE7EE1.net] >>672 そのまんまお前の事だ
685 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 21:07:08.36 ID:e7RcTinN.net] >>674 ???
686 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 21:32:03.32 ID:i7qE7EE1.net] 半角バカを知らないのか
687 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 23:39:43.07 ID:e7RcTinN.net] あいつか
688 名前:デフォルトの名無しさん mailto:sage [2018/09/04(火) 00:25:08.00 ID:Ilbb7rlr.net] とりあえずPCCでも読んでみることにします。
689 名前:デフォルトの名無しさん mailto:sage [2018/09/04(火) 00:45:19.60 ID:LzYZ2uc7.net] Cのスレに不毛な喧嘩売ってくるのは大体Cで挫折して、 劣等感を何とか慰めようとするカーミング行動だから気にするな
690 名前:デフォルトの名無しさん mailto:sage [2018/09/04(火) 00:47:45.68 ID:oF8LgJEj.net] >>669 的にはコンピュータのしくみはどうでもいいってこと?
691 名前:デフォルトの名無しさん mailto:sage [2018/09/04(火) 06:21:50.26 ID:4a01gUXa.net] >>663 にある本の紹介文なのか宣伝コピーなのか、 「70年代のTRPGの生の感触がばりばり伝わってくるAD&Dの本」て部分を どう解釈したら良いのか分からないのだ。 Cや「ドラゴン・ブック」、TRPG, AD&D って言葉くらいは知ってる者に 解題してくれないか。 ひどく野暮な質問かも知れないけど、聞くは一時の恥とか言うし、敢えて頼む。
692 名前:デフォルトの名無しさん mailto:sage [2018/09/04(火) 08:45:47.28 ID:HIB3dDVe.net] >むしろ計算機の仕組みなどを学びたいと思っています。 それなら情報処理の基礎なんかをやった方が良い様な気がする 今は基本情報処理とか言うんだっけか? 資格とかのやつよ
693 名前:デフォルトの名無しさん mailto:sage [2018/09/04(火) 14:29:38.61 ID:Ilbb7rlr.net] 向いてないっすか……。正直物理や数学は得意なほうなんですがね……。
694 名前:デフォルトの名無しさん mailto:sage [2018/09/04(火) 14:48:39.41 ID:0ItemGYT.net] >>683 高齢者はマウンティングする病にかかりがちなので気にすんなよ
695 名前:デフォルトの名無しさん [2018/09/04(火) 15:15:50.63 ID:FJBPHmlL.net] >>653 武内覚さんのLinuxの仕組み片手にCやるのがおすすめ ファイルIOとかなら、システムコール、VFS、FS、Raid、デバドラ、スケジューラー、SCSiまでユーザーランドからデバイスまで一貫して、かつお手軽に触れる
696 名前:デフォルトの名無しさん [2018/09/04(火) 16:39:04.23 ID:gZnu4stV.net] cの文法で書けるだけの 無能を自覚できてない低学歴知恵遅れの高齢底辺ITどかたに多い
697 名前:デフォルトの名無しさん [2018/09/04(火) 17:30:33.56 ID:DgdW8Zal.net] お。半角文字の入ってない書き込みを久しぶりに見たような気がする。
698 名前:デフォルトの名無しさん [2018/09/04(火) 17:53:50.88 ID:gZnu4stV.net] 底辺ITドカタさんたちは 今日みたいな台風の日も自宅待機ではなく 出勤でしたか 大変でしたね
699 名前:デフォルトの名無しさん mailto:sage [2018/09/04(火) 18:52:18.48 ID:Yl2cIsi8.net] 台風で東海道線や環状線が止まるのはまあ想定内だったが阪急や京阪まで止まるのは想定外だったわ
700 名前:デフォルトの名無しさん mailto:sage [2018/09/04(火) 20:17:15.30 ID:tpLBdVu4.net] >>683 数学が得意なら諦めるのはまだ早い
701 名前:デフォルトの名無しさん mailto:sage [2018/09/04(火) 20:22:39.67 ID:GSpvNdv5.net] やっぱワンチップマイコンでアセンブラがいいよ。 クリスマスに向けてLEDチカチカさせてジングルベルでも鳴らしてみるとかどうよ。
702 名前:デフォルトの名無しさん mailto:sage [2018/09/04(火) 20:27:34.18 ID:bz6n3SY3.net] ジングルベルはJasracフリーだな、心配ない
703 名前:デフォルトの名無しさん mailto:sage [2018/09/04(火) 21:12:38.21 ID:nrC4An0b.net] ロジアナがあればベストだが無ければせめてオシロは欲しいな
704 名前:デフォルトの名無しさん mailto:sage [2018/09/04(火) 21:54:25.98 ID:Uy+TuYSZ.net] >>683 向いていないね。それは臭いから分かる。お前は本当の「天然」ではない。 以下参考だが、結局中身は同じだ。 > 一撃必殺!急にマンガ家だの声優だの絵師だのになりたいと言い出した子どもや大人を止める、オススメの方法 > https://togetter.com/li/1130025 今はプログラミングなんて本当に簡単に始められる。そのレベルでグダグダ質問している時点で向いてない。 本当の「天然」なら、もう既にとりあえず何かしらのコードを書いてる。 お前は勉強しないと何も出来ないと考えている「いい子ちゃん」タイプだ。 そういう奴は自分でサイクルを回せず(=暴走出来ない)、上手くなれない。 無理してプログラマになっても、後輩に簡単に抜かれ、馬鹿にされる、悲惨な人生になるぞ。止めとけ。 (ここ見るだけでも老害を馬鹿にしたがっている奴はいくらでもいるのが分かるだろ) ベーマガ世代だって理解してやっていたわけではない。やりたくてやってただけだ。 先に数学をやった方が効率が良かったはずだが、そんな事は考えてもいない。 お前は、サッカーをやる前に、筋トレして体幹も作り上げ、万全の状態にしようとしている。 勿論そういうのもありだが、それはやはり「養殖」なんだよ。 「天然」はそうじゃない。サッカーをしながら、もっと上手くなりたいから筋トレして体幹も作っていく。 好きだから続けられるし、環境が多少酷くても我慢出来る。(これがIT産業がブラック化しやすい遠因にもなってる) そういう「天然」向け仕様の環境で、「養殖」では悲惨なことになる。 (勿論、プログラミングをやってみてから好きになる、というのもありだが、それはかなり少数派だと思う) 向いてる/向いてないで言えば、 ちょっとコードを書けるようになって調子に乗ってここで俺ツエーしている馬鹿共の方が向いてると言える。
705 名前:デフォルトの名無しさん mailto:sage [2018/09/04(火) 21:55:26.59 ID:Uy+TuYSZ.net] 今はプログラミングの裾野が広がって、絶対的な人数が全く足りてない。 だから文系をSEとして大量投入してみたものの、いい結果がでたとは言いがたい状況だ。 それで次は「小学生からプログラミングを教える」「国民全員がプログラミング出来るように」 みたいなアホなことをやろうとしているのだが、これは完全に愚策だ。 プログラミング出来ない/したこと無い奴らが仕切ってるからおかしなことになってる。 それにお前がつき合う必要はない。 教育改革ってのは取り返しが付かない人体実験になるから、性急にやっては駄目なんだ。 この認識すらなくゆとり教育を導入した文化省の連中は、 今からでも全員死刑に処すべきだと俺は思っている。 (それくらい罪深いし、社会に対して悪影響を及ぼしている。日本はミスリードに甘すぎだ) 今の「小学生からプログラミング」についてはどうやらお遊び程度だからまあいい。 やるにしても当初はこの程度で様子見しながら拡大するか取りやめるか試すべきなのさ。 (俺は意味無いから止めろと思っているが) 今時PCもスマホもない家なんて珍しいだろ。 なら初心者用のプログラミング環境はすぐに整えられるし、勝手に始められる。 だからそのレベルでこんな所に質問してる時点で間違ってる。 天然:何故プログラミングをするのか?そこにPCがあるからだ (単にいじくり回したいだけ) 幼稚園児:ケーキ屋さんになりたい!(だってケーキ大好きだしもっと食べたいから) お前には幼稚園児が「ケーキ屋さんになりたい!だってお金儲かるし!」 みたいな事を言っている違和感がある。 初心者の癖に計画しすぎだ。必要があって否応なしに始めるわけでも無し、意味不明すぎる。 そういう奴も中にはいるのかもしれないけどさ。 ただ、確実に言えるのは、プログラミング界隈は良くも悪くも全般的にギーク向けに出来上がってる。 お前がギークになりきれないのなら、ずっとアウェイのままだ。 それは幸せなことではないと思うよ。
706 名前:デフォルトの名無しさん mailto:sage [2018/09/04(火) 22:38:39.94 ID:l07xjkBV.net] おいら頭悪いから長い文章よめねんだ
707 名前:デフォルトの名無しさん mailto:sage [2018/09/04(火) 22:49:40.55 ID:CWUYudxX.net] 今北産業
708 名前:デフォルトの名無しさん mailto:sage [2018/09/04(火) 23:00:09.15 ID:8Afhx4Yo.net] >>696 周りに迷惑かけない分、頭の悪い長文書く奴より立派だから安心しよう
709 名前:デフォルトの名無しさん [2018/09/04(火) 23:14:17.99 ID:gZnu4stV.net] オレみたいに的確に要点をまとめてる長文なら読める 低学歴知恵遅れの長文は読めるシロモノじゃないからな 文章だけで低学歴知恵遅れかどうかは 簡単に判別できる このスレに連投されてる長文の駄文は 低学歴知恵遅れが記述したと推認することに疑いの余地がない
710 名前:デフォルトの名無しさん mailto:sage [2018/09/04(火) 23:17:12.74 ID:Yl2cIsi8.net] 必要なら数学の知識などなくても感覚で覚えるからな 座標計算の必要があれば三角関数など知らない小中学生でもsinやcosくらいは使う
711 名前: mailto:sage [2018/09/04(火) 23:26:47.20 ID:lJV/Mb/R.net] >>700 小中学生に三角関数は無理でしょう…まず相似の概念を習うのが中学2〜3年くらいなのでは?
712 名前:デフォルトの名無しさん mailto:sage [2018/09/04(火) 23:31:24.63 ID:dqoEXQdt.net] 数学は教科書で勉強しないとあかんよ 経験で得た知識なんてただの思いこみ
713 名前:デフォルトの名無しさん mailto:sage [2018/09/04(火) 23:46:19.73 ID:Yl2cIsi8.net] 思い込みでも何でも使っているうちに覚える 自分の場合は30年以上前中学生の頃に画像処理のプログラミングしている間に三角関数(といってもX座標はcos、Y座標はsinといった程度)や 論理演算(RGBの合成はOR、反転はXORなど)を覚えた その後になって高校の頃に教科書でまともに学んだ覚えがある
714 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 00:03:44.17 ID:ElSUubWJ.net] >>701 三角関数が何なのかは分からなくても、sin と cos を使うだけなら小学生でも定型文的に覚えちゃうんじゃね(おれは中学の頃だったが)。 円を描くところから始まり、直径を変化させると渦巻きにできたり位相や周期を変えて橢円やらリサージュになることに気付いたりで、 パラメータをやみくもに変えて手探りで欲しい結果にたどり着くようになる。 もちろん円的な動きの元ネタは必要で、ベーマガみたいなののコードをパクって出発だな。 小学生の頃はファミリーベーシックだったので三角関数には行き着かず、中学生でMSXになって三角関数に出会ったが、小学生の頃にMSXがあれば手を出してたと思う。
715 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 00:11:58.72 ID:ElSUubWJ.net] そういや小学生のころはスーパーマリオが出たころで、ファイアバーをどうしても再現したくてファミリーベーシックで頑張ってたわ。 三角関数に行きついてないから、角度の範囲毎の動きを個別に書いたな。 でも長さが伸び縮みしたり軌跡がカクカクで、結局将来の夢に据えてお仕舞いにしたw
716 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 00:29:02.76 ID:TND9Xsam.net] ニュー速で話題にしていた、CLA Fortran プログラムですが、 C言語への移植が終わりました。 公開方法について、検討しています。 ↓ここを使おう蚊と考えています。 https://ideone.com/ C言語へ書き換えたソースと、入力用データとパラメータの3つですが 入力用データとパラメータについては、サンプルに掲載したものと同一 なので公開は必要ないかも知れません。 ただし実行するには必要になります。どうしましょうか? テキストファイル形式で単独でアップロードするか、 ソースの一番下にコメントとして載せるかどの方法が良いでしょうか? あと、オリジナルFortranソースもアップロードした方が良いですか? これは以前PDFを見つけてくれた方がソースに起こして頂いたものです。
717 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 00:29:27.46 ID:TND9Xsam.net] 間違えました、済みません。
718 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 00:56:31.50 ID:8BhrS90z.net] >>694 >>695 よくわからんのだが、お前が相手をしてるそいつはなぜプログラミングを初めたいと思ってると思ってる? よくわからんのだが、ギークとかなんやらの最初とそいつの最初の具体的な差がよく分からん
719 名前:デフォルトの名無しさん [2018/09/05(水) 07:35:22.74 ID:p5l66rRv.net] C言語ポインタ完全制覇っていう書籍が気になってるんだけどこれはどの程度の知識がある人を対象にしてるの?
720 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 08:20:43.64 ID:2JdbfNpR.net] どの程度っても難しいなw 簡単なポインタは分かるけど、二重ポインタとか配列が絡むと混乱しちゃう程度の知識の人向け? 初心者なら悪い本じゃないから買っちゃえ。
721 名前:デフォルトの名無しさん [2018/09/05(水) 10:04:35.05 ID:TsbO/g0i.net] >>701 円を書く時に使えると聞いて確かに書けるので使っていて、後で高校生向けのやたらやさしく書いてある図と絵が満載の参考書を見てどういうことか詳細がわかった。俺が中2の時の話。 で、今思うに、これぐらいならちゃんと教えれば小学生でもわかるんじゃないか?俺としては単に教えてないからできないだけのような気がしてならないぞ。 しかし後々高校に入ってから数学の授業で「これ割るこれがsin」などと教師が言ってるのを見て、こんな説明だけでわかるやつはいないだろうとも思った。 ちゃんと教えられる人があまり居ない事もわからないやつを続出させる原因なのかもなと。
722 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 10:24:41.46 ID:mkiFi/5o.net] あの説明はひどいよな だから何?がずーっと消えない
723 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 10:29:11.29 ID:jTYdKpzW.net] sin,cos,tanそのものはアホな小学生でない限り余裕で理解できる。 ただ、それに付随した加法定理やらいろんな公式をセットにして教えたいし、それより先に教えることがたくさんあるので>>711 の言っている通り教えてないだけだと思う。
724 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 10:29:52.26 ID:TP9d0IJd.net] せんせい 「同じ授業を受けていい点数を取る生徒ももいるんだから、悪いのはIQの低い君達」 「分かる奴は塾に行ってる?じゃあ悪いのは君達の努力不足だ」
725 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 10:36:57.83 ID:2JdbfNpR.net] 論破やな・・・w
726 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 12:34:15.95 ID:TWmx8fnR.net] >>709-710 初心者には、この本もよい 詳説 Cポインタ、2013、オライリー・ジャパン
727 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 12:40:26.88 ID:BcgqOcGx.net] >>711 普通は円を書くのに三角関数を使わない 普通は
728 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 12:41:23.62 ID:vNhhiwgZ.net] 絵が円形に動くときは?
729 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 12:43:57.25 ID:BcgqOcGx.net] 絵が円形に動くとき は普通に円を書く時ではない
730 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 12:45:48.51 ID:vNhhiwgZ.net] え、 >>711 ってarcとか使わないで円を書くって言ってるの?
731 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 12:54:42.87 ID:usOBe9qe.net] アスペっすわ
732 名前:デフォルトの名無しさん [2018/09/05(水) 12:59:20.81 ID:TsbO/g0i.net] 三角関数の説明に三角形だけの図を描いてこれ割るこれとか言って済まそうってのは手抜きな感じがする。やはり円も描かねば。 ま、しかし、sin. cos 使って円が書けるのがわかったのは良いが、当時のマイコンは貧弱で浮動小数点演算なんかやらせてたら遅くて仕方がなかった。 しかしBASICでグラフィックに円を描かせると妙に速い。正数計算して描いてるからだが、どうするとそんなことができるのかを延々と探り続けてようやっとわかったのが高校生になってからだったかな。 今はもうほとんど覚えてないが二乗して足してってオーバーしたら引いてみたいな計算したと思った。
733 名前:デフォルトの名無しさん [2018/09/05(水) 13:00:45.01 ID:TsbO/g0i.net] >>717 >>720 まあ40年ぐらい昔の話だからね。
734 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 13:01:32.32 ID:9Ih296dz.net] >>722 で?
735 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 13:07:48.81 ID:D3bYtmsn.net] ポインタ限定でそんなに語ることがあるのか
736 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 13:15:30.75 ID:Lw38WY1e.net] >>722 それってブレゼンハムやミッチェナーのDDAアルゴリズムを利用した直線や円周の高速描画だろ 懐かしいな
737 名前:デフォルトの名無しさん [2018/09/05(水) 13:22:45.26 ID:TsbO/g0i.net] >>726 何て言うのかは知らなかった。何かのプログラム解析してわかったんだったかな。その辺は忘れた。 直線も足してってオーバーしたら引くみたいなやり方だよね。今ではハードウェアで組み込まれてるんだろうな。
738 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 13:24:01.11 ID:ElSUubWJ.net] >>725 ポインタが指す先が const の場合とかポインタそのものが const の場合とかさらに volatile が組合わさったりさらにそういうののポインタだったり配列だったり関数ポインタまで入り
739 名前:込んだりした場合に、 正確に型宣言したり読んだりするには結構修行が必要だからいろいろややこしいことが書いてあるんじゃないか [] [ここ壊れてます]
740 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 13:27:13.74 ID:TND9Xsam.net] >>722 >当時のマイコンは貧弱で浮動小数点演算なんかやらせてたら遅くて仕方がなかった。 この辺は工夫次第 8bitPCが全盛だった頃、動く3Dオブジェクトを表示するのに機械語で演算処理組んでいた 全部整数化し、SIN関数値は全部テーブルで持たせていたな 試して見れば分かるが実際に必要なテーブル範囲は90度もいらない
741 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 13:37:21.57 ID:7JsiFjUt.net] 敵の弾が自分めがけて飛んでくる ってたったそれだけでも中学の頃は大変だったな・・・ なつかしい
742 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 13:47:10.12 ID:ElSUubWJ.net] >>730 大変だった
743 名前: どんな式を立てたかは忘れたが、角度によって弾の速さが変わっちゃったりして試行錯誤してたな [] [ここ壊れてます]
744 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 13:51:42.60 ID:mkiFi/5o.net] 1フレームごとに最短距離で追尾してくる最も厄介なミサイルが実は一番簡単
745 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 14:58:15.54 ID:jTYdKpzW.net] もうすでにC言語なんか関係なく回顧厨になっとるな。 俺も乗っかろう。 昔はBASIC標準のライン描画やらペイントルーチンが遅いので、いかに高速なアルゴリズムを作るかパソコン雑誌の特集になってたりしたな。 超高速中間色対応ペイントルーチン!みたいな。 ある意味、良い時代だった。
746 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 16:27:30.41 ID:GAiajT5F.net] 中間色とか20年以上聞いてない
747 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 19:06:16.01 ID:83kKikU4.net] 中間管理色
748 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 20:11:02.62 ID:oFUMlVxX.net] タイルパターン
749 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 20:19:51.65 ID:dRudxIH1.net] ランダムディザ
750 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 20:20:14.55 ID:TND9Xsam.net] 液晶上にある発光体の色は3種類 マゼマゼする原理は同じ
751 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 21:50:01.40 ID:PklssQfn.net] >>734 CoolType/CelarTypeがそれに近いけどな
752 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 21:50:31.53 ID:YeNc+rPy.net] R成分100%にB成分100%をビット演算で重ねる、みたいな話か。
753 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 22:58:16.11 ID:Lw38WY1e.net] 重ねるというよりも隣接するドットを違う色で決まったパターンで表示することで 擬似的に色調表現するテクニック 基本的に8色しか使えなかった頃に多色表現するために開発された手法 複数ドットでひとつの点を表現するためにいかに自然に見せるかといかに高速化するかが プログラム的に腕の見せ所だった
754 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 23:26:42.92 ID:ElSUubWJ.net] cleartype はそういうのじゃなく、三原色の並びを利用して擬似的に横方向の解像度を上げる方法でしょ。 1画素内に三原色が RGB と並んでた場合、それを2画素並べると以下のように画素の分解能を超えた位置に白点を表示できる。 RGB___ 白黒 … 座標 0 に白点 _GBR__ シアン赤 … 座標 1/3 に白点 __BRG_ 青黄 … 座標 2/3 に白点 ___RGB 黒白 … 座標 1 に白点
755 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 23:39:34.25 ID:PklssQfn.net] >>742 知ってるぞ。 ClearTypeはsubpixel技術で、中間色はsubcolor技術だ。 まあ2)GrayScaleAAの方が近いといえばそうだが。 > 2) Grayscale anti-aliasing > https://en.wikipedia.org/wiki/ClearType
756 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 00:30:08.44 ID:RM3Caylz.net] 文字表示から離れればという気もするが
757 名前:740 mailto:sage [2018/09/06(木) 05:55:34.60 ID:UQb09hzL.net] すまん、投稿が受け入れられたタイミングがマズくて >>739 に対する反応みたいに並んでしもうた。 >>740 は >>739 の「マゼマゼする原理は同じ」に乗っかったネタ文だ。 R成分100%とB成分100%をマゼマゼして、HTMLの16進表記で#FF00FFの色を作ったら、 「そりゃ“マゼンタ”だよ、バカだねぇお前さんは」という想定(しかし破綻)。
758 名前:740 == 745 mailto:sage [2018/09/06(木) 06:16:09.23 ID:UQb09hzL.net] もちろん「マゼマゼ」は >>738 だよ、引用アンカーを間違えるとは。 マゼマゼでダメダメ。再び「バカだねぇお前さんは」
759 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 09:31:52.28 ID:/8o/0CpY.net] >>745 ん?俺は別に煽られたとは捉えてないし問題ないぞ。 そもそも話が通じないのは「抽象思考」が出来てないからだ。 三角関数で → 円も描ける、であって、(演繹) 円を描く為には → 三角関数、ではない。(暗記) とはいえ適用する場合は大体お約束的だし、 大学入試なんて解けるように作ってあるのだから、「暗記」タイプでも努力すれば数学の点も上げられる。 しかしそれでは駄目なんだよ。意味がない。 そして小学生に三角関数を教えても「暗記」にしかならないから、その時点で教えるのはやはり間違っている。 > これ割るこれがsin (>>711 ) これも、結局の所これ以外にどう表現しろと?という話だからね。 これが嫌だったのなら教育関係に就職して改革すべきだが、 実際ゆとり教育を先導した戦犯役人はこのタイプだった(はずな)ので救えない。 理解出来なかった奴が「俺が理解出来なかったから」という理由で主導するからおかしな事になる。 今現在の「プログラミング教育導入」もこれに近く、 そもそもプログラミングできない/やったこと無い奴らが主導してるから暴走してる。 三角関数なんて、円以外で適用される場合の方が多い。 それを過度に円に結びつけるのは数学としては間違っている。 単振動なんて、本来は円運動とは関係ないだろ。あれはma=kxの解がsinxだって話であって。 内積が|a||b|cosθになるのだって、円なんて全く関係ないし。 三角関数は、「偶々そういう関数を定義したら、何か知らんけど色々使える」であって、その見方だと > これ割るこれがsin になってしまう。これ以外に表現しようがない。 逆に、「宇宙の全ては円で出来ている」(なぜなら三角関数が適用出来る場合が多いから) という捉え方も出来なくはないが、こっちの方がカルトだろ。 おそらく、数学の発達過程で他にも色々関数が定義されて、でも使えない物は淘汰されて、 結果的に今の三角関数だけが残ったのだと思うぜ。
760 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 09:33:21.82 ID:/8o/0CpY.net] 中間色/CoolType./AAも、俺にとっては「隣接するピクセルを用いて中間値を表現すること」で同じだ。 お前らはそれを ・フォントの場合 ・色/ピクセルの場合 と別々に覚えてるから別物に見える。それはお前らの脳内が「暗記」ベースだからだよ。 暗記ベースでプログラミングの上達を目指すのは「デザインパターン」だ。 しかしこれも必要以上に細分化し、しかもJava文法が足りない点を必死で補っていたりで、 はっきり言ってポシャったろ。あれでは無理があるのさ。 勿論、「暗記」しかできない奴はいまだにそれにすがり続けているようだが。 ただ、実際の所、プログラミングは当然実装出来ると分かっている範囲で為されることが圧倒的に多いので、 「暗記」ベースの手法でもほぼ全ケースで何かしらの適用が出来、対応出来る。 だからそんなに問題にはならず、ある意味Javaプログラマが一定レベルまで順当に成長するのはこれがある。 ただ、「暗記」ベースだと、知らない事は発想出来ない。別物扱いだから。 中間色を「抽象思考」で捉えているのなら、 方向を変えて適用した結果がCoolTypeでありAAでしかなく、これらは自然に連結する。 この点がずいぶん違う。
761 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 09:34:16.38 ID:/8o/0CpY.net] この点に於いて、「暗記」ベースの奴は文法リッチな言語、JavaやC++の方がいい。 というかな、プログラミングが上達する奴と全く上達しない奴が居て、 別段人間的に問題がある(全く努力をしてない)訳ではないのが不思議だったのだが、 今のところの俺の結論はこれだ。 「暗記」ベースの奴はCやJavaScript等の文法がスカスカな言語では上達しにくい。(上達出来ない) 文法リッチな言語だと、「この文法はこのときに使う」というやり方で、 「プログラミングパターン」を「暗記」で積み上げることが出来る。 (これは本来「デザインパターン」と呼ばれるべき物だが、 この用語は継承をこねくり回したゴミの呼称となってしまっているので、敢えて別に命名する) だから、文法を一通り押さえれば、知識としてのプログラミングパターンを一定量積み上げることが出来、 結果、一定までは確実に上達するというわけだ。 Javaはこの手法で平均レベルのプログラマを大量確保出来ている。 ただし逆に、文法等の暗記事項に計上されてないと、彼等は上達出来ないので、過度に暗記にすがる。 これが今の「デザインパターン」の状態だ。必要以上に細分化し、また、無駄に増やし続けている。 彼等にとっては新規パターンの登録と暗記がすなわち上達であり、それ以外に方法がないからだ。 したがって、今後ともこの暴走は続く。 C++erで言えば、彼等は shared_ptr/unique_ptr/weak_ptr の使い方にはご執心だが、そこまでしか見えていない。 次に導入されようとしている observer_ptr については必要性も使い方も分かっておらず、理解も出来ない。 なぜなら、「暗記」出来るのはそれらが定義されて以降であり、 「暗記」では現在未定義の物を演繹的に作り出すことが出来ないからだ。 良くも悪くも、C++が文法リッチになる過程で、CerとC++erが自然発生的に分かれてきたのはこの辺だと思う。 Linusから見ると、C++の文法もデザインパターンと同様のゴミの山に見えているはず。 (JavaScriptなんて、たったあれだけの文法で、C++で表現出来る範囲を越えるのだから笑える)
762 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 09:35:06.90 ID:/8o/0CpY.net] Cの場合には文法がスカスカだから、 ポインタで → 何でも出来る、とならないと上達しにくい。(演繹) この場合は → shared_ptr、では無理だ。暴走出来ない。(暗記) だから「暗記」ベースな奴は文法リッチな言語を選んだ方がいい。 (ただしポインタがあまりに汎用性がありすぎて最適化等に問題があり、 結果、他言語では色々制限を付けられてきたのはご存じの通り) 逆に「たったこれだけの文法で全て表現出来るなんてステキ」と思える奴は CやJavaScript等の文法スカスカ言語の方が向いてる。 JavaScriptがゴミゴミ言われながらもここまで残っているのもこの点が大きい。 あれは使える奴が使ったら凄く使える言語だ。 ただ、今のJavaScriptプログラマの大半がゴミなのも事実だが。 Cの授業が全く無駄だ、という話も出所はここだ。 プログラミングなんて、結局、「代入、条件分岐、関数呼び出し、ループ」でしかなく、 ループですら代入と条件分岐で実装出来るのだから冗長だ。 一応チューリング完全であるbrainfuckは関数呼び出しすらないので、これも冗長とも言える。 そしてCの授業で行われるのはまさに「代入、条件分岐、関数呼び出し、ループ」だけであり、 これでどうやって初音ミクが歌って踊るのだ?と初心者には思えるだろう。 最終的にはGPUを介してVRAM上に代入(ラスタライズ)しているだけだとしても、 それが初心者に見えるはずもない。 (もっとも、今の3Dベースの2D《テクスチャとして貼ってるだけ》だと ラスタライズ結果をVRAMに戻しているかも怪しいが) ただ、MITがSICPを止めたのと同様、今時初心者がCをやる必要はない。 DrawLineで線が描ける、HTML出力したら絵が出る、で済む連中がCやるのが間違ってる。 逆に、デバイスドライバ等を書いたり、 計算機自体の専門家(HighPerformanceComputing)等を目指すならCは必修になる。
763 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 09:42:07.42 ID:MYy5/YOc.net] 量子化誤差の拡散!
764 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 09:50:36.43 ID:2H4On29+.net] コードもだらだら書いてるんだろうなぁ
765 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 10:01:03.49 ID:BRF//rri.net] メモリーリークについて質問です プログラム終了時に残ってしまったものに関してはOSが解放してくれるから対処しなくていいと聞きました 今までデバッグしてメモリーリークが出ると無くなるまで結構あれこれやってたんですが全部無駄だったんでしょうか
766 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 10:10:29.24 ID:2H4On29+.net] >>753 終了時には解放してもらえるけど、メモリリークしたままだと動き続けられないじゃん。 たまに再起動してもらうの?
767 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 10:21:17.68 ID:BRF//rri.net] あーいや想定してるのはちょっとした処理を行って出力して落ちるだけのプログラムなんです ループの中で何回もmallocしてメモリを食いつぶすとかそんなことも無くて、ただ終了時まで動的確保した変数が解放されてないみたいな そういう状況でお願いします
768 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 10:37:52.78 ID:2H4On29+.net] >>755 そういう限定的な条件では解放は省略するって方針もあるかもね。 終了パターンがいろいろあると解放するだけでも一苦労だったりするし。 ただせっかく作ったそのコードは制約が多く他には転用しづらかったりと資産としての価値は低いと思う。 そもそもデバッグでメモリリークを発見とか言ってるとなると、メモリの管理はしっかりしてて解放を省略していることも設計に入ってる、という状況ではないんじゃないの? それはメモリを管理できてないってことじゃないのかな。 そんな場当たり的なことやってると大きなコード書けないよ。 メモリリークを潰させるのは、メモリを解放すること自体が目的というよりメモリを管理させる教育的な目的じゃないかね。
769 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 11:35:05.98 ID:BRF//rri.net] いや教育というか、上司が作ったAPIを利用して機能作れって指示が出ててですね そのAPIが上で説明したように変数解放しないままプログラム終了してたって状況です んでこれいいんですかこうすれば治りますがみたいなこと言ったらいいんだ勝手に解放されるかと ともあれそういう方針が有りだということは分かりました。どうもです
770 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 11:39:51.63 ID:2H4On29+.net] 上司を教育してやりたいなw
771 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 11:42:26.02 ID:b42HI45e.net] ここに呼んできて
772 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 11:55:09.68 ID:MYy5/YOc.net] >>753 プロセス終了するなら、無駄です。
773 名前:デフォルトの名無しさん [2018/09/06(木) 12:07:29.83 ID:NrF/VtsZ.net] そのAPIを流用するのは難しいな。 しないつもりなのかも知れないが。 まあしかしできればメモリリークしない方が良いな。 そのままだと常駐するプログラムのループの中で使えないし。
774 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 12:44:35.90 ID:5MBNHP4w.net] >>757 上司の指示ならそのままにしとけばいい メモリーリークしてもプロセス終了で解放されるから問題なし って言う奴は一定数いて説得しても改心しないから放置しとくしかない 後々何かで事故った時のためにドキュメントに書いとけ
775 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 13:36:44.44 ID:N1zpzsdE.net] たいていドキュメントは失われるので俺ならソースコメントに書いておくな。 「2018/09/06 メモリ解放してないので注意(先輩の指示で改修見送り)」
776 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 14:37:14.38 ID:3QzfQDga.net] そりゃ、そういう状況では解放処理は抽象的な書き方にすべきなんですよ。 freeがなければ安心できないのって病気に近いよ。
777 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 19:28:33.32 ID:5MBNHP4w.net] どういう状況か知らんけど > こうすれば治りますがみたいなこと 言ってるにも関わらず対応しないのは宗教に近いよ
778 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 19:34:20.37 ID:hjZ1m3yx.net] >>755 mayersだったかdinkumの人だったか忘れたけど、これはリソースリークじゃないって力説してて、 自分も同じセリフを言ってみたくてmain関数で確保したものを開放せずにいたら、 あとからそのmainだった関数に再入しないといけない要件が増えて涙した。 (小物ツールだったのに…) というわけでfreeしようぜ
779 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 19:56:53.52 ID:/8o/0CpY.net] >>757 > ちょっとした処理を行って出力して落ちるだけのプログラム > 上司が作ったAPIを利用して機能作れって指示 × API ○ ツール 上司が作ったちょっとした「ツール」を使って(データの一部を切り出してきて)パイプ等で受ける場合、 そのツールがプロセス終了時に解放してないと文句を言うのは煙たがられる。 それは「意識高い系」すぎるし、そもそも君の担当範囲に何も悪影響はない。 そんなことはいいからお前の担当部分のバグを直せ、と思われているはず。 一応言っておくとfreeもタダではないので速度は落ちる。 必ずその後にプロセスが終了すると分かり切っているのなら放置もありだし、そっちの方が速い。 大方、精々1000行以下の上から下までつるっと動くだけのプログラムで、 最初に1回ワーク領域としてmallocして終わり、のパターンだろ。 割とどうでもいいね。実行形式のみでの配布なら問題になることはない。 (俺ならfreeしておくが。理由は>>766 と同じで、流用するときにバグるから) なお「API」では通常、別プロセスを起動して呼び出すことはない。(俺の知る限り) 本来「ツール」と表現すべき所を意図的に「API」と言うなら、相当な悪意だと受け取られる。 ただ単に間違ったのなら、お前は上司に対していちいち文句を言わず、 指示されたようにやるべきレベルだ。わきまえた方がいい。 ソースコードにコメント、は止めた方がいい。そこは上司への不満を書く場所ではない。 直すなら「潜在バグ」として正式登録、その必要がないと判断するなら放置したほうがいい。 数年後、君によって後輩が助かれば君は讃えられるだろうし、 そうでなければ君は痛かった奴だなと思われる、ただそれだけの話だ。 コメントだけ残して修正してませんでした、ってのはマジで痛いだけだから止めとけ。 誰も助からないし、生産性がない。 (バグを踏んだ後輩から見れば責任逃れせずにちゃんと直しておいてくれ、としか見えない) そもそもそのツールがバグってたのなら作った上司の責任だし、 上司がそれを面倒がるのなら、そのソースの管理責任を君が受け取って自由に出来るはず。
780 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 19:59:05.01 ID:xdo6cDUj.net] そんなに速度のことが気になるなら、グローバルでドカッと変数確保すりゃ良いだろう
781 名前: mailto:sage [2018/09/06(木) 20:06:34.02 ID:N2ZzCqNY.net] >>755 きちんと malloc() した領域を free() できているように、それを重点的に書き直していくだけでも、プログラムの構造がわかりやすくなり、バグも少なくなるとおもいます
782 名前: mailto:sage [2018/09/06(木) 20:08:11.19 ID:N2ZzCqNY.net] >>768 そうそう、malloc() したポインタを線形リストに登録しておいて、最後にまとめて free() するとか…
783 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 20:09:17.57 ID:L7E4s+iy.net] >>768 さすがにそれはセンスがないのでは ドカッと一発mallocならまだしも
784 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 20:12:16.01 ID:xdo6cDUj.net] ツールに使う程度の小規模なプログラムなら、 グローバルで取ろうと気にしなくて良いと思うけどな
785 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 20:16:36.65 ID:/8o/0CpY.net] >>768 さすがにプロセス起動/終了の方がfreeより100倍以上重いはずなので、 ここでfreeを速度の為にケチる、というのはナンセンス。 ただ、free一個分速いのは事実だし、Cは精神論的に速度を希求するからねえ。 多分、最初はグローバルで固定長バッファだったが、 もっと大きなサイズも必要になって、面倒だったからど頭でmallocに変更、だと思うよ。 割とありがちなパターンだし、この場合はfreeしない文化のような気もする。
786 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 20:32:13.62 ID:5MBNHP4w.net] 最近はあまりないけど実メモリーがカツカツの状態だとfree()する為にディスクからページを読み込む処理が大量に発生してなかなかアプリケーションが終了しないと言う事があったりする
787 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 20:36:44.52 ID:w4APQ8t2.net] exitって重いの? まあfreeするもんだと決め打ちはしたらあかんよ
788 名前:デフォルトの名無しさん [2018/09/06(木) 20:38:25.83 ID:64ZwjQvb.net] freeしてないコードを池沼が書いて freeしてないコードを 実績があるコードといって池沼が確かめもせずそのままコピペして流用する よくあること
789 名前:デフォルトの名無しさん [2018/09/06(木) 20:40:44.45 ID:64ZwjQvb.net] つまり池沼の代重ねで どんどんメモリリークが酷くなっていく
790 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 20:49:38.63 ID:u/2SwpDg.net] dtr は作るけど、コメントに「プロセス終了時にしか実行しないのでfreeしてない」と書いて放置してるわ
791 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 20:57:43.99 ID:/8o/0CpY.net] >>774 ああ、なるほど。 そういえばスワップがある時にFireFoxを落とすだけでもずいぶんかかっていたのを思い出した。 なるほどそこでスラッシングしてたのか。
792 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 21:05:57.78 ID:2H4On29+.net] >>779 うちの FireFox も終了時にモタモタしてるから、そうなるのが分かってる時はタスクマネージャーで殺したりするw つかアプリは終了時に保存するもの保存したらリソースそのままで exit しちゃう方がいい気がしてきたわ。
793 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 21:22:48.78 ID:lfEPMv1j.net] freeでスワップからページ読み込みするってマジ? freeだけならdirtyページドロップするだけだと思ってたわ
794 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 21:38:33.95 ID:iyjSCMca.net] freeがいちいちSVCなんかするわけねえだろ それと、おまえスワップとページを混同してるな
795 名前:デフォルトの名無しさん [2018/09/06(木) 21:42:11.21 ID:RfogV38/.net] >>781 ポインタ書き換えたりするから一度ディスクからメモリに戻さざるを得ないのでは? ものすごく大きい領域を一括で確保した場合は全部戻す必要ないけど細切れに沢山確保してあるのをバラバラにfreeしたらなりそうだよね。
796 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 21:46:37.65 ID:7YUMDOtR.net] >>781 free()すると管理領域を書き換えるためにページインが必要になる
797 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 21:52:07.32 ID:SMB/Y5b1.net] ランタイムの実装とOSにどう伝えてるかの間のことを考え出すと激しく禿る思考停止 unix/linux な人はどう実装してるか確認してるの?
798 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 21:54:14.48 ID:N6MGums/.net] >>782 そうなの? 例えばWindowsだとfreeは内部でHeapFreeをコールしてるのかと思ってた。 HeapFreeって恐らくSVC伴うよね?
799 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 23:11:21.70 ID:xdo6cDUj.net] 皆さん、実メモリってどの位積んでいるの?
800 名前: mailto:sage [2018/09/06(木) 23:42:12.50 ID:N2ZzCqNY.net] >>787 DDR3 16G です、もっとほしい…
801 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 23:43:10.77 ID:f49/P0Og.net] 8G しかしこのPCは5年以上前に買ったやつ。
802 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 23:53:41.06 ID:iNL3W5R4.net] >>781 単純に free だけの話じゃなく、自分が作り上げたオブジェクトツリーを辿りながら free していく過程でその(結局解放する)オブジェクトをページインすることになる。 C でオブジェクトとか言うことの是非は置いといて。
803 名前:デフォルトの名無しさん mailto:sage [2018/09/07(金) 00:04:11.13 ID:oKo9UKIA.net] >>787 Windows7 で 3GB。 Linux な家サーバだと 1GB。 Cプログラミングスタイルも細かくブロック分けてスタック節約するようなセコセコ型が基本。
804 名前:デフォルトの名無しさん mailto:sage [2018/09/07(金) 06:00:25.35 ID:Pk3Mmzkj.net] 個人で使うための大したことないツールだったか、 この件の実験用に作ったプログラムだったか忘れたけど…。 そこそこ沢山のデータを、ひとつ読み取ってはmallocで確保した領域に保存、 ハッシュテーブル(値が重複する要素はリンクド・リストでつなぐ)にブチ込んで 個々のデータはプログラム終了まで破棄しない、て条件。 終了前に真面目にfreeして回るのと、そのままexitしてOSに片付けてもらうのと、 比較してみたらfreeのループ処理が意外に重かったんで、 解放処理の関数を残したまま呼び出し部だけ注釈にして、 // 解放すべきだと思いつつも無駄に重いんでOSに上手いことやってもらう みたいな自分用のメモを残したわ。我ながらどっちつかずの折衷案。
805 名前:デフォルトの名無しさん mailto:sage [2018/09/07(金) 07:56:45.53 ID:ZG8Bsw3G.net] >787 Win7以降で最低4G、可能なら8G。3Dゲームやるなら16G以上。 XP時代は2Gか3Gだった。
806 名前:デフォルトの名無しさん mailto:sage [2018/09/07(金) 07:57:24.56 ID:1SEeRaQU.net] >>787 今使ってるマイコンのRAMは64バイト
807 名前:デフォルトの名無しさん mailto:sage [2018/09/07(金) 08:06:16.22 ID:1SEeRaQU.net] メモリを確保しっぱなしでわざわざ明示的に解放コードを書かないことはある C++じゃなくてCだと特に 組み込みだとそもそも終了処理なんて物が無かったりする
808 名前:デフォルトの名無しさん mailto:sage [2018/09/07(金) 08:35:25.77 ID:Ge6Y8svS.net] >>792 (俺はそういう状況に遭遇したことがないが、)やるなら、 freeを生かしたまま残し、その直前でexit、 exitに「// free が遅いからここで強制終了」とコメントかな。 そもそもCはやたらfreeするようには出来てない。それはK&Rのfree実装をみても明らかだ。 C++や他GC言語のようにインスタンスを個別にmalloc/freeした方が プログラミング的に美しく、自由度があるのも確かだが、 古来C流なら > 個々のデータはプログラム終了まで破棄しない、て条件。 が分かっている時点で纏めてmallocし、内部的に切り出して使う、とかじゃないかな? 大きなテキストを1発mallocで確保し、内部的に改行コードで区切って使うみたいに。 初期データはインミュータブル扱い、追加/変更はインスタンス毎個別に確保、だ。 ただこれだと結局コードは増えてしまうし、個別freeすべきかのフラグを導入するか、 解放関数でインミュータブル領域かどうかを判定する必要がある。 そういうのが面倒だと最初から全部C++流にインスタンス毎個別に確保になり、 その分動作が遅くなるが、コード自体は綺麗に(統一的に)保たれる。 結局、コードを取るか、手間かけてその分高速化するか、でしかない。 気にならない程度なら、俺はC++流の個別確保の方がコードが綺麗だからいいと思うが。 (つまり今の君の実装) 気になるのなら、選択の余地無く高速化するしかないし。
809 名前:デフォルトの名無しさん mailto:sage [2018/09/07(金) 08:38:20.43 ID:oKo9UKIA.net] >>795 むしろ C++ の方が気安く new するから、そっちの方が放置したくならないかね。 根っこのオブジェクトを delete すれば後のはデストラクタがやってくれるとかで面倒さは少ないのかもしれないが。 何にしても、許されるのはきちんと解放できるけどあえてしない、ってのだけだな。 なんだかよく分かんないし面倒からOSに尻拭いしてもらうなんてのはダメだ。 fork で起こした子プロセスがメモリを free せず終了しても問題無いが、それをスレッドにしましょうなんてなった瞬間に破綻する。
810 名前:デフォルトの名無しさん mailto:sage [2018/09/07(金) 09:28:39.55 ID:8HJNQC7B.net] 商業プログラムだとラッパだらけで直接free呼ばんし。 freeなしという選択肢は常に確保しとけばよい。
811 名前:デフォルトの名無しさん mailto:sage [2018/09/07(金) 11:25:43.88 ID:/+XJI6DP.net] >>786 え、WindowsにSystem z版てあるんだっけ?
812 名前:デフォルトの名無しさん mailto:sage [2018/09/07(金) 12:12:28.24 ID:veel+fh4.net] >>799 え?System z限定の話だったの?
813 名前:デフォルトの名無しさん mailto:sage [2018/09/07(金) 12:18:34.93 ID:/+XJI6DP.net] >>800 だってSVCって。。。
814 名前:デフォルトの名無しさん mailto:sage [2018/09/07(金) 12:28:11.67 ID:veel+fh4.net] >>801 スーパーバイザコールを拡大解釈して、いわゆる特権モードを伴うシステムコールとして書いてたわ。 誤解があったらすまん。
815 名前:デフォルトの名無しさん mailto:sage [2018/09/07(金) 12:36:08.16 ID:H0y7xQ1z.net] >>781 mmap経由ならOSによってはそうかもな
816 名前:デフォルトの名無しさん mailto:sage [2018/09/07(金) 12:51:04.62 ID:/+XJI6DP.net] >>802 おk じゃあ、その前提で話を戻そう freeはISO/IEC9899では宣言と引数の意味のみが規定され実装は未規定だ 782でああ言ったのは、freeする度毎にタイムスライスを放棄するような実装は まずなかろうということだ
817 名前:デフォルトの名無しさん mailto:sage [2018/09/07(金) 14:34:23.02 ID:lg5TGvmQ.net] >>804 まず、786で書いたようにあくまで「思ってた」だけで確固たる根拠はないことを前提に。 freeするならどこからか借りていたメモリ領域を返却するわけで、仮想メモリ返却にはMMUを使ったページ管理が必要だよね? 仮想メモリページ管理はメモリマネージャー的なカーネルモードドライバが必要なはずで、つまり解放時にはシステムコールを伴う。 ただ、HeapFree時に直接カーネルモードで解放が実行されずメモリマネージャがガーベジコレクション的に後々回収するなら、あなたの言うとおりfree時にユーザーモードで閉じて処理されるかも。 このへん、Linuxとかどういう実装になってるんだろうね?
818 名前:デフォルトの名無しさん mailto:sage [2018/09/07(金) 14:55:15.04 ID:Yr/2DouQ.net] 画期的なメモリ確保方式とか出来ないかな 例えばさ、名前付きタグを付けてメモリ確保し、 名前指定で一気に解放できるようにするとか
819 名前:デフォルトの名無しさん mailto:sage [2018/09/07(金) 15:22:58.08 ID:OFkeqRjw.net] Rust?
820 名前:デフォルトの名無しさん mailto:sage [2018/09/07(金) 15:56:06.95 ID:/+XJI6DP.net] >>805 freeがメモリを返却する相手が何者なのかは未規定だぞ いちいちOSへ直に返しているとおまえさんの言うとおりだが スタティックリンクライブラリがOSから大口で借りたメモリを切り売りする スタイルならシステムコールの回数をガクンと減らせる よくある実装は1MiBあたりを境に小容量は切り売りで大容量は直にという形
821 名前:デフォルトの名無しさん mailto:sage [2018/09/07(金) 16:07:14.96 ID:lg5TGvmQ.net] >>808 いや、俺はANSI Cとかの規定の話してるんじゃなくて、SVCって単語からこの議論がスタートしてるのでモダンなOS上の一般的な実装の話をしてると思ってたんだけど、違ったのか。 確かにアプリ起動時にある程度のヒープを最初から用意ってのはありそう。
822 名前:デフォルトの名無しさん mailto:sage [2018/09/07(金) 16:15:46.30 ID:lg5TGvmQ.net] >>806 ソフトで実現で良いなら、簡単に実現できそうね。 てかsmbか何かでそういう実装見たことあるような?
823 名前:デフォルトの名無しさん mailto:sage [2018/09/07(金) 17:07:55.49 ID:+cI6iexZ.net] >>805 Linux+glibcの環境なら、mallocは昔ながらのbrkシステムコールの方法と mmapシステムコールの方法が状況に応じて使われる freeしたときmmapをmunmapしてOSに返されることもある はず。…たしか
824 名前:デフォルトの名無しさん mailto:sage [2018/09/07(金) 18:11:36.24 ID:lg5TGvmQ.net] >>811 なるほど、勉強になります。 やっぱりOSのメモリ管理をちゃんと理解しようとしたら参考になるので最低限glibcとmmapを読まないといけないね。
825 名前:デフォルトの名無しさん mailto:sage [2018/09/07(金) 20:33:47.92 ID:lg5TGvmQ.net] ちらっとmmapとglibc斜め読み
826 名前:してみた。 こんな世界があるんだとソフトエンジニア7年目にして新しい視点が開眼しそう。 色々気付きをくれた方々、ありがとうございました。 [] [ここ壊れてます]
827 名前:デフォルトの名無しさん mailto:sage [2018/09/07(金) 23:08:07.85 ID:Ge6Y8svS.net] >>806 ゆとりりゅうのすごいめもりかくほ、まで読んだ。 マジレスすると、 > 名前付きタグ このコストが分からない馬鹿はCを学ぶ意味はあるだろう。 スクリプト言語しか使ったことのない奴に多いが。(例:ハッシュはタダだと思ってる) >>805 > 仮想メモリ返却にはMMUを使ったページ管理が必要だよね? お前は中途半端に勉強してるな。まあ悪いことではないが。 ページの単位は今も昔も4KBだ。その方法ではインスタンス毎の確保は出来ないと分かるだろ。 >>812-813 読むのは勝手だが、あまり関係ないところに深入りしても意味はないぞ。 7年目なら業務関連は一通り出来るようになっており、知識を横に広げているのかもしれないが、 OS関連の知識があってもな。 時間が有り余っていて手当たり次第に知識を吸収するのも一つの手だが、 もし大きい(10,000行以上)のを書いたことがないのなら、 まずは規模の限界(複雑さの限界)に挑戦する方がいいと思うが。
828 名前: mailto:sage [2018/09/07(金) 23:21:41.29 ID:WaHB6+zk.net] >>814 >もし大きい(10,000行以上)のを書いたことがないのなら、まずは規模の限界(複雑さの限界)に挑戦する方がいいと思うが。 そうですね… 1万行ですか… せいぜい 1000 行程度までしかやったことがありません、モチベーションが続かない・燃料切れ、という感じです
829 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 00:12:07.00 ID:kEO
] [ここ壊れてます]
830 名前:PIOXH.net mailto: 行数が多ければいいというものでもないと思うが・・・ [] [ここ壊れてます]
831 名前:デフォルトの名無しさん [2018/09/08(土) 00:16:36.09 ID:L3ZkEci+.net] だいぶ初歩の質問なんだけどextern宣言って本当に必須なの?コンパイラというかリンカによるのかもしれないけど、つけなくても同じ動作するよね? 今まで疑問に思わず書いてたけど、これを聞かれて色々試してみると実際つけなくても同様の動きしてるように見えるし、ちゃんと答えられなかったわ
832 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 00:16:57.63 ID:Bduckbke.net] >>816 ならお前なりの妥当な規模を測る単位でも示せよ
833 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 00:24:37.23 ID:cJyrgWby.net] >>816 否定ばかりして新しい提案をしない典型的無能要員
834 名前: mailto:sage [2018/09/08(土) 00:43:40.72 ID:t7GfMYxV.net] >>817 ライブラリ関数をコールするだけなら extern は要らない子です、でもライブラリが独自の変数を定義して公開しているのならば extern がないと困ります 例えば <stdio.h> の stdin, stdout, stderr
835 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 01:03:55.35 ID:Bduckbke.net] >>817 > 1. Declaration can be done any number of times but definition only once. > 2. “extern” keyword is used to extend the visibility of variables/functions(). > 3. Since functions are visible through out the program by default. The use of extern is not needed in function declaration/definition. Its use is redundant. > 4. When extern is used with a variable, it’s only declared not defined. > 5. As an exception, when an extern variable is declared with initialization, it is taken as definition of the variable as well. > https://www.geeksforgeeks.org/understanding-extern-keyword-in-c/ 下のコード例が見やすい。 これが規格と合致しているのかは知らん。
836 名前: mailto:sage [2018/09/08(土) 01:26:25.96 ID:t7GfMYxV.net] >>821 しかし C には仮定義 "tentative definition" があったりして混迷するのです ISO/IEC 9899:1999 6.9.2.2 the behavior is exactly as if the translation unit contains a file scope declaration of that identifier, with the composite type as of the end of the translation unit, with an initializer equal to 0. 私には、これはリンカの仕業であってコンパイラが自ら行動しているようには見えないのですが…
837 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 04:02:52.50 ID:5gcJr6RX.net] glibc は malloc だけで 5000行あるってね。 上級者スレに解説動画があったけど面白かったよ。
838 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 09:36:45.93 ID:gGqp1fFu.net] >>814 >ページの単位は今も昔も4KBだ。その方法ではインスタンス毎の確保は出来ないと分かるだろ。 ごめん、これがよく分かんない。 MMUのページ単位が4KBなのと、インスタンス毎の確保はできないってのがつながらない。 てかここで言うインスタンスって何?
839 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 09:55:06.11 ID:+lRq1NsW.net] >>824 インスタンス1つにいちいち4KBもアロケートするのかって話だろ
840 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 10:01:56.96 ID:gGqp1fFu.net] >>825 別に1回のmallocで必ずしも毎回4KBのベージを割り当てる必要ないのでは? mallocするのが小さいサイズなら確保済みの4KBの空いてるとこから割り当てれば良いし。 実際にはどういう実装になってるか知らんけど。
841 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 10:10:27.96 ID:3yA/EH7F.net] そもそも動的メモリ確保/解放と仮想メモリ管理は直接関係ない話 組み込みだとMMUなんて存在しない環境もある
842 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 10:12:51.74 ID:Bduckbke.net] >>826 それだとお前のレス > freeするならどこからか借りていたメモリ領域を返却するわけで、仮想メモリ返却にはMMUを使ったページ管理が必要だよね? > 仮想メモリページ管理はメモリマネージャー的なカーネルモードドライバが必要なはずで、つまり解放時にはシステムコールを伴う。 と矛盾するだろ。 お前は日本語が駄目なタイプか?
843 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 10:15:40.02 ID:gGqp1fFu.net] >>828 そういう意味では、厳密には「4KB以上のfree」と書くべきだったかな? ページサイズに言及したのは先の書き込みの後なので別に論理矛盾はないと思うけど。
844 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 10:25:31.57 ID:+lRq1NsW.net] >>826 うん、俺もそう思うし 実際の実装もそうなっているのが多い ただし4KBではなく1MiBとかだけど
845 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 10:29:17.43 ID:Bduckbke.net] >>829 ぷろぐらみんぐのまえににほんごをがんばれ
846 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 10:29:54.08 ID:gGqp1fFu.net] 業務に関係なく完全に知的好奇心からのmalloc実装の想像だったので、やっぱりglibc読んでみよう。 色々レスくれた人、ありがとう。
847 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 10:38:55.04 ID:LzkjeqyB.net] ファイルシステムの管理領域が大きくなりすぎて、 4KB以下のページサイズには出来ない 4MBで千個、4GBで百万個のページを管理しないといけないから、 管理領域だけでも、100MB以上になる だから、ページサイズをもっと大きい、2MBにすると、 2GBで千個、2TBで百万個のページを管理できるから、今のHDD の容量に対応できる
848 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 10:43:05.81 ID:+lRq1NsW.net] HDDだとシリンダ容量との親和性を考えないとね だけどSSDが普及してる今どきの事情だとどうなんだろう
849 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 10:55:59.74 ID:AeS6DVc8.net] >>833 > 4MBで千個、4GBで百万個のページを管理しないといけないから、 > 管理領域だけでも、100MB以上になる 管理領域ってどう計算してるの?
850 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 10:58:20.45 ID:cJyrgWby.net] 一領域当たり100byte
851 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 11:02:40.38 ID:AeS6DVc8.net] >>836 すまん、聞き方がアホだった その1領域が100Byteになる理由を聞きたかった
852 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 11:31:35.27 ID:Bduckbke.net] >>833 つHugePage
853 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 16:08:33.18 ID:u7HqPj1f.net] utf8procというUnicodeライブラリを使いたいのですが、C99に準拠してるかどうかって分かりますか? 「emulate C99 bool」というコメントがソースコードにあったのでおそらくC89あたりからサポートしていると思うんですが。 https://github.com/JuliaStrings/utf8proc
854 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 17:17:58.22 ID:AMMRWQYD.net] >>839 C99に準拠している そのコメントの少し前に 「MSVC prior to 2013 lacked stdbool.h and inttypes.h」ってコメントがあるからWindowsの古い環境のためにboolとかを定義しているだけだね
855 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 18:36:43.66 ID:LzkjeqyB.net] OSのすべての機能を学びたいなら、ムック本の Linuxエンジニア養成読本、第3版、2016 カーネル、起動処理、仮想記憶、 ファイルシステム、シェルスクリプトなど ファイルシステム・管理領域の仕組みなどを読んで
856 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 18:44:21.19 ID:+lRq1NsW.net] タネンバウム先生の本でしょ すごい弟子を育てた伝説の師匠
857 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 18:49:46.85 ID:kiLcyFGE.net] なにそれ、すごい面白そう! アラサーだけどまだまだ青二才だしとっても勉強になります!
858 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 19:31:07.27 ID:AeS6DVc8.net] >>841 >>837 にレス頼む
859 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 05:27:49.39 ID:pVz5FNGY.net] >>840 ありがとうございます! これでUnicodeが古い環境で心置きなく使えますわ。
860 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 14:54:16.40 ID:/XE3HNn6.net] ここのスレの人はValgrindは 使っているんだろうか。 メモリリークとか考えれば ぜひ使うべきツールだと思う。 https://qiita.com/tjun/items/e9d2f7da3c94eb0240d8
861 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 15:31:42.46 ID:pIlBTOwT.net] 便利だよね ただ役に立ってるときはクソコードを触ってるときでもあると思う
862 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 15:44:39.72 ID:DwszjCT1.net] 変数中の "1" のビット数を数える効率的方法ありますか? aが32ビットとして for (i = 0; i < 32; i++) { j = j + a & 1; a = a >> 1; } みたいに1ビットずつカウントするしかないでしょうか あるいは、8bitとかで区切ってテーブルを引いて加算とかでしょうか(16ビットや32ビットのテーブルは現実的でないので)
863 名前:デフォルトの名無しさん [2018/09/09(日) 15:50:52.78 ID:V1LakR3i.net] a=(a&0a55555555)+(a>>1 &0a55555555); a=(a&0a33333333)+(a>>2 &0a33333333); a=(a&0a0F0F0F0F)+(a>>4 &0a0F0F0F0F); a=(a&0a00FF00FF)+(a>>8 &0a00FF00FF); a=(a&0a0000FFFF)+(a>>16 &0a0000FFFF);
864 名前:デフォルトの名無しさん [2018/09/09(日) 15:53:41.89 ID:V1LakR3i.net] a = (a & 0x55555555) + (a >> 1 & 0x55555555); a = (a & 0x33333333) + (a >> 2 & 0x33333333); a = (a & 0x0F0F0F0F) + (a >> 4 & 0x0F0F0F0F); a = (a & 0x00FF00FF) + (a >> 8 & 0x00FF00FF); a = (a & 0x0000FFFF) + (a >> 16 & 0x0000FFFF);
865 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 16:07:17.49 ID:TAQT5wBe.net] 32ビットだしその書き方良くないと思います
866 名前:デフォルトの名無しさん [2018/09/09(日) 16:54:40.77 ID:V1LakR3i.net] https://ideone.com/FGqs1S なにも問題ない レスをコピペで普通に動く アホがいちいち車輪の再発明するよりとりあえず↓コレ使っとけば間違いない gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html Built-in Function: int __builtin_popcount (unsigned int x) Returns the number of 1-bits in x. Built-in Function: int __builtin_popcountl (unsigned long) Similar to __builtin_popcount, except the argument type is unsigned long. Built-in Function: int __builtin_parityll (unsigned long long) Similar to __builtin_parity, except the argument type is unsigned long long.
867 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 17:39:09.00 ID:/XE3HNn6.net] >>847 自作ツールで無茶苦茶 役に立ってしまった。 そうか、クソコードだったかw それはさておき今回の発端>>757 は、 メモリリークなんか気にしはじめたら 修正コストがどれくらいかかるか わからない、それだったら現状で 問題は表面化してないし、 そのままでいいじゃん、みたいな 状況だと思う。 Vargrindを導入して 手軽にメモリリークを チェックできれるようになれば、 上司にもとりあえず直しましょう という説得ができる チャンスもあるかも。
868 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 17:57:06.08 ID:2r/FT+Vi.net] >>850 うまいやり方だなぁ
869 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 17:57:22.00 ID:lGJ+2GvF.net] >>850 この式は初めて見ると訳の分からない呪文みたいだけど、 落ち着いて考えると分割統治の技法を並列処理してるんだよね。 これで1の立ってるビットの数が分かる理由を考えるのは良い教材かと。
870 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 18:06:01.01 ID:2r/FT+Vi.net] >>850 少なくとも最後の行だけは a = (a + (a >> 16)) & 0x0000FFFF; の方がよさそう。 正確には最大 32 にしかならないから & 0x0000001F でもよさそうだし、値の上限を考えながらだと途中の行ももう少し演算を減らせたりするかも?
871 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 18:06:59.52 ID:2r/FT+Vi.net] >>856 0x0000003F だったw
872 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 20:35:00.38 ID:2r/FT+Vi.net] >>850 a = (a & 0x55555555) + (a >> 1 & 0x55555555); a = (a & 0x33333333) + (a >> 2 & 0x33333333); a = (a + (a >> 4)) & 0x0F0F0F0F0F; a += a >> 8; a = (a + (a >> 16)) & 0x3F; でも同じ結果が得られた。 最適化無しだと 9% くらい速くなった。
873 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 20:36:22.47 ID:2r/FT+Vi.net] >>858 0F 多すぎw 0x0F0F0F0F ね
874 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 21:00:45.14 ID:4c2hO8gX.net] しね
875 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 21:13:17.93 ID:2r/FT+Vi.net] a = (a & 0x55555555) + (a >> 1 & 0x55555555); a = (a & 0x33333333) + (a >> 2 & 0x33333333); a = (a + (a >> 4)) & 0x0F0F0F0F; a = (a * 0x101 * 0x10001) >> 24; にしたら >>850 より 24% 速くなった(pentiumM linux)。 でも gcc の速度最適化を入れるとどれも変わらないね。
876 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 21:19:41.88 ID:4c2hO8gX.net] なに1人ではしゃいでんのこいつ。
877 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 21:28:41.02 ID:Vmegj8Hy.net] CPUにそういう命令なかったっけ? 使うところでは割と使いそうだけど
878 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 21:45:09.16 ID:5vkdTLeD.net] >>863 AlphaとかM16Cとか古いCPUにはあった気がする。 最近はあんまり見ないね。
879 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 21:54:33.81 ID:nMOWxsiw.net] ああ、SSEにpopcntがあるね
880 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 22:32:42.62 ID:hCV1tk8e.net] ポックント
881 名前:デフォルトの名無しさん [2018/09/10(月) 02:37:34.95 ID:hUyLWeb6.net] ビットを数える・探すアルゴリズム www.nminoru.jp/~nminoru/programming/bitcount.html
882 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 10:36:25.17 ID:o5mvkory.net] ビット数の数えあげが欲しくなるのってパリティチェックで末尾付加したりするとき?
883 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 10:44:53.73 ID:cl7nWcjG.net] ソケットみたいにフラグをビット管理してるときとかもほしくなるかな
884 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 10:56:31.39 ID:ddUFIgl6.net] 符号とか暗号とかの世界ではしょっちゅう使うよ。 1の数で最適なアルゴリズムが変わるってケースもあるし、 暗号にサイドチャネル攻撃仕掛けるにはハミング距離とか重要。
885 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 11:27:01.59 ID:o5mvkory.net] >>870 はなんとなく理解できるけど >>869 のほうは想像がつかないな ビット管理されたフラグと ONしてるビット数による分岐や演算法が変わるのが直結しない感じ
886 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 11:51:19.73 ID:kNISuHie.net] フラグは数えねえよな 性能重視でもなければビットフィールド使って読みやすくして欲しいわ
887 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 11:54:23.84 ID:iqhXZjjt.net] バラで書くから読みにくいのであって 関数にしておけば外から見た仕様は変わらない
888 名前:デフォルトの名無しさん [2018/09/10(月) 12:16:32.03 ID:/R6yufrK.net] 普通の通信でエラー検出以外の目的でビット数を数える必要性がわからない。 そんな特定のCPU以外は必ず無駄な計算が必要になる方式をなぜ使う?
889 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 12:46:33.22 ID:x2RTnFiS.net] >>874 エラー検出、訂正目的以外の通信のためにビットの数え上げするって誰かレスしてたっけ?
890 名前:デフォルトの名無しさん [2018/09/10(月) 15:09:59.53 ID:rXvKnWV4.net] >>875 >>869 はそうではないのか?ならば居ないな。
891 名前:デフォルトの名無しさん [2018/09/10(月) 19:25:38.98 ID:YAHzQjjo.net] >>821 んーこの文章読むと、よく教科書的な本に書かれてる関数に対してexternを書きましょうってのは冗長で不要って話なのね。確かに実際の動きとは合うし勉強になりました。 >>822 書いてる意図を汲めてるのか自信ないけど、他のサイトにもリンカ依存とあって、この話が全ての環境に対して正しい話なのか・・・若干不安はある感じ?
892 名前:デフォルトの名無しさん [2018/09/10(月) 19:32:05.94 ID:WVFJrP31.net] Common Lisp にビットを数える関数があるけどcでも同様のものがあったようなゔ
893 名前:デフォルトの名無しさん [2018/09/10(月) 20:00:47.59 ID:pZnz0RBT.net] int a=0; printf("%p" ,a); printf("%p",&a); 同じアドレスが表示されると思っていたのですが、上下で違う数字が出力されました。 アドレスを表示するのはどちらが正しいのでしょうか? よろしくお願いします。
894 名前:さまよえる蟻人間 mailto:sage [2018/09/10(月) 20:06:35.73 ID:NJC2soWX.net] 下。
895 名前:デフォルトの名無しさん [2018/09/10(月) 20:07:47.31 ID:WGo2tHWR.net] >>879 &a の方。 ていうか同じになるわけがない。片方は printf() に a の内容である 0 を渡しているんだから。
896 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 20:26:02.04 ID:6MAzJtEj.net] %p は ポインタを要求しているが ポインタのサイズと intのサイズが違ってたら 鼻から悪魔
897 名前:デフォルトの名無しさん [2018/09/10(月) 20:28:01.62 ID:pZnz0RBT.net] >>880 >>881 >>882 指定子Pで&が付いてない方も変換されると思っていました。 ただの数値が表示されるだけなんですね。 int *a; int b=0; a=&b; printf("%p",a); この場合は&が付いてなくてもアドレスを渡してるのでokなんですね。 ありがとうございました。
898 名前:デフォルトの名無しさん [2018/09/10(月) 20:29:18.90 ID:WGo2tHWR.net] 天文学的な値が出るかも知れんね
899 名前:デフォルトの名無しさん [2018/09/10(月) 20:30:01.84 ID:WGo2tHWR.net] >>883 そうそう。そういうこと。
900 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 20:43:33.30 ID:l5sdNefZ.net] >>869 それはどっちかって言うとビットサーチだね 68020 とかの BFFFO 命令とか
901 名前:デフォルトの名無しさん [2018/09/10(月) 21:01:01.97 ID:XzQQxj6r.net] https://ideone.com/bsjclG また、低学歴知恵遅れのクルクルパーがウソ書いてるわ。。。 64bitのアドレス空間を持ってて、intのサイズが32bitならちゃんと動くワケがないからな
902 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 21:07:42.09 ID:XxqHEWUO.net] >>887 どの書き込みに対してのレス?
903 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 21:11:41.72 ID:7zqNUn7X.net] >>887 これまたチンケな知識でマウント取りに来たな w
904 名前:デフォルトの名無しさん [2018/09/10(月) 21:12:59.71 ID:XzQQxj6r.net] ID:WGo2tHWR ← コイツにきまってんだろ なあにが そうそう。そういうこと。 だ なにも知らないムクなヤツ相手に 低学歴知恵遅れの分際でテキトーなことばっかり書き込んでる
905 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 21:16:56.02 ID:XxqHEWUO.net] ん?これのこと? > printf() に a の内容である 0 を渡している
906 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 21:19:04.26 ID:6SoA/END.net] こんなにでかい釣り針だと 鯨が釣れるかも
907 名前:デフォルトの名無しさん [2018/09/10(月) 21:19:36.92 ID:XzQQxj6r.net] >>883 ← ムクな初心者 >>885 ← 低学歴知恵遅れ ID:WGo2tHWR 「そうそう。そういうこと。」 ← コレのコトだ 低学歴知恵遅れはレスもおえないの?
908 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 21:21:51.21 ID:XxqHEWUO.net] あれ? int *a; int b=0; a=&b; printf("%p",a); って別に正しくね?
909 名前:デフォルトの名無しさん [2018/09/10(月) 21:22:53.59 ID:XzQQxj6r.net] https://ideone.com/bsjclG この処理結果みても分からないなら オツムに相当な問題がある
910 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 21:25:52.44 ID:XxqHEWUO.net] ううむ、俺にはaは64ビット環境だと64ビット長に見えるのだが違うのか?
911 名前:デフォルトの名無しさん [2018/09/10(月) 21:27:36.20 ID:XzQQxj6r.net] で、処理結果みた? で、処理結果みた? で、処理結果みた?
912 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 21:29:43.88 ID:XxqHEWUO.net] おたくのサンプルは64ビットアドレスをintにキャストしちゃてるやん。そりゃ実行結果違うわ。
913 名前:デフォルトの名無しさん [2018/09/10(月) 21:31:35.87 ID:XzQQxj6r.net] https://ideone.com/PGwK6j キャストはずしたったぞ 当然、結果はかわらない やっぱりなこの板は低学歴知恵遅れしかいない この程度のこともわからずにいきってレスしてるワケだからな
914 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 21:31:51.59 ID:6MAzJtEj.net] たまたま 足りない分 0 を引っ張ってきてるけど(レジスタで渡ったから?) スタックに積んでるリターンアドレスの一部から足りないのを補ってると、もっとわけわかな数値に 未定儀の挙動を推測すすのもまたオツなもの か
915 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 21:32:51.
] [ここ壊れてます]
916 名前:39 ID:XxqHEWUO.net mailto: いやいや、883のaはポインタなんだってw なんでintに入れちゃうのw [] [ここ壊れてます]
917 名前:デフォルトの名無しさん [2018/09/10(月) 21:33:36.29 ID:XzQQxj6r.net] そんなことオレのしったことじゃないからな >>883 ← ムクな初心者 >>885 ← 低学歴知恵遅れ ID:WGo2tHWR 「そうそう。そういうこと。」 ← コレのコトだ 低学歴知恵遅れはレスもおえないの?
918 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 21:40:38.56 ID:lZ/O7dtJ.net] 半角クンていつも周りを見ずに自分の思い込みだけでレスしちゃって誤り訂正できないから、恥ずかしい(*/□\*) 直進しかできない目隠しされたイノシシみたい
919 名前:デフォルトの名無しさん [2018/09/10(月) 21:42:09.42 ID:XzQQxj6r.net] なにが間違いなわけ 指摘してみ 一切間違ったこと書いてないからな 低学歴知恵遅れはそもそも認知能力に問題がある
920 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 21:47:36.63 ID:XxqHEWUO.net] なぜ64ビットポインタをintに入れたの? 883ではそんなこと一切してないんだけど。 逆に >printf() に a の内容である 0 を渡している は整数リテラルがintなのに%pで受けてるので、64ビット環境なら4バイト分スタックのゴミを拾ってきそうだけど。
921 名前:デフォルトの名無しさん [2018/09/10(月) 21:48:46.40 ID:XzQQxj6r.net] はずかしくなって こっち側にこようとしても もう手遅れだからな
922 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 21:50:57.43 ID:XxqHEWUO.net] なんだ、結局はaがポインタだってことを見逃しただけかよw
923 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 21:55:18.07 ID:cYYSBBs1.net] >>906 つ鏡
924 名前:デフォルトの名無しさん [2018/09/11(火) 00:11:24.08 ID:X6CualfE.net] >>887 >>883 はちゃんと動くよ。
925 名前:デフォルトの名無しさん mailto:sage [2018/09/11(火) 06:35:01.60 ID:pvBPsgEg.net] >>909 半角野郎が数行のプログラムも理解できないくせに自分で改竄したコードが動かねぇって騒いでただけ。 半角野郎こそ低学歴知恵遅れクルクルパーで認知能力とオツムに相当な問題があるってことが証明されただけなので気にするな。 本人は顔真っ赤にして逃げたみたいだけど。
926 名前:デフォルトの名無しさん mailto:sage [2018/09/11(火) 07:57:47.34 ID:2zsIBj+S.net] ポインタを受け取るべき%p変換指定子に、ポインタでない値を与えることの 危険性は >>882 ですでに指摘されてるのに、後乗りで書いた >>887 で こんだけ引っ張れるのは、ある意味で才能かもな。 汚い言葉遣いを我慢しながら拝聴するほど啓蒙的な内容でもないし。
927 名前:デフォルトの名無しさん mailto:sage [2018/09/11(火) 08:11:06.15 ID:NBDkJ3+C.net] >>911 半角クンのレスは、5%の真実と15%の間違い・思い込みと80%の繰り言・罵詈雑言でできてるからね。まっとうに読む価値はない。
928 名前:デフォルトの名無しさん mailto:sage [2018/09/11(火) 09:54:24.68 ID:oX9GyHv1.net] まれにいいこと言う 850とか
929 名前:デフォルトの名無しさん mailto:sage [2018/09/11(火) 10:00:02.68 ID:R1B4IsqD.net] 釣り針が大きすぎて、クジラじゃないと釣れない
930 名前:デフォルトの名無しさん mailto:sage [2018/09/11(火) 11:44:57.89 ID:zLtJmO+E.net] musl-libcのiconvコマンドの本体ってここを見ればいいよね? https://git.musl-libc.org/cgit/musl/tree/src/locale/iconv.c
931 名前:デフォルトの名無しさん [2018/09/11(火) 20:05:08.62 ID:YMBQMGAL.net] 処理系って何? cpuかコンパイラの事かなと思ってるんだけど。 間違ってる?
932 名前:デフォルトの名無しさん mailto:sage [2018/09/11(火) 20:29:34.46 ID:5X7KAgIC.net] 処理系は、翻訳環境と、実行環境に大別される 翻訳環境とはコンパイラ等開発ツールを実行する環境 実行環境とはコンパイル結果のバイナリが稼働する環境、客先と言ってもよい
933 名前:デフォルトの名無しさん [2018/09/11(火) 20:36:50.64 ID:YMBQMGAL.net] >>917 バイナリが稼働する環境はcpuってことかな どうもお世話になりました
934 名前:デフォルトの名無しさん mailto:sage [2018/09/11(火) 20:45:37.73 ID:5X7KAgIC.net] cpuだけじゃないメモリが実装されているアドレス i/oが実装されているアドレス osの挙動 など様々な要因が絡む
935 名前:デフォルトの名無しさん mailto:sage [2018/09/11(火) 21:01:49.97 ID:LZbcaZ/B.net] CPUが同じであっても、 Windowsでは動かせてもmacOSでは動かないとか 同じWindowsでも、64bit環境では動いても32bit環境だと動かないとか
936 名前:デフォルトの名無しさん mailto:sage [2018/09/11(火) 21:12:52.13 ID:ShO/owiX.net] 半角くん、いたの? lynx で見てるから何言ってるかわからない。
937 名前:デフォルトの名無しさん mailto:sage [2018/09/11(火) 21:17:38.28 ID:pVzZZpUQ.net] ゴミPC早く捨てろ
938 名前:デフォルトの名無しさん mailto:sage [2018/09/11(火) 21:28:47.48 ID:zLtJmO+E.net] 処理系ってC99に関してはJISで定義されてたよね。
939 名前:デフォルトの名無しさん mailto:sage [2018/09/13(木) 21:21:47.72 ID:1sKEH3Wo.net] 昔の教科書には C言語の原稿 ↓プリプロセッサ マクロ・ヘッダファイルが展開された原稿 ↓翻訳機 アセンブリ言語の原稿 ↓アセンブラ 機械語 ↓リンカ 実行可能ファイル っていう図がよく描かれてて,今でもWebを検索するとよく見掛けるんだけど,ほんとに今現在のコンパイラってこういうことやってんの? gccやclangって,もはやC言語の原稿からほぼほぼ直接に実行可能ファイルを生成してるんじゃない? さすがにプリプロセッサくらいはあるかもしれんが。
940 名前:デフォルトの名無しさん mailto:sage [2018/09/13(木) 21:32:27.37 ID:CY4XgXEU.net] -vつけて起動してみ。 プリプロcppはcc1に統合された。 gccだと、cc1とかasとかcollect2とかが動いてるはず。 clangはデフォルトだとasなしかも。
941 名前:デフォルトの名無しさん mailto:sage [2018/09/13(木) 21:54:33.53 ID:1sKEH3Wo.net] >>925 あざす やっぱり減ってはいるんだな。 結構ああいう図を見掛けるんで,なんか(ほんとにこんな段階踏んでんのか?)ってモヤモヤしてた。 素人考えだが,あんな風に幾つも重ねてビルドしてたら最適化しにくい気がするし。
942 名前:デフォルトの名無しさん mailto:sage [2018/09/13(木) 22:33:23.35 ID:brIJUf4C.net] 処理としてはわかれてるよそりゃ
943 名前:デフォルトの名無しさん mailto:sage [2018/09/13(木) 23:18:13.03 ID:1sKEH3Wo.net] え そうなん と思って空のファイルをgcc -vで処理したら たしかにある程度進んでリンカの段階で エラーになったわ。
944 名前:デフォルトの名無しさん [2018/09/13(木) 23:28:49.69 ID:yqnwLH2V.net] bash-4.3$ gcc -v -o aho aho.c ←開始 /usr/lib/gcc/i586-slackware-linux/5.3.0/specs から spec を読み込んでいます COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/libexec/gcc/i586-slackware-linux/5.3.0/lto-wrapper ターゲット: i586-slackware-linux configure 設定: ../gcc-5.3.0/configure --prefix=/usr --libdir=/usr/lib --mandir =/usr/man --infodir=/usr/info --enable-shared --enable-bootstrap --enable-langu ages=ada,c,c++,fortran,go,java,lto,objc --enable-threads=posix --enable-checkin g=release --enable-objc-gc --with-system-zlib --with-python-dir=/lib/python2.7/ site-packages --enable-libstdcxx-dual-abi --with-default-libstdcxx-abi=gcc4-com patible --disable-libunwind-exceptions --enable-__cxa_atexit --enable-libssp -- enable-lto --disable-install-libiberty --with-gnu-ld --verbose --enable-java-ho me --with-java-home=/usr/lib/jvm/jre --with-jvm-root-dir=/usr/lib/jvm --with-jv m-jar-dir=/usr/lib/jvm/jvm-exports --with-arch-directory=i386 --with-antlr-jar= /root/slackware-current/source/d/gcc/antlr-runtime-3.4.jar --enable-java-awt=gt k --disable-gtktest --with-arch=i586 --target=i586-slackware-linux --build=i586 -slackware-linux --host=i586-slackware-linux スレッドモデル: posix gcc バージョン 5.3.0 (GCC) (-続く-)
945 名前:デフォルトの名無しさん [2018/09/13(木) 23:29:23.47 ID:yqnwLH2V.net] (-続き-) COLLECT_GCC_OPTIONS='-v' '-o' 'aho' '-mtune=pentium' '-march=i586' /usr/libexec/gcc/i586-slackware-linux/5.3.0/cc1 -quiet -v aho.c -quiet -dumpba se aho.c -mtune=pentium -march=i586 -auxbase aho -version -o /tmp/ccVi37md.s ← @プリプロセス GNU C11 (GCC) version 5.3.0 (i586-slackware-linux) compiled by GNU C version 5.3.0, GMP version 6.1.0, MPFR version 3.1.4, MPC version 1.0.3 warning: GMP header version 6.1.0 differs from library version 6.1.2. GGC heuristics: --param ggc-min-expand=63 --param ggc-min-heapsize=62246 存在しないディレクトリ "/usr/lib/gcc/i586-slackware-linux/5.3.0/../../../../i58 6-slackware-linux/include" を無視します #include "..." の探索はここから始まります: #include <...> の探索はここから始まります: /usr/lib/gcc/i586-slackware-linux/5.3.0/include /usr/local/include /usr/lib/gcc/i586-slackware-linux/5.3.0/include-fixed /usr/include 探索リストの終わりです。 (-続く-)
946 名前:デフォルトの名無しさん [2018/09/13(木) 23:30:05.16 ID:yqnwLH2V.net] (-続き-) GNU C11 (GCC) version 5.3.0 (i586-slackware-linux) ← Aコンパイル compiled by GNU C version 5.3.0, GMP version 6.1.0, MPFR version 3.1.4, MPC version 1.0.3 MPC version 1.0.3 warning: GMP header version 6.1.0 differs from library version 6.1.2. GGC heuristics: --param ggc-min-expand=63 --param ggc-min-heapsize=62246 Compiler executable checksum: c5a3ffed702d1cd048214b2b66d4a98a (-続く-)
947 名前:デフォルトの名無しさん [2018/09/13(木) 23:30:29.37 ID:yqnwLH2V.net] (-続き-) COLLECT_GCC_OPTIONS='-v' '-o' 'aho' '-mtune=pentium' '-march=i586' /usr/lib/gcc/i586-slackware-linux/5.3.0/../../../../i586-slackware-linux/bin/a s -v --32 -o /tmp/ccMFr9O6.o /tmp/ccVi37md.s ← Bアセンブル GNU アセンブラ バージョン 2.26 (i586-slackware-linux)、BFD バージョン version 2 .26.20160125 を使用 (-続く-)
948 名前:デフォルトの名無しさん [2018/09/13(木) 23:31:04.04 ID:yqnwLH2V.net] (-続き-) COMPILER_PATH=/usr/libexec/gcc/i586-slackware-linux/5.3.0/:/usr/libexec/gcc/i58 6-slackware-linux/5.3.0/:/usr/libexec/gcc/i586-slackware-linux/:/usr/lib/gcc/i5 86-slackware-linux/5.3.0/:/usr/lib/gcc/i586-slackware-linux/:/usr/lib/gcc/i586- slackware-linux/5.3.0/../../../../i586-slackware-linux/bin/ LIBRARY_PATH=/usr/lib/gcc/i586-slackware-linux/5.3.0/:/usr/lib/gcc/i586-slackwa re-linux/5.3.0/../../../../i586-slackware-linux/lib/:/usr/lib/gcc/i586-slackwar e-linux/5.3.0/../../../:/lib/:/usr/lib/ COLLECT_GCC_OPTIONS='-v' '-o' 'aho' '-mtune=pentium' '-march=i586' /usr/libexec/gcc/i586-slackware-linux/5.3.0/collect2 -plugin /usr/libexec/gcc/ i586-slackware-linux/5.3.0/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/i586-s lackware-linux/5.3.0/lto-wrapper -plugin-opt=-fresolution=/tmp/ccGuF6mf.res -pl ugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pas s-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --eh-frame-hdr -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o aho /usr/lib/ gcc/i586-slackware-linux/5.3.0/../../../crt1.o /usr/lib/gcc/i586-slackware-linu x/5.3.0/../../../crti.o /usr/lib/gcc/i586-slackware-linux/5.3.0/crtbegin.o -L/u sr/lib/gcc/i586-slackware-linux/5.3.0 -L/usr/lib/gcc/i586-slackware-linux/5.3.0 /../../../../i586-slackware-linux/lib -L/usr/lib/gcc/i586-slackware-linux/5.3.0 /../../.. /tmp/ccMFr9O6.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc -- as-needed -lgcc_s --no-as-needed /usr/lib/gcc/i586-slackware-linux/5.3.0/crtend .o /usr/lib/gcc/i586-slackware-linux/5.3.0/../../../crtn.o ← Cリンク
949 名前:デフォルトの名無しさん [2018/09/13(木) 23:34:54.24 ID:yqnwLH2V.net] 普通に別々のモジュールで独立して処理されてる @プリプロセス /usr/libexec/gcc/i586-slackware-linux/5.3.0/cc1 Aコンパイル /usr/bin/gcc Bアセンブル /usr/lib/gcc/i586-slackware-linux/5.3.0/../../../../i586-slackware-linux/bin/as Cリンク /usr/libexec/gcc/i586-slackware-linux/5.3.0/collect2
950 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 00:17:52.55 ID:lqNqtREE.net] >>934 /usr/bib/gccはちげーだろ
951 名前:デフォルトの名無しさん [2018/09/14(金) 00:51:20.40 ID:q3l06dS7.net] >>934 コンパイルは /usr/lib/x86_64-linux-gnu/6/cc1 だな。俺の場合
952 名前:デフォルトの名無しさん [2018/09/14(金) 00:58:32.39 ID:fXySkelb.net] bash-4.3$ gcc -v -E -o aho_.c aho.c ←開始 /usr/lib/gcc/i586-slackware-linux/5.3.0/specs から spec を読み込んでいます COLLECT_GCC=gcc ターゲット: i586-slackware-linux configure 設定: ../gcc-5.3.0/configure --prefix=/usr --libdir=/usr/lib --mandir =/usr/man --infodir=/usr/info --enable-shared --enable-bootstrap --enable-langu ages=ada,c,c++,fortran,go,java,lto,objc --enable-threads=posix --enable-checkin g=release --enable-objc-gc --with-system-zlib --with-python-dir=/lib/python2.7/ site-packages --enable-libstdcxx-dual-abi --with-default-libstdcxx-abi=gcc4-com patible --disable-libunwind-exceptions --enable-__cxa_atexit --enable-libssp -- enable-lto --disable-install-libiberty --with-gnu-ld --verbose --enable-java-ho me --with-java-home=/usr/lib/jvm/jre --with-jvm-root-dir=/usr/lib/jvm --with-jv m-jar-dir=/usr/lib/jvm/jvm-exports --with-arch-directory=i386 --with-antlr-jar= /root/slackware-current/source/d/gcc/antlr-runtime-3.4.jar --enable-java-awt=gt k --disable-gtktest --with-arch=i586 --target=i586-slackware-linux --build=i586 -slackware-linux --host=i586-slackware-linux スレッドモデル: posix (-続く-)
953 名前:デフォルトの名無しさん [2018/09/14(金) 00:59:43.97 ID:fXySkelb.net] (-続き-) gcc バージョン 5.3.0 (GCC) COLLECT_GCC_OPTIONS='-v' '-E' '-o' 'aho_.c' '-mtune=pentium' '-march=i586' /usr/libexec/gcc/i586-slackware-linux/5.3.0/cc1 -E -quiet -v aho.c -o aho_.c - mtune=pentium -march=i586 存在しないディレクトリ "/usr/lib/gcc/i586-slackware-linux/5.3.0/../../../../i58 6-slackware-linux/include" を無視します #include "..." の探索はここから始まります: #include <...> の探索はここから始まります: /usr/lib/gcc/i586-slackware-linux/5.3.0/include /usr/local/include /usr/lib/gcc/i586-slackware-linux/5.3.0/include-fixed /usr/include 探索リストの終わりです。 COMPILER_PATH=/usr/libexec/gcc/i586-slackware-linux/5.3.0/:/usr/libexec/gcc/i58 6-slackware-linux/5.3.0/:/usr/libexec/gcc/i586-slackware-linux/:/usr/lib/gcc/i5 86-slackware-linux/5.3.0/:/usr/lib/gcc/i586-slackware-linux/:/usr/lib/gcc/i586- slackware-linux/5.3.0/../../../../i586-slackware-linux/bin/ LIBRARY_PATH=/usr/lib/gcc/i586-slackware-linux/5.3.0/:/usr/lib/gcc/i586-slackwa re-linux/5.3.0/../../../../i586-slackware-linux/lib/:/usr/lib/gcc/i586-slackwar e-linux/5.3.0/../../../:/lib/:/usr/lib/ COLLECT_GCC_OPTIONS='-v' '-E' '-o' 'aho_.c' '-mtune=pentium' '-march=i586' エラーなし
954 名前:デフォルトの名無しさん [2018/09/14(金) 01:02:16.51 ID:fXySkelb.net] プリプロセス前 bash-4.3$ cat aho.c #include <stdio.h> #define ahobaka "あほばか" #define AHOBAKA aho##baka #define LIT(str) #str #define PRINT(f,...) fprintf(stdout, f, __VA_ARGS__) #define SHINE PRINT("%s%s\n", AHOBAKA, LIT(a"b"c)) int main(void) { SHINE; return 0; } プリプロセス後 bash-4.3$ cat aho_.c (-略-) # 8 "aho.c" int main(void) { fprintf( # 9 "aho.c" 3 4 stdout # 9 "aho.c" , "%s%s\n", "あほばか", "a\"b\"c"); return 0; }
955 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 04:27:04.26 ID:q3l06dS7.net] pcc(1)とかで試すとわかりやすいとおもう。
956 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 05:58:00.88 ID:3Ef1q6jY.net] コンパイラが(プリプロセス済みの)ソースを処理する際、 直接にはアセンブリのソースに持っていかず、いったん中間言語に変換。 その中間言語の段階でも最適化を行ってから アセンブリに変換してアセンブル・リンク。 ……みたいな手順になってると聞いたことがある。 中間言語段階の中間ファイルを出力させることができるか知らんけど。 プリプロセッサ、コンパイラ、アセンブラ、リンカよりも 内部的な手順はむしろ増えてるのかも。
957 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 07:13:28.65 ID:RUHHwTRx.net] >>941 実行時コンパイラ https://ja.wikipedia.org/wiki/%E5%AE%9F%E8%A1%8C%E6%99%82%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%A9
958 名前:デフォルトの名無しさん [2018/09/14(金) 08:36:29.54 ID:SYmkUqRw.net] JITとなんの関係が?
959 名前:デフォルトの名無しさん [2018/09/14(金) 08:49:57.91 ID:q3l06dS7.net] >>941 >>924 の図に倣うなら C言語の原稿 ↓プリプロセッサ マクロ・ヘッダファイルが展開された原稿 ↓翻訳機1 中間言語(最適化済み) ↓翻訳機2 アセンブリ言語の原稿 ↓アセンブラ 機械語 ↓リンカ 実行可能ファイル みたいなかんじかね。
960 名前:デフォルトの名無しさん [2018/09/14(金) 09:12:54.86 ID:d02sSTx1.net] 昔 LSIゲームってあったでしょ ああいうゲームをCで書いてパソコンで遊びたいんだけど 技術的な情報が不足してんだ 特に画面を動かす方法 そういうのどこで手に入るか分かる人いる? 教えてくださいヽ(^o^)丿
961 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 09:49:18.88 ID:1qfFvEAu.net] cursesライブラリを使う
962 名前:デフォルトの名無しさん [2018/09/14(金) 10:39:42.96 ID:i1kWv4b4.net] CでGUIまでやりたいということか? うーん・・・
963 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 12:08:50.95 ID:9XnUq3uB.net] >>945 エスケープシーケンスで検索 とりあえず NetHack みたいので遊んでみたら
964 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 12:34:30.19 ID:3Ef1q6jY.net] >>945 の言うLSIゲームってのが、 ドットマトリクスの汎用液晶パネルを使ったゲームじゃなくて、 ゲーム&ウォッチみたいな専用にデザインされた液晶のゲームだと ちょいと変わってくるかもな。 大筋は同じだけど、少数のデカキャラ表示を点けたり消したり。
965 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 12:48:17.13 ID:9XnUq3uB.net] イメージ伝えるためにLSIゲームと言うならドットマトリックスというよりゲームウォッチ式じゃないかな。 ただその趣旨は、簡易な操作と表示のゲームなんじゃないかと。 キャラクタ端末ゲームを知ればそっちに倒れるんじゃないかな?
966 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 12:53:46.05 ID:/Lpq1ndz.net] >>945 画面表示はglut
967 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 13:39:29.18 ID:GvbetZ+k.net] ゲームウォッチみたいなのってビットマップじゃないけど、表示する情報量どんくらいなんだろうね? 64bitくらい?
968 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 13:53:35.51 ID:q3l06dS7.net] エスケープシーケンスの話が出たついでに質問なんだけど コマンド名: エラーレベル: エラーメッセージ ↑こういう形式のエラーで、エラーレベルが赤や黄に色付けされてる場合があるんだけども これってなにかライブラリがあるのかな。それとも各種アプリケーションが自力でやってんのかな。
969 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 14:03:35.51 ID:xLMWwHO5.net] LSI-Cと聞いて飛んできました 懐かしい・・・
970 名前:デフォルトの名無しさん [2018/09/14(金) 15:19:32.14 ID:d02sSTx1.net] >>949 そうそう ああいう感じでやれないかなと思ってる 別に3Dとかじゃないし そんなに高度な技術情報が必要とも思えないんだけどな APIを勉強すればある程度分かるかな?
971 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 15:37:28.55 ID:GvbetZ+k.net] 色付けはほぼ自前なんじゃないかねえ。単に制御文字挟むたけだからね。 端末にお絵かきするならローグでも使った伝統あるcursesで。
972 名前:デフォルトの名無しさん mailto:sage [2018/09/15(土) 10:21:05.36 ID:iTkubaya.net] >>955 ttp://www.orchid.co.jp/computer/cgame/index.html
973 名前:デフォルトの名無しさん mailto:sage [2018/09/15(土) 10:24:40.59 ID:RjcPqpvv.net] >>952 ttps://www.nintendo.co.jp/n10/interview/game_and_watch/vol1/index2.html >というのも、ゲーム&ウオッチで採用したチップは、電卓で使われているのと同じものだったんです。 >そもそも電卓のディスプレイのひとつの数字は7セグメントで表示されるようになっていまして・・・。 (略) >72セグメントの表示が可能だったそのチップを使って『ボール』をつくったんです。
974 名前:デフォルトの名無しさん mailto:sage [2018/09/15(土) 12:30:45.82 ID:WJY+K2bP.net] >>958 面白いな しかしゲームウォッチって、液晶上の配線の都合もあって配置がぐちゃぐちゃになってそうだから、ビットのON/OFFだけとは言え面倒そうだな
975 名前:デフォルトの名無しさん mailto:sage [2018/09/15(土) 12:52:26.12 ID:rgCMOp4r.net] コンピュータというほど抽象化もされてないんだろうね。 コントローラではあるけども。
976 名前:デフォルトの名無しさん mailto:sage [2018/09/15(土) 12:53:38.17 ID:iTkubaya.net] 配線の都合で配置がぐちゃぐちゃ?
977 名前:デフォルトの名無しさん mailto:sage [2018/09/15(土) 13:31:29.74 ID:OUVvcRON.net] ゲームウオッチは知らんけど配線パターンの都合でビット配置が変則的になるとかはあるよ
978 名前:デフォルトの名無しさん mailto:sage [2018/09/15(土) 18:43:35.47 ID:8KftQgLD.net] 蒸し返すようだが近代的な処理系でも,ビルドの各作業は分担して実行してると思っていいのね。 プリプロセッサで展開→中間言語に翻訳→アセンブリ言語に翻訳→機械語にアセンブラ→リンク
979 名前:デフォルトの名無しさん [2018/09/15(土) 18:59:03.04 ID:kl+My5NF.net] >>957 ありがとう すごい参考になった
980 名前:デフォルトの名無しさん mailto:sage [2018/09/16(日) 06:08:26.07 ID:QKaZz7Xi.net] >>963 そう考えて良いと思うよ。 ただし、各段階で実行されるツールが独立した実行ファイルか、とか それぞれの段階で作られる中間状態をファイルとして取り出せるか、 という話なら「場合による」ってことになる。
981 名前:デフォルトの名無しさん mailto:sage [2018/09/16(日) 23:54:07.55 ID:ynEgKPZ+.net] >>965 ありがとうございます。
982 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 00:45:31.62 ID:jghdaJ/O.net] save-tempsは割と使います
983 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 06:09:25.28 ID:5TL9cO8s.net] gcc -save-temps -o prog prog.c と指定すると prog.i, prog.s, prog.o が残るのね。 それでもプリプロセス済みCとアセンブリとの中間段階は見られないか。 ちなみに -save-temps と -pipe を同時に指定すると、 gcc: 警告: -save-temps が指定されたため、-pipe は無視されました ……ですってよ、奥様。
984 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 07:57:34.69 ID:SBpxj18K.net] >>968 > それでもプリプロセス済みCとアセンブリとの中間段階は見られないか。 prog.iとprog.sが一体なんだと思ってるんだろう…
985 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 08:09:11.53 ID:hbuTlOjm.net] プリプロセスとかアセンブリとかがあるとなんか困るの? なんでそんなに必死なのか分からん。 処理が過度に複雑にならないためとか、様々な言語やCPUといった対象に幅広く対応するためとか、いろんな理由で工程を分ける方が合理的でしょうに。
986 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 08:13:06.60 ID:BwzrWhGR.net] 鉄鉱石とボーキサイトと石油入れたら自動車が出てくる装置があると思ってるんでしょ
987 名前:968 mailto:sage [2018/09/17(月) 08:27:18.66 ID:5TL9cO8s.net] .i がプリプロセス済みのC .s がアセンブリ ということは分かってるのよ、それらの間にある状態を ファイルとして見ることができないという話。 GCC用語ではGENERICの段階てことになるかな。 GENERICとアセンブリの間にもまだあるみたいだけど。
988 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 08:28:59.23 ID:SBpxj18K.net] >>970 単なる技術的興味だろ このスレでうだうだやるなよって言うのならわかるけど必死とか意味わからん
989 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 08:36:20.28 ID:SBpxj18K.net] >>972 > それらの間にある状態を > ファイルとして見ることができないという話。 gccならこの辺りを見ればいいんじゃね https://code-examples.net/ja/docs/gcc~7/developer-options
990 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 09:14:28.38 ID:z+cSzUXJ.net] TASMとTCCとTLINKにお世話になった20年前。
991 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 09:19:33.19 ID:5TL9cO8s.net] >>974 ありがとう。 でもオプションの数を見ただけでウンザリしてもうた。 コンパイラ開発者向けのレベルになると最適化処理のステップごとなのね。
992 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 10:17:59.30 ID:qtGPC3c9.net] -Eだろjk
993 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 11:58:09.09 ID:5NB0QfSZ.net] たとえばpccなんかはものすごく外部コマンドにたよってるよね。 man pccとするとその解説が載ってる。
994 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 12:00:30.90 ID:5NB0QfSZ.net] 質問者はここを参照するといいかも pcc.ludd.ltu.se/how-it-works/ ただ,PCCはGCCやらClangと違って小ささ,見通しのよさを重視してるから, GCCとかClangとかはそんなことやってないかもしれん。 (ていうかGCCやClangにおける↑上のリンクみたいなドキュメントはないのかな)
995 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 20:12:09.59 ID:2waW+Aqm.net] 分かってて使こてたんちゃうん
996 名前:デフォルトの名無しさん mailto:sage [2018/09/19(水) 05:40:46.68 ID:6Ke1Nn09.net] C言語(じゃなくてもいいけど)をやってると 標準出力に出力するというのがいかに便利かを痛感するねぇ 下手にファイルやなんかに出力先を指定しようものなら一気に パーミッションや属性値の問題が噴出するのに対して 標準出力ではそういう一切を気にせずに垂れ流せる
997 名前:デフォルトの名無しさん mailto:sage [2018/09/19(水) 07:56:02.42 ID:bRibFDbQ.net] C++の学習(入門レベル〜初心者レベル)をするのにC言語の知識って必須なんですか? 読んでるC++入門書が途中から分かりづらかったので独習C++って入門書を買おうとしたんですけど とあるレビューにC言語を習得してるのが望ましいとか書いてあって気になったんですが… プログラミング言語自体経験皆無なのですが、どうすればいいでしょうか?
998 名前:デフォルトの名無しさん mailto:sage [2018/09/19(水) 08:04:03.02 ID:37LGoDD1.net] >>982 C++はCの大半の部分を包含したような言語仕様になっているから、必然的にCの知識も必要になってくる。本を書く方も、Cと重複するような内容まですべて書いてると膨大になってくるから、Cを知っている前提になっている本は多い。 C++の流儀でコーディングするなら使われないCなりの書き方とかもあるけど、基本的にはCは避けて通れないはず。 頑張ってCも身に付けるか、もっと初心者が取っつきやすい言語から始めた方がいいかも。
999 名前:デフォルトの名無しさん mailto:sage [2018/09/19(水) 08:29:50.54 ID:t41Iifgl.net] じゃあCの知識を前提にしてないC++の本探せば やさしいC++とかでいいんじゃね
1000 名前:デフォルトの名無しさん mailto:sage [2018/09/19(水) 08:47:40.49 ID:OxeqQ4V7.net] 全部やればいいと思うよ。pythonもlispも C++の必要性を実感するのってプログラムが大規模になってからなので、最初はちょっとポイント絞るのが大変かもね
1001 名前:デフォルトの名無しさん mailto:sage [2018/09/19(水) 10:31:35.10 ID:bRibFDbQ.net] >>983 回答ありがとうございます ロベールって本読んでたんですが(クラスの章で読むの中断)今の所特にC言語などの前提知識は 要求されてなかったんですが、これから必要になっていく感じですかね・・ 具体的にはどれくらいC言語のスキルを付けてからC++に逝くのが望ましいですか?苦しんで覚えるC言語って本はざっと読んだんですがこれじゃ弱いですよね・・ .....それともCに拘らずに何かpythonとかrubyみたいな人気そうで簡単そうな言語で何か作れるくらいまで覚えてからC言語に戻ってきたほうが 一見遠回りのように見えて近道なんでしょうか?質問ばかりですいません;
1002 名前:デフォルトの名無しさん mailto:sage [2018/09/19(水) 10:41:53.75 ID:h/A1qpKl.net] ロベール読めないってマ?
1003 名前:デフォルトの名無しさん mailto:sage [2018/09/19(水) 17:03:44.61 ID:t41Iifgl.net] >プログラミング言語自体経験皆無なのですが >クラスの章で読むの中断 >ざっと読んだんですがこれじゃ弱いですよね・・ C++にこだわる理由を知りたくなったw そして読んでるだけ?手動かしてる?
1004 名前:デフォルトの名無しさん mailto:sage [2018/09/19(水) 17:18:24.07 ID:5wa+YDhW.net] 俺が禿1stを読み始めた当時も大した理由はなかったな なんだか凄そう、その程度のことだった
1005 名前:さまよえる蟻人間 mailto:sage [2018/09/19(水) 17:29:55.07 ID:hbV0PURz.net] 次スレ頼む。
1006 名前:デフォルトの名無しさん [2018/09/19(水) 17:57:48.07 ID:XSTNMnDw.net] 次スレ C言語なら俺に聞け 148 mevius.5ch.net/test/read.cgi/tech/1537347410/
1007 名前:デフォルトの名無しさん mailto:sage [2018/09/19(水) 20:24:47.33 ID:nVz8f0fv.net] 今から覚えるならcはやってもc++はやらんでも良いと思うわ
1008 名前:デフォルトの名無しさん mailto:sage [2018/09/19(水) 20:27:17.70 ID:9wwh2JnW.net] C++は拡張が酷すぎると思う
1009 名前:デフォルトの名無しさん mailto:sage [2018/09/19(水) 22:45:11.03 ID:+Hv0QgVJ.net] Cの拡張の無さの方がひどい
1010 名前:デフォルトの名無しさん [2018/09/19(水) 22:48:46.48 ID:xLP4ypV2.net] むしろ昔はC++のコードからCのコードを出力してたからな Cは拡張性は抜群 ウンコスクリプトもCで書かれてる C以外の言語が淘汰されることがあっても Cが淘汰されることはない
1011 名前:デフォルトの名無しさん mailto:sage [2018/09/19(水) 23:00:14.31 ID:XIk0tg++.net] C++で作っていいのは継続的な開発がない場合だけだな 継続的に開発やメンテナンスをするならC++は使っちゃいかん
1012 名前:デフォルトの名無しさん mailto:sage [2018/09/20(木) 02:32:23.68 ID:v2140bTt.net] >>988 動かしてます。書きながらやってます 理由はあれですが最終的にC#とC++使いこなせるようになりたいです 他の簡単な言語やるとしたらどれくらいのまでスキルあげればいいんですかね・・
1013 名前:デフォルトの名無しさん mailto:sage [2018/09/20(木) 02:59:01.53 ID:OZxd0eW0.net] たのしいRuby 第5版、2016 Effective Ruby、2015 さらに、JavaScript, jQuery をやっても、 C++ の1冊よりも、はるかに簡単だろ C++ を読んでも、何も作れないし、長時間のムダ!
1014 名前:デフォルトの名無しさん mailto:sage [2018/09/20(木) 03:28:24.58 ID:90KUJ2ts.net] >>997 C#とC++やりたいなら、まずはC#から入った方が良さそう。 rubyは全く方向性が違うし今(そしてこれからも)やる必要はない。
1015 名前:デフォルトの名無しさん mailto:sage [2018/09/20(木) 03:52:33.79 ID:v2140bTt.net]
1016 名前: rel="noopener noreferrer" target="_blank" class="reply_link">>>998-999 ありがとうございます C#からやったほうがいい理由も教えていただきたいところですが1000レス目ですね… RubyもやってみたいんですがViisualSの導入出来てるのでそれで動くC#からやってみます C言語から脱線してしまいすいませんでした [] [ここ壊れてます]
1017 名前:1001 [Over 1000 Thread.net] このスレッドは1000を超えました。 新しいスレッドを立ててください。 life time: 34日 4時間 16分 31秒
1018 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています