[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 02/12 01:51 / Filesize : 317 KB / Number-of Response : 1019
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C言語なら俺に聞け 147



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/

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 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<317KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef