C言語なら俺に聞け 149
: デフォルトの名無しさん (ワッチョイ af9f-7TBo) [sage] 2018/10/28(日) 22:01:44.38:D9Gt7gmT0 !extend:checked:vvvvv:1000:512 ↑ 次スレを作る時は上記1行をコピーして2行に増やして必ず1行目に入るようにしてください。 C言語の話題のみ取り扱います C++の話題はC++スレへ 質問には最低限の情報(ソース/コンパイラ/OS)を付ける 数行で収まらないソースは以下を適当に使ってURLを晒す ttp://https://paiza.io/ ttp://https://ideone.com/ ttp://http://codepad.org/ C11 ttp://http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf C99 ttp://http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf ttp://http://kikakurui.com/x3/X3010-2003-01.html C FAQ 日本語訳 ttp://http://www.kouno.jp/home/c_faq/ JPCERT C コーディングスタンダード ttp://https://www.jpcert.or.jp/sc-rules/ ※前スレ C言語なら俺に聞け 148 ttps://mevius.5ch.net/test/read.cgi/tech/1537347410/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured : デフォルトの名無しさん (アウアウウー Saf1-6HWJ) [sage] 2018/10/29(月) 21:37:04.36:l03/lfXna 0x99b9e4313e3e : デフォルトの名無しさん (ワイモマー MM9b-Vh4f) [sage] 2018/10/30(火) 23:57:20.35:EION13qUM 自分を賢いと思っている馬鹿は 周りが自分をどう見ているかも 相手がどのレベルにいるのかも なぜ自分が放置されてるのかも 何一つ知らない : デフォルトの名無しさん (ワッチョイ 5b64-ofXo) [sage] 2018/11/01(木) 16:13:41.13:upF+pHX50 musl-libcみたいに,特定のOSのプロジェクトではないPOSIXユーティリティの実装ってありますかね。 : デフォルトの名無しさん (アウアウエー Sa52-qQUz) [sage] 2018/11/01(木) 17:07:48.90:g+DLXddba NewLibとかあったね : デフォルトの名無しさん (ワッチョイ a361-ZA70) [sage] 2018/11/03(土) 10:27:59.63:gIO4YTzK0 strtok_sを4変数にするとエラーになるんですけどどうしたらいいですか? strmaxがある説明と無い説明があってわからないです。 : デフォルトの名無しさん (ブーイモ MMba-rFq1) [sage] 2018/11/03(土) 11:28:06.76:hj5IrB61M msvcのstrtok_sは非標準だから、_MSC_VERとかが定義されてるかどうかで呼び分けるしかないね。 あんまり覚えてないけどmsvcバージョンのほうが先にあった気がするから、iso/iecが悪い気がする。(間違ってるかも) まあmsが切り替えスイッチを用意してくれればよいのだけど。 : デフォルトの名無しさん (ワッチョイ a361-ZA70) [sage] 2018/11/07(水) 08:24:14.69:60G+FgCT0 よくわからないのでstrtokを使いました。 : デフォルトの名無しさん (アークセー Sxbb-0Z6C) [sage] 2018/11/07(水) 16:09:41.16:39tnP8GCx ちょっとお知恵を拝借。 符号付き14ビットの整数があるとき(14ビットのMSBが符号ビット)、その値を符号付き16ビット値に拡張するうまいやり方はないでしょうか? 拡張後も符号や数値自体は変化なしです。 例えば2進で 10 1010 1010 1010 という符号付き14ビット値があった時、 1110 1010 1010 1010 のように変換したい。 14ビット値を16ビット符号付き変数に入れて左に2ビット論理シフトし、さらに右に2ビット算術シフトすれば実現できるのですが、何となく気持ち悪くて。 サクッとエレガントな方法はないでしょうか? : デフォルトの名無しさん (JP 0He3-4S5W) [sage] 2018/11/07(水) 16:25:54.26:Gtw+mwj/H シフトが一番エレガント。 : デフォルトの名無しさん (ドコグロ MM92-Ax9l) [sage] 2018/11/07(水) 18:02:56.37:d49i6th8M 2の補数表現として… 普通に14bit目が1なら0xc000とorするだけじゃないの? : デフォルトの名無しさん (アウアウウー Sac7-AdN2) [] 2018/11/07(水) 18:16:05.56:bimd4khFa もはや答えが出切ったと思うので斜め上からの回答でも書いておくか。 回答 int型が14ビットの整数型になっているCコンパイラを使う。 もちろんchar型は7ビット。 CPUは1バイトが7ビットである。 : デフォルトの名無しさん (ドコグロ MM92-Ax9l) [sage] 2018/11/07(水) 19:11:16.88:d49i6th8M それ16bitの結果得るのが面倒なだけだろ もう少し面白い回答頼むわ : デフォルトの名無しさん (バッミングク MM86-0Z6C) [sage 9] 2018/11/07(水) 19:12:35.33:xr+D7aWAM 皆様回答ありがとうございます。 今回はビットシフト方式で行こうと思います。 使ってるCPUとコンパイラがマイナーな、ある意味純粋な16ビット環境で、sizeof(char)もsizeof(short)も1を返し、sizeof(long)は2を返すような特殊な環境なので7ビットマイコンではありません。 : デフォルトの名無しさん (ワッチョイ 8bb3-MyS3) [sage] 2018/11/07(水) 19:46:07.55:SCUqGzCI0 intが14ビット そんな処理系あるの? : デフォルトの名無しさん (アウアウウー Sac7-AdN2) [] 2018/11/07(水) 20:47:19.69:bimd4khFa 多分ない。 しかし1バイトが6ビットとか9ビットのマシンはあったようだよ。 ttp://https://qiita.com/yaju/items/c5da6df2221d5c3611e0 : デフォルトの名無しさん (ワッチョイ 1a12-Q1ft) [sage] 2018/11/07(水) 20:49:47.59:YuYLxFMn0 60〜70年代メインフレームは百花繚乱だったなぁ ttps://en.wikipedia.org/wiki/Word_(computer_architecture) 27bitマシンとかどーすんだよ : デフォルトの名無しさん (アメ MM7f-Ul28) [sage] 2018/11/07(水) 20:55:36.02:Lazgvcn1M このように1バイトが何ビットかはアーキテクチャ依存のため、EUではハードディスクなどのパッケージにはGB単独表記は認められず、Go(ギガオクテット)を併記または単独で表記しなければならない。 1オクテットは必ず8バイト。 : デフォルトの名無しさん (ブーイモ MMba-rFq1) [sage] 2018/11/07(水) 21:07:14.78:fEoWtkRgM つまりEUでもHDDの容量はわからないってことか : デフォルトの名無しさん (ワッチョイ 8bb3-0Z6C) [sage 9] 2018/11/07(水) 21:09:34.64:u7stYdWj0 いや、Octetは8ビットでは? : デフォルトの名無しさん (アメ MM7f-Ul28) [sage] 2018/11/07(水) 21:12:33.55:Lazgvcn1M そうでしたwwwww : デフォルトの名無しさん (アウアウカー Sac3-U2lQ) [] 2018/11/07(水) 21:19:59.22:h4FWJh3Ka 大丈夫。 文脈から理解はしてる。 上げ足取りなだけだ。 : デフォルトの名無しさん (ワッチョイ 7f76-MyS3) [sage] 2018/11/07(水) 21:47:40.71:lW24kLVO0 バグってそういうもんだろ 笑ってられる神経が異常だ : デフォルトの名無しさん (ワッチョイ 5b80-Q1ft) [] 2018/11/07(水) 23:27:18.47:fWOqg0Pc0 バカってそういうもんだろ : デフォルトの名無しさん (ワッチョイ 9333-YP9l) [sage] 2018/11/08(木) 00:45:35.31:LWRNNBjj0 CHAR_BIT は 8 以上、 INT_MAX は 32767 以上って規定があるから、規格非準拠になっちゃう。 : デフォルトの名無しさん (ワッチョイ ab15-ki2E) [sage] 2018/11/08(木) 22:02:06.26:WtJgli4G0 だから何? 違ったら笑うしかできない無能か : デフォルトの名無しさん (アークセー Sxcd-8u3a) [sage] 2018/11/08(木) 22:55:19.89:nQ7J47/rx C89止まりのものです 私のような者が C11などの新しい規格を学ぶのによい書籍はありますか? : デフォルトの名無しさん (ワッチョイ 2b81-ki2E) [sage] 2018/11/08(木) 23:16:18.68:x4oYjs6S0 このスレは最近独り言が増えたのか? オレもそうだがな : ◆QZaw55cn4c (ワッチョイ 5360-ZWep) [sage] 2018/11/08(木) 23:21:07.60:PviajTiD0 >C89止まりのものです、私のような者が C11などの新しい規格を学ぶのによい書籍はありますか? 私もC89止まりですが、それで困ることがあるのでしょうか? : デフォルトの名無しさん (ワッチョイ 415e-p2zE) [sage] 2018/11/08(木) 23:28:43.81:6k9Hci0C0 私はC99で止まっていますが、最近はもっぱらPythonを使っているので困りません : デフォルトの名無しさん (ワッチョイ 4be3-peA3) [sage] 2018/11/09(金) 05:43:42.12:1ixP0EQ90 pythonいいよな yieldとかC標準にもほしい : デフォルトの名無しさん (ワッチョイ 9312-L4Ec) [sage] 2018/11/09(金) 10:07:36.38:6cegpcYL0 cpythonのyield実装を見ればC言語に移植できるんじゃねえの : デフォルトの名無しさん (アウアウエー Sa23-2eEn) [sage] 2018/11/09(金) 11:42:49.67:Sh6b3ug/a yieldって何につかうの? : デフォルトの名無しさん (アウアウカー Sa9d-Gc0T) [] 2018/11/09(金) 12:33:54.85:DHGOZxvaa 動き的にgets的な動きする。 表示したら即メモリ解放的な。 : デフォルトの名無しさん (ドコグロ MMe5-Mdza) [sage] 2018/11/09(金) 12:41:29.53:GUqFOdkWM yieldはソース上に出ないデータを管理しないといけないからC言語の理念と合わない気がする ※ 個人の感想だが… C++には欲しいな : デフォルトの名無しさん (ワッチョイ 31b3-ApEQ) [sage 9] 2018/11/09(金) 12:52:21.62:1VeVq06f0 yieldはいわばスタック情報の保存だから、setjmp、longjmpで出来そうな出来なさそうな? : デフォルトの名無しさん (アウアウウー Sa05-ahuQ) [] 2018/11/09(金) 13:11:31.21:JsSTi+Gxa ん?thread? : デフォルトの名無しさん (アウアウエー Sa23-2eEn) [sage] 2018/11/09(金) 13:52:10.49:Sh6b3ug/a 単にコンテキスト保存するだけだからまあ再現はできるよ 書き方としてイテレータとか欲しいのはわかるけど実現方法はどうでもいいわけじゃん : デフォルトの名無しさん (ワッチョイ 4b23-ki2E) [sage] 2018/11/09(金) 14:11:15.88:lOb1tGzl0 yieldは便利で使い勝手がいーるど : デフォルトの名無しさん (ワッチョイ 9164-30bX) [sage] 2018/11/09(金) 20:13:38.25:3ZHBVzZ50 POSIXの<errno.h>にある番号とBSDの<sysexits.h>で全然番号が違うのは理由があるのかな。 いままで<sysexits.h>に従って「許可がない」動作は77を返すものだと思ってたら Linuxでは1を返すのでなぜだと思って調べたら<errno.h>では権限エラーは1。 嫌だなぁ。 : デフォルトの名無しさん (ドコグロ MMe5-Mdza) [sage] 2018/11/09(金) 20:53:23.68:GUqFOdkWM 77とか1とかのリテラルで書くバカって今でもいるんだ… : デフォルトの名無しさん (アウアウエー Sa23-2eEn) [sage] 2018/11/09(金) 23:18:17.74:Sh6b3ug/a POSIXで具体的な数値決めてたっけ? : デフォルトの名無しさん (ワッチョイ db9f-ki2E) [] 2018/11/10(土) 05:46:23.69:PYYpj2JU0 <errno.h> の方はC言語でシステムコールしてエラーになった時の errno 変数の値で、 <sysexits.h> はプログラムが exit() 等で終わる時に使う値なので全く用途が違う。 : デフォルトの名無しさん (ワッチョイ 9164-30bX) [sage] 2018/11/10(土) 06:30:10.24:lBOHSSIo0 つまり<errno.h>で定義された値はユーザーからは見えないんだね。 : デフォルトの名無しさん (ワッチョイ db9f-9t8X) [] 2018/11/10(土) 06:43:06.70:PYYpj2JU0 見えないというか、ただの数値なのでどこにでも使えないわけではないが、errnoの値をexit()で返す事は想定して作られていない。 : デフォルトの名無しさん (ワッチョイ 4b23-ki2E) [sage] 2018/11/10(土) 11:37:20.64:lMF42kZL0 わりとerrnoを返してくる人多いけどね : デフォルトの名無しさん (ワッチョイ 2b81-ki2E) [sage] 2018/11/10(土) 11:58:28.71:4Oh2WWEl0 errno返してもらっても困る : デフォルトの名無しさん (ワッチョイ f380-/quP) [sage] 2018/11/10(土) 17:42:25.30:16GnFLu/0 #defineマクロ定数はプリプロセッサで単純置換されるだけだからな : デフォルトの名無しさん (アウアウウー Sa05-ahuQ) [] 2018/11/10(土) 18:12:43.61:JVjCprWqa 多いか? 別にそう作っちゃいけないということはないが、できれば exit() では <sysexits.h> の方を使って欲しいな。 単なる個人的な希望だが。 : デフォルトの名無しさん (ワッチョイ 9164-30bX) [sage] 2018/11/10(土) 18:13:54.94:lBOHSSIo0 ありがとう。 ユーティリティ自体の終了ステータスはPOSIXの範囲では0もしくは非0, BSD拡張で<sysexits.h>で定められている値を使えば まあユーザーの助けにはなるって認識でいいかな。 : デフォルトの名無しさん (アウアウウー Sa05-ahuQ) [] 2018/11/10(土) 18:26:46.25:JVjCprWqa そう。 : デフォルトの名無しさん (ワッチョイ 937f-nWRh) [] 2018/11/11(日) 12:27:27.91:2PA7tL2j0 struct S { size_t len; type-X buf[0]; }; という状況下で、 size_t const len = 500; struct S* const p = (struct S*)malloc(sizeof(struct S) + sizeof(type-X)*len); p->len = len; p->buf = (type-X*)((size_t)p + sizeof(struct S)); という処理を偶に見かけますが、これだと末尾パディングの影響でbuf[1]のアドレスがtype-Xのアライメントに沿っていない可能性があるので、不正な気がします 具体的には struct S { size_t len; type-X* buf; }; として、 size_t const len = 500; size_t const padding_for_align_x = alignof(type-X)*(sizeof(struct S)%alignof(type-X) == 0 ? 0 : 1); struct S* const p = (struct S*)malloc(sizeof(struct S) + padding_for_align_x + sizeof(type-X)*len); p->len = len; p->buf = (type-X*)((size_t)p + sizeof(struct S) + padding_for_align_x); ...などとしないとアライメント違反になりそうな気がするのですが、この認識は正しいでしょうか : デフォルトの名無しさん (ワッチョイ 937f-nWRh) [sage] 2018/11/11(日) 12:57:16.34:2PA7tL2j0 すいませんよく考えたら自己解決しました の質問は取り下げます お騒がせしました : デフォルトの名無しさん (ワッチョイ 9164-30bX) [sage] 2018/11/11(日) 14:07:31.98:PRctJ18Z0 へー。musl-libc知らなかったけど組込Linuxとかの界隈では有名っぽいね。 ソース見たけどすごく短かいのが多くて逆に不安になったw : デフォルトの名無しさん (ワッチョイ 4b23-ki2E) [sage] 2018/11/11(日) 15:17:31.04:0RasjQan0 sysexits.h って初めて知った Linuxとかだと ls unko で 2 が返るとか割と普通 : デフォルトの名無しさん (ワッチョイ 9164-30bX) [sage] 2018/11/11(日) 16:17:47.42:PRctJ18Z0 まあBSDでプログラミングしたことないと あんまり知りえないと思うわ。 だいたいPOSIXで定められてる訳じゃないから 知っておくべきなのはBSDプログラマくらい。 ただLinuxプログラムのエラーコード周りはなぜか非統一的なんだよね。 GNUコーディング規約で事細かに決められてそうなものだけどねw apt(1)なんて権限エラーに100返すんだぜ? : デフォルトの名無しさん (ワッチョイ 9312-L4Ec) [sage] 2018/11/11(日) 16:41:45.09:PCIE9alw0 『MSDNこそC++である』という格言があるように、構造体の末尾の配列は不定長に出来ます 構造体内の可変長配列 ttps://msdn.microsoft.com/ja-jp/library/b6fae073(v=vs.120).aspx : デフォルトの名無しさん (ワッチョイ 497d-ki2E) [sage] 2018/11/11(日) 18:01:07.65:EYHizhRi0 VLAとは違うんだよな そのページのサンプルに限っては不完全型配列の直前にサイズ情報があって確かに可変長だが 配列そのものがサイズ情報を含むのではないので、不定長とでもいうべきものだ : デフォルトの名無しさん (ワッチョイ 9164-TRt+) [sage] 2018/11/11(日) 18:07:53.58:PRctJ18Z0 どうでもいいけど そのURLの書式はなんだ? URLパラメータってそんな位置に置けたっけ。 : デフォルトの名無しさん (ワッチョイ f380-/quP) [sage] 2018/11/11(日) 18:21:19.83:1ROtIrLE0 先頭さえ確定できれば後ろなんてどうでも良い さすがのC言語さん : デフォルトの名無しさん (ワッチョイ 9321-A2K7) [sage] 2018/11/11(日) 21:36:09.88:1MIvJQ9R0 その格言は初めて聞きましたw その方法だとアライメント違反になるかならないかが気になっていたのですが、 * 末尾のbuffer[0]でその型のアライメント以上のアライメントを構造体に強いることができる(拡張) * 末尾のbuffer[1]の場合は当然構造体にそのアライメント以上のアライメントを強いることができる(c89) * 末尾のbuffer[]でも同様(c99での仕様) となり、全パターンでbuffer[i]へのアクセス時にアライメント違反にならないので、 ポインタメンバにしてアライメント気にしてmallocする必要ないのかー、これでいいのかーと解決した次第です 英語だとflexible arrayでした : デフォルトの名無しさん (アウアウウー Sa05-Vzv6) [sage] 2018/11/11(日) 22:09:10.99:3Du2sMqla v=vs.120のとこ? クエリストリングちゃうやろ : デフォルトの名無しさん (ワッチョイ db9f-ki2E) [] 2018/11/11(日) 22:26:25.11:0F8Q4Ddx0 ま、確かにコマンドごとにバラバラだな。 errno とも無関係だったりする。 : デフォルトの名無しさん (ワッチョイ 9164-TRt+) [sage] 2018/11/12(月) 13:20:45.59:JkRQG90v0 もうちょっと皆がリターンコードについて考えてくれたらいいね。 : デフォルトの名無しさん (ワッチョイ 2b81-ki2E) [sage] 2018/11/12(月) 13:26:58.93:yW6s8Lj00 コマンドの戻り値って、皆さんどの様に活用されてますか? 成功か失敗か、それが分かれば十分な気はしますけど : デフォルトの名無しさん (ワッチョイ 9164-TRt+) [sage] 2018/11/12(月) 13:50:25.07:JkRQG90v0 例えば同じ「失敗」でも何が原因なのか分かったほうが問題に対処しやすくない? ファイルが存在しないのか はたまたファイルが現状の権限では読みとれないのか。 もちろんエラーメッセージを見てもいいけど。 あと,終了ステータスを見ないと成功失敗が分からない場合がある。 例えばdiff(1)ユーティリティーなんかは「1」という(一見失敗してるような)終了ステータスに 「(コマンド自体は成功してるが)不一致が発見された」という意味を割り当ててる。 fsck(1)ユーティリティーはもっと複雑。 まあ知ってるに越したことはないし<sysexit.h>はPOSIX標準ではないにせよ, Unixプログラミングをする場合は積極的に利用してもいいかも。 : デフォルトの名無しさん (ワッチョイ 2b81-ki2E) [sage] 2018/11/12(月) 14:11:20.80:yW6s8Lj00 イヤ、使い方の可能性としてそう言うものがあるくらいは知っている 実際に使っている人がいたら、どういう使い方をしているかを聞きたいんだ : デフォルトの名無しさん (ワッチョイ 9164-TRt+) [sage] 2018/11/12(月) 16:42:56.85:JkRQG90v0 勘違いしてましたわ 俺の知ってる限りじゃシェルスクリプトでは多用されてるがCではどうだろうね。あまり見掛けない。 : デフォルトの名無しさん (アウアウウー Sa05-2eEn) [sage] 2018/11/12(月) 17:16:29.53:7RdsKszja diffでちょっと迷うくらいだよな。 : デフォルトの名無しさん (ワッチョイ 56be-JwVn) [sage] 2018/11/18(日) 22:01:33.04:Fz4U8sel0 #define elif(e) else if (e) みたいにして if (...) { ... } elif (...) { ... } else { ... } ↑こういう感じにするのってやっちゃマズいのかな。 個人的にelifキーワードがある言語に慣れてるんでこうやってて 現状特にエラーに遭遇したことはないんだけど OSSのソースコードとか個人が公開してるソースコード見ても こういうことやってないんだよね。 : デフォルトの名無しさん (ワッチョイ 054f-CYUw) [sage] 2018/11/18(日) 22:14:05.51:Eond7dK60 やめとけ メリットが1ミリもないから誰もやらない。 善し悪しはさておき、C言語での判断基準はほぼ「実行性能」であって、 else if と書けばいいだけの所をいちいちマクロにする馬鹿なんて世界中に誰もいないだけ。 というか、そのレベルで慣れられないのなら、elif言語だけ使っておけ。 : デフォルトの名無しさん (ワッチョイ ba80-N102) [sage] 2018/11/18(日) 22:24:21.65:KTJRdzRs0 #define { begin みたいなことを本気でやる奴がいたとはw : デフォルトの名無しさん (ワッチョイ ba80-N102) [sage] 2018/11/18(日) 22:26:08.72:KTJRdzRs0 #define begin { 逆だったわw : さまよえる蟻人間 ◆T6xkBnTXz7B0 (スフッ Sdea-/fpg) [sage] 2018/11/18(日) 22:35:31.43:ZI/kDlHTd ソースコードを静的解析する関係で、文法を強引に変えるような変態な前処理は良くないらしい。 : デフォルトの名無しさん (ワッチョイ edf2-maOp) [sage] 2018/11/18(日) 22:39:49.79:HA6us6PZ0 世の中の静的解析ツールは当然プリプロセッサ適用後の状態で解析するわけで : デフォルトの名無しさん (アウアウウー Sa91-ZAHG) [sage] 2018/11/18(日) 22:42:50.43:gSv28L1Ba typedefも避けるという流儀はあるからね まあ気持ちはわかる むしろGNU拡張のtypeofはアリ : デフォルトの名無しさん (ワッチョイ 054f-CYUw) [sage] 2018/11/18(日) 22:45:11.55:Eond7dK60 endは普通に変数名に使われてるから無理だな。 それはさておき、セミコロン嫌いも拗らせておかしくなってるよな。 : デフォルトの名無しさん (ワッチョイ 054f-CYUw) [sage] 2018/11/18(日) 22:47:48.36:Eond7dK60 > typedefも避けるという流儀はあるからね それはC++ではないか?Cでは使われまくりだったような。 : さまよえる蟻人間 ◆T6xkBnTXz7B0 (スフッ Sdea-/fpg) [sage] 2018/11/18(日) 23:14:59.59:ZI/kDlHTd 国際会議で誰も知らない方言を話して良い訳ない。オープンなソースコードは世界中の人が見るんだから。 : デフォルトの名無しさん (ワッチョイ 4a21-JwVn) [sage] 2018/11/18(日) 23:19:46.27:we8vMVw10 多分linuxカーネルの流儀じゃないかな struct/enum/unionとかの省略を目的としたtypedefは行わない opaque-type/関数ポインタとかの必然性が無い限り対象は明示するっていう戦略 : デフォルトの名無しさん (ワッチョイ 054f-CYUw) [sage] 2018/11/18(日) 23:37:43.07:Eond7dK60 > struct/enum/unionとかの省略を目的としたtypedefは行わない こんなのは当たり前だ。(linuxカーネルに限らず) そもそも「タイプ数をケチるだけの為に何かする」という文化は最近のWeb系馬鹿言語だけであって、Cにはない。 当然、else if を elif にしたがる奴もいない。 「腕のいい奴のコードは短い」を勘違いしてる馬鹿共がやたら「タイプ数」にこだわってるだけだ。 だいたい、structをタイプしたくなければC++コンパイラ使えば済むし。 : デフォルトの名無しさん (ワッチョイ ad98-nUmj) [] 2018/11/19(月) 00:20:04.42:DaKcZAfU0 ここで聞いていい内容なのかわからないのですが gccを4.8.1から8.1.0に変えたらwinAPIを使用して図形を表示するプログラムで 図形が表示されずウィンドウだけ表示されるようになってしまった これは、c言語,gcc,winAPIどれを疑えばいいのでしょうか? MingW-W64-buildsというところから8.1.0のgccはダウンロードした : さまよえる蟻人間 ◆T6xkBnTXz7B0 (スフッ Sdea-/fpg) [sage] 2018/11/19(月) 00:24:07.93:4H6R9aF+d 図形の描画ルーチンを貼れ。 : デフォルトの名無しさん (ワッチョイ 4a21-JwVn) [sage] 2018/11/19(月) 00:25:09.76:+eaeK27e0 なぜ唐突にweb系云々に話が飛ぶのか理解できないのだが、 typedef struct {...} S; typedef enum {...} E; void f(S* s, E e); 上のような書き方、結構(昔から)見かける気がするけど : デフォルトの名無しさん (ワッチョイ 054f-CYUw) [sage] 2018/11/19(月) 00:28:01.74:1op4u+BL0 お前の頭、だな gcc4.8.1で行けるのならそれでやればいい話。 それを8.1.0に変えただけで問題が発生するのなら、当然そこに問題がある。 そしてそもそも詳しいことはそのソースを作った奴に聞け。 : デフォルトの名無しさん (ワッチョイ 4a21-JwVn) [sage] 2018/11/19(月) 00:30:44.00:+eaeK27e0 というかこれ以外だとtypedefを使うべき所にしか使わないはずなので、 cだろうがc++だろうがtypedefの使用量に差が出るとは思えない ああ、実はってc++ならusing使うべきとかそういう話? : デフォルトの名無しさん (ワッチョイ 054f-CYUw) [sage] 2018/11/19(月) 00:46:59.49:1op4u+BL0 > 上のような書き方、結構(昔から)見かける気がするけど 個人的には疑問があるが、おそらく実際はそちらの方が正しいのだろう。 C++で対策された=C言語のそこがウザイと禿が判定した、ということだから。 > なぜ唐突にweb系云々に話が飛ぶのか理解できないのだが、 ググレば分かるが、その辺の言語では「こちらの方が短いから良い」といっているページは結構見かける。 C言語でこれを言っている奴は皆無だ。 > ああ、実はってc++ならusing使うべきとかそういう話? いや、そうじゃない。そちらの取り方で問題ないし、君の typedef の使い方は正しいと思う。 typedefって結局「型に別名を与える」為の物で、 型が自由に定義出来るようになったC++ではほぼ要らないはず、って話。 : デフォルトの名無しさん (ワッチョイ ad98-nUmj) [] 2018/11/19(月) 01:03:17.87:DaKcZAfU0 そうか...仕様変更、バグ、なにか他にも入れるものがあるとか分かるなら聞きたかったんだが 仕方ない。ありがとう 4.8.1だと古くなってるかなと思って思い切って8.1.0で試してみてるんだけど戻すか : デフォルトの名無しさん (ブーイモ MMea-N102) [sage] 2018/11/19(月) 01:03:24.61:CKJwSX5SM Web系言語界隈は条件演算子をif文の簡略表記()だの省略形()だの言ってる池沼も多いからなぁw : デフォルトの名無しさん (ワッチョイ 054f-CYUw) [sage] 2018/11/19(月) 01:16:02.93:1op4u+BL0 まじめにやる気があるのなら、少しずつ上げて切り分けるのは簡単だろ。自分でやれよ。 ここで聞くより早いと思うぜ。 : デフォルトの名無しさん (ワッチョイ 8681-maOp) [sage] 2018/11/19(月) 01:26:41.23:on7lyeKV0 else if の省略形は確かに頂けない あれはperlからだっけか? : さまよえる蟻人間 ◆T6xkBnTXz7B0 (スフッ Sdea-/fpg) [sage] 2018/11/19(月) 01:28:26.32:4H6R9aF+d #elifはあって、elifがないのは変だが、キーワードを節約するためだから。 : デフォルトの名無しさん (ワッチョイ 054f-CYUw) [sage] 2018/11/19(月) 01:30:10.27:1op4u+BL0 歴史的には多分sh 70は多分python : デフォルトの名無しさん (ワッチョイ ad98-nUmj) [] 2018/11/19(月) 01:37:20.71:DaKcZAfU0 なるほど、きざんでやってみます ありがとうございます : デフォルトの名無しさん (ワッチョイ 4a21-JwVn) [sage] 2018/11/19(月) 01:38:53.01:+eaeK27e0 あー...もしかして自分の >struct/enum/unionとかの省略を目的としたtypedefは行わない これが「型定義時に、キーワードとしてのstructやenum、unionの省略のためだけのtypedefは行わない」 つまりstruct S{...}という形で定義し、明示的にvoid f(struct S* s)などといった形式で取り扱う ...という意味ではなく、 「structやenum、unionといった型について、それら個々の名前(タグ名)を単に省略するためだけのtypedefは行わない」 つまりtypedef struct SS...SS Sというただの省略形式にするtypedefは行わない と伝わったのかな それなら書き方が悪かった、申し訳ない : デフォルトの名無しさん (ワッチョイ 56be-JwVn) [sage] 2018/11/19(月) 12:18:16.63:hiATcnIp0 自分もここが引っ掛かったんだよね。 プリプロセッサ向けにはelifキーワードがあるのに コンパイラ向けにはない。 もしもキーワード数を節約したり実行速度のみを重視する実装なら プリプロセッサ向けにもelifキーワードはなかった筈。 なのにある,ということはなにかしらタイプ数の節約とか読み易さとかを考慮してるんだろうね。 だからコンパイラ向けにelifキーワード(の紛い物)を追加するというのは何らおかしくないと思うのだが。 : デフォルトの名無しさん (アークセー Sx6d-2qly) [sage 9] 2018/11/19(月) 13:17:22.86:X/ZWPPJsx そもそもC言語にはelse ifって構文はないよ。 んで、プリプロセッサは#の後をスペースなしの1語にした結果だと思う。 : デフォルトの名無しさん (アウアウカー Sa85-ZFLo) [] 2018/11/19(月) 13:27:56.02:X6/A5UNDa フリーフォーマットだからelse if(...)を自分なりに分かりやすくすれば良いだけ。 : デフォルトの名無しさん (ワッチョイ e944-maOp) [sage] 2018/11/19(月) 21:04:51.99:DK7kmuka0 賛成 静的解析はツールだけがすることではなく人力でもすることだ 人力「でも」と言ったが、目的意識を持って判断できるのは人間だけで こちらが主役であることを、小者でアフォなやつほど忘れる : デフォルトの名無しさん (ワッチョイ 9564-ddua) [sage] 2018/11/20(火) 01:45:19.01:EatTFoyz0 でもでも言われてるけど プリプロセッサ命令を効かせてから解析するのが普通なんだから あんま関係なくね? : デフォルトの名無しさん (ワッチョイ d623-maOp) [sage] 2018/11/20(火) 09:35:42.58:im347JOd0 構文にはなくても書けるんだから一緒だろ : デフォルトの名無しさん (ワッチョイ cdb3-4fLB) [sage] 2018/11/20(火) 15:56:41.31:mQTI1hl+0 負の数を識別できません。 signed int DATA = -128 (0xFF80。int は16ビット) if (DATA > 0) {式1} else {式2} なぜか式1 が実行されます。(DATA > 0) は偽ではないのでしょうか。 : デフォルトの名無しさん (ワッチョイ adea-EWFf) [sage] 2018/11/20(火) 16:14:32.18:ls520OJz0 問題のコードから症状が出るままどんどん削ってって最小単位がそのコード? ttp://https://ideone.com/xcDRkc 実は右辺がcharの変数で 中身が 0x80 なんだけど 符号拡張の過程で char を unsigned char として 0x0080 と拡張したり (処理系依存だっけか? リテラルだけだっけ?) そういう話ではない? : デフォルトの名無しさん (アウアウカー Sa85-ZAHG) [sage] 2018/11/20(火) 16:16:24.86:hc2iBltta 16bitってどういう処理系なんじゃろうか : デフォルトの名無しさん (ワッチョイ cdb3-4fLB) [sage] 2018/11/20(火) 16:43:19.22:mQTI1hl+0 ,104 右辺の0は定数です。 変数DATA の値はPRINT文で16進表示したものです(0xFF80)。 引用先のページは、残念ながら理解できませんでした。 申し遅れましたが処理系は組み込み用16ビットマイコン用GCC です。 処理系に依って前述のような動作になることはありえますか? : デフォルトの名無しさん (ワッチョイ adea-EWFf) [sage] 2018/11/20(火) 16:49:33.90:ls520OJz0 右辺云々は 初期化の右辺の話だけども、そこが本質じゃなさそうね sizeof(int) = 2 かつ printf("%x", DATA) が ff80 と表示される系で if (DATA > 0) が成立しないとな ごめんワカラン : デフォルトの名無しさん (バッミングク MMe1-2qly) [sage 9] 2018/11/20(火) 16:59:34.34:7KgR8FwmM 最小の全ソースを見せて。 この手の場合、自分では正しいと思ってるとこに思わぬポカミスが入ってることがまれによくある。 : デフォルトの名無しさん (ワッチョイ cdb3-4fLB) [sage] 2018/11/20(火) 17:07:55.90:mQTI1hl+0 ,107 すいません。ご察しのとおり、変数DATA に初期値を代入しているわけではありません。 このif 文が評価される直前のDATA 値が-128 という事で、初期値を代入したように書きました。 今日はこの件で非常に疲れたので、ソースの提示は少し時間を下さい。ありがとうございます。 : デフォルトの名無しさん (ワッチョイ adea-EWFf) [sage] 2018/11/20(火) 17:18:12.25:ls520OJz0 元コードをそのまま横断的に眺めてるとわからないけど 症状が残るまま、余計な箇所をがんがん削っていって簡単化していくと見つかることがあるよね a[i++] = i; のような副作用完了点内での複数回の参照とかはどうしようもないけどw : デフォルトの名無しさん (アウアウカー Sa85-ZAHG) [sage] 2018/11/20(火) 17:26:38.15:GGiSm8Yna 値自体は型情報を含んでないという点は押さえないとあかんが、そういう問題でもないか。 妙なtypedefしてたりしてね。 : デフォルトの名無しさん (ワッチョイ e99e-ZAoN) [sage] 2018/11/20(火) 17:33:06.78:oWNEdszs0 アセンブリコード読んで見るとか 割り込みでレジスタ確認とかすれば cで見てると気づかないことが見えてくるかも : デフォルトの名無しさん (ワッチョイ 2961-4fLB) [sage] 2018/11/20(火) 19:23:37.02:2i13hG6Q0 printf("check : sizeof %d: DATA = %d\n",sizeof(DATA),DATA); if((signed int)DATA > (signed int)0) とかやって一つ一つ動作確認してみるとか。 よくわからん動作不良起こした時は配列変数がスタックサイズ超えてたとか 16Bit環境なら32kb/64kb超えたとかが原因だったことあるけど。 : デフォルトの名無しさん (ドコグロ MM21-JzRR) [sage] 2018/11/20(火) 19:37:09.53:TCh3BaRvM そもそもその環境でのコードを実行したらどうなるのさ? : デフォルトの名無しさん (アウアウウー Sa91-AAco) [] 2018/11/20(火) 20:38:14.44:xyhgdzIUa 本当に DATA の型は signed int か? 良く見たら unsigned int ってことはないか? : デフォルトの名無しさん (ブーイモ MMb9-ed7b) [sage] 2018/11/20(火) 21:11:07.99:d/DSkvWpM 16進リテラルが16bitで収まらないからunsigned intで解釈された。(c99) そんでintに暗黙キャストされたときに最上位bitが落ちたと思われ : デフォルトの名無しさん (ワッチョイ 054f-CYUw) [sage] 2018/11/20(火) 22:03:30.03:HgsWcywV0 > 今日はこの件で非常に疲れたので、ソースの提示は少し時間を下さい。ありがとうございます。 正しい。疲れたら休め。結果的にその方が早い。 君も分かっていると思うが、まともなコンパイラ(実績のあるコンパイラ)なら、そんなところにバグはない。 ほぼ間違いなく君の勘違いだ。 それは根詰めて見てても気づかないが、一旦忘れて見直したらあっさり見つかる、ということもよくある。 残業してグダグダやるよりも、早く帰って早く寝て、次の日に早めに出社した方が捗る。 おそらくあっさり解決すると思うぜ。 : デフォルトの名無しさん (ワッチョイ 8680-vjqa) [sage] 2018/11/20(火) 22:51:04.92:0YIMqUF30 リテラルの大小によって、型が変わるとか、滅茶苦茶な文法だろ コンパイルエラーにしろよ。 気づかねえ : デフォルトの名無しさん (ワッチョイ cdb3-EWFf) [sage] 2018/11/20(火) 23:08:18.58:w1zNIHuF0 ソースの見栄えで桁あわせにゼロパディングしたら 8進数になっててうぁぁぁ : デフォルトの名無しさん (アウアウカー Sa85-ZAHG) [sage] 2018/11/20(火) 23:08:44.13:jZchQuqWa マジックナンバーあかんとか言ってもさあ、マクロで隠したせいで生じたバグも経験的にはかなり多いんだよね。 値のリテラル即悪みたいなのもどうかと思うね。 : デフォルトの名無しさん (ワッチョイ 054f-CYUw) [sage] 2018/11/20(火) 23:22:23.29:HgsWcywV0 型は変わらないし、普通は警告が出るはず。 いずれにしても、C言語はお前みたいな馬鹿向けには出来てない。 unsigned int から int へのキャストは普通はそのままで、飽和処理なんてしないだろ。 仕様なのか処理系依存なのかは知らんが。 : デフォルトの名無しさん (ワッチョイ 054f-CYUw) [sage] 2018/11/20(火) 23:35:21.40:HgsWcywV0 何をリテラルにして良いか判断出来ないのは君(または周り)の問題だろ。 独り言ではなく、問題提起〜議論起動する気があるのなら、「俺なりの基準」でも言えよ。 : デフォルトの名無しさん (ワッチョイ 2105-ed7b) [sage] 2018/11/21(水) 00:29:46.48:Z1qX2lWM0 >型は変わらないし つ6.4.4.1 >普通はそのまま intの最大値を超えているのにどうやって表現する気だ : デフォルトの名無しさん (ワッチョイ 054f-CYUw) [sage] 2018/11/21(水) 00:32:45.26:UO6rINaw0 > intの最大値を超えているのにどうやって表現する気だ ならお前はdoubleの最大値を超えている場合はどうするんだ? お前みたいな馬鹿が使うようには出来てないんだよ。 : デフォルトの名無しさん (ワッチョイ 8681-maOp) [sage] 2018/11/21(水) 00:45:36.29:w42YOu3l0 釣り針が大きすぎて、咥えられないw : デフォルトの名無しさん (ドコグロ MM72-JzRR) [sage] 2018/11/21(水) 06:57:26.41:sFoC6dALM あるあるすぎる… : デフォルトの名無しさん (ワッチョイ d623-maOp) [sage] 2018/11/21(水) 09:11:45.73:xS7mIekg0 止めてくれ その術はオレに効く : デフォルトの名無しさん (アウアウウー Sa91-AAco) [] 2018/11/21(水) 09:22:03.70:RC0TEAoba 30年ぐらい前にZ80のマイコンボード用に作ったプログラムでそれにハマった覚えがある。 : デフォルトの名無しさん (アウアウカー Sa85-ZAHG) [sage] 2018/11/21(水) 09:54:03.00:PloQSCN7a すぐ16進で書きたがるのもどうかと思うわ。 intに-1でなくて0xffffffff入れてるのとか意図が掴みかねる。 そもそもunsignedがあるのが良くないんだな。javaは正しかった。 : デフォルトの名無しさん (ワッチョイ 4a12-CYUw) [sage] 2018/11/21(水) 10:14:15.23:nY2eM3rc0 70年代初期に何が良いか何が悪いか何が正解かが分かるの? それに磁気コアメモリが4096ビットの時代だよ : デフォルトの名無しさん (ワッチョイ adea-EWFf) [sage] 2018/11/21(水) 10:55:13.30:Gzh6p2MJ0 リテラル中に 8 や 9 が入ってれば文法エラーで止まるので判明するけど 入ってないとそのまま通っちゃうし、特に警告の対象になるようなもんでもないしでやっかいよね : デフォルトの名無しさん (ドコグロ MM72-JzRR) [sage] 2018/11/21(水) 12:33:01.52:sFoC6dALM 今時8進表記なんて使うことはほぼないと思うから使ってたら警告してもいいくらい : デフォルトの名無しさん (ワッチョイ cdb3-4fLB) [sage] 2018/11/21(水) 13:31:24.92:VldA7vNv0 皆さんご助言ありがとうございます。おかげさまで一応不具合は解消できました。 以下問題の箇所です。 signed int MAX, WIDTH, TMP, SHIFT; float COEF; COEF = MAX / WIDTH; //浮動小数点演算になると思っていた // 1 = 128 / 128 TMP = SHIFT * COEF; // -128 = -128 * 1 if (TMP > 0) {式1} //TMP= -128 なのに、式1が実行される。 else {式2} だったのを COEF = ((float)MAX / WIDTH); に修正すると、式2 も実行されるようになりました。他に変更したところはありません。 今まで何故(-128 > 0)が真だったのかは不明です... : デフォルトの名無しさん (アウアウウー Sa91-AAco) [] 2018/11/21(水) 13:55:29.32:89fYavxUa 本当に if の直前で TMP がマイナスだったのかが怪しい。 それと気になるのはやはり型が本当にその通りなのかだな。 : デフォルトの名無しさん (ワッチョイ adea-EWFf) [sage] 2018/11/21(水) 14:13:56.46:Gzh6p2MJ0 本当に変数の型は signed なのか? 実際に 式2 に通って欲しいのに 式1 へ流れた MAX, WIDTH, SHIFT の値 をメモって 再現する最小セットのコード作って何が起きてるのか把握しとかないと、また同じことやらかすかもよ signed int TMP; signed int MAX = <リテラル>; signed int WIDTH = <リテラル>; signed int SHIFT = <リテラル>; float COEF; COEF = MAX / WIDTH; TMP = SHIFT * COEF; printf("1:%d\n", TMP); if (TMP > 0) { printf("1:式1\n"); } else { printf("1:式2\n"); } COEF = ((float)MAX / WIDTH); TMP = SHIFT * COEF; printf("2:%d\n", TMP); if (TMP > 0) { printf("2:式1\n"); } else { printf("2:式2\n"); } : デフォルトの名無しさん (アウアウウー Sa91-ZAHG) [sage] 2018/11/21(水) 14:20:55.45:HZsG+Ur+a COEFが0なんじゃ? まあわかんないね : デフォルトの名無しさん (ワッチョイ 054f-CYUw) [sage] 2018/11/21(水) 22:53:01.43:UO6rINaw0 皆が指摘しているように、それだけでは無いと思うがな。 おそらく君が出してきたソースにも色々間違いがあるんだろうけど。 ソース見る限りズブの初心者のようだが、問題点を理解しているか? まず用語がおかしいので先にこれを修正しておくが、普通は float scale = width / max; だ。shiftは足すもの、scaleが掛けるもの。coeffは係数=無次元数だろ。 読んだときに違和感がないようにしろというのはアプリケーションハンガリアンの思想だが、 これを採用するかはともかくとして、思想自体は当たってる。 そして通常は max で割る。(ただしこれについては、意図的に逆数にすることもあるが) あと変数を全部大文字にするのはマジで止めろ。そんなことしてる奴は居ないだろ。 それで、君の「キャスト忘れ」についてはscaleが0に張り付くなり、整数の階段状になるので、 「動作を見た瞬間にどこがバグっているか分かる」タイプのバグになる。 追跡するにも苦労しないし、そもそも追跡の必要すらない。 当然、疲れもしない。マジで10分で修正して、てへぺろ、だ。 だからそのバグを取るのに手こずること自体がおかしい。 そしてその遠因になっているのはその意味不明なネーミングだ。 まずはそこからだと思うぜ。 (-128 > 0)が真になることはないので、確実に君が何か勘違いしている。 先生/先輩/上司その他、見てもらえる人がいるのなら、 君のソースのその酷さも含めて見てもらった方がいい。 そういう人がいなくて君が一人でマイコンを動かそうとしてるのなら、今の君では無理だと思うぜ。 Python馬鹿なら、最近はPythonが動くマイコンもあると聞くので、環境を変えた方がいい。 マイコン環境のCは、色々と貧弱な分、PC環境のCより難しい。 今の君ではPC環境のCでも無理がある。 状況聞く限り、俺はの予想が正しいと思う。 : デフォルトの名無しさん (ワッチョイ 6acb-maOp) [sage] 2018/11/21(水) 23:10:25.75:iZ9rHJSw0 ズブの素人が来てよかったね 嬉しそう 生きがいみたいなもんだな : デフォルトの名無しさん (ワッチョイ 217b-sJSV) [sage] 2018/11/21(水) 23:20:56.85:ILAAUKO60 歳を取ると説教したくなる : デフォルトの名無しさん (ワッチョイ 09e3-4fLB) [sage] 2018/11/21(水) 23:26:10.43:0tXjM5tc0 何が起きていたのか本人は追求する気はないみたいなんで 話はこれ以上進まないだろう で、それがお前の生きがいなわけだ なんだかな : デフォルトの名無しさん (ワッチョイ 9580-CYUw) [] 2018/11/21(水) 23:48:20.51:QmHGv3o90 低学歴知恵遅れが 低学歴知恵遅れ丸だしなレスして イキイキしてる : デフォルトの名無しさん (ワッチョイ 054f-CYUw) [sage] 2018/11/21(水) 23:57:18.63:UO6rINaw0 ,138 まあお前らは上達しないと思うぜ。 最近お前らみたいな奴も増えたが。 上達出来るかは結局、自分で深みに突っ込んで行けるかにかかってる。 俺の指摘が間違っている、というのならともかく、 気に入らない指摘は無視すればいい、というスタンスなお前らはプログラマは無理だ。 諦めて他の職を探せ。 132は努力しているようだが、方向を間違っている。 それはお前らにも見えてることだろ。放置するのもまた悪だと思うぜ。 巻き込まれるのが怖くて見て見ぬふりをして、結果、 陰湿ないじめが横行してたゆとりなんてその程度だと思うが。 勿論132も追求した方がいいとは思うが、正直、そのレベルじゃない。 PC環境のCでGUIのIDEを使ってまずCを覚えるか、 既にプログラミング出来るのならその言語、調べたところRubyが動くのもあるようだから、そっちから行った方がいい。 Cも初めて+マイコンも初めて、では、確実にはまる。 : デフォルトの名無しさん (ワッチョイ c380-1YVs) [] 2018/11/22(木) 00:13:37.04:8rnkEr570 こんな低学歴知恵遅れ丸出しな長文レスばっかりで埋め尽くされると まともなヤツは近づかなくなるわ やはり自覚がない : デフォルトの名無しさん (ワッチョイ ff12-1YVs) [sage] 2018/11/22(木) 07:53:35.42:pCbzIdwz0 >なんだこれ?引数 void って初めて見たぞ。文法的にありなのかこれ? まーたこのゴミが登場したのか もう出てけよ 余りにもゴミだからこのスレにはいらねーよ : 102 (ワッチョイ 63b3-Kv/S) [sage] 2018/11/22(木) 13:02:07.52:RP03a4vB0 この議論に参加してくださった皆さん さんの指摘は初心者の私には大変有難いものでした。 ただ、いくつか反論したい部分もあります。私はハード屋で、ハードウェア言語で使われる変数(フリップ・フロップ)の動作遷移を意識した変数名にした方が私には分かり易いのです。 変数を全て大文字にしているのは単純に昔からの癖です。命令文 = 小文字、引数,変数 = 大文字 と決めています。 「キャスト忘れ」についてですが、異常動作に即気付けるか否かはint 変数をキャストしないと 0,1,2・・・などの整数にしかならないことを知らなければなかなか気付けない事ではないでしょうか。 Cの参考書は持っていますが、浮動小数点演算に関連する情報が離散していて、この事象が起こりうるという説明を見出すことが出来ませんでした。 さんが提示されたテスト・プログラムは余裕が出来た時に実行してみるつもりです。現在このプロジェクトはほぼ完成しており、細かな調整を残すのみです。ありがとうございます。 : デフォルトの名無しさん (アークセー Sx47-4vBw) [sage] 2018/11/22(木) 13:18:43.76:mBJlqzKNx まずは問題解決とプロジェクト完了おめでとうございます。 分かってると思いますが、ここは教えたがりな人、説教したい人、煽りたい人がマウントとり合うだけのスレなので、あまり細かいことは気にせず自分に有用な情報だけ吸収してくださいな。 : デフォルトの名無しさん (ワッチョイ e3ea-jnO+) [sage] 2018/11/22(木) 13:19:52.16:xeK3mO2I0 すごいゲスパーだけど 式1 式2 が実際にはハードからの電圧出力やリレーのON/OFFで オシレータか分周器書いててオシロで当たったら、どうもデューティーがおかしい ってなったのかな : デフォルトの名無しさん (アウアウエー Sadf-rBFN) [sage] 2018/11/22(木) 13:46:54.48:Q57x8lAMa Cは型を意識しないとどうしようもないという所はあるよね。 なので、そもそも型変換が入る余地のない、キャストに頼らないコードを書くという強い意志を持つのが大事なんじゃろうと思う。 : デフォルトの名無しさん (ワッチョイ cf81-zhOP) [sage] 2018/11/22(木) 15:41:36.24:QPQE3Of30 getchar 「型変換?要らないよね?」 : デフォルトの名無しさん (ワッチョイ 3308-zhOP) [sage] 2018/11/22(木) 21:29:32.36:53EGOrV/0 おまえの指摘が間違っているかどうか以前に おまえは何を指摘したんだ? たとえば「10分」という物理量はどういう計算で出てきた値だ? テキトーすぎて相手するに値しないんだが : デフォルトの名無しさん (ワッチョイ 034f-1YVs) [sage] 2018/11/22(木) 22:08:04.59:/6bysR4g0 > ワッチョイ ff12 回答無し だからゆとりは駄目なんだよ > ワッチョイ 3308 同上 : デフォルトの名無しさん (ワッチョイ 034f-1YVs) [sage] 2018/11/22(木) 22:09:04.67:/6bysR4g0 > ハードウェア言語で使われる変数(フリップ・フロップ)の動作遷移を意識した変数名にした方が私には分かり易いのです。 他文書と同期したいのならコメントに残せ。 ソフトウェアはソフトウェアだけで評価出来ないと管理上問題だ。(大体において同期が取れずに意味不明になる) そもそもその部分、ハード叩いている感じでもないし。 それ以前にFFの状態遷移でSHIFTも無いと思うが。 > 命令文 = 小文字、引数,変数 = 大文字 と決めています。 これはマジで今すぐ直せ。 大文字にするのは目立たせる為であって、RAMが64バイトしかないような環境ならさておき、 今時ただの変数なんて目立ったら余計に邪魔になるだけ。今時白黒端末もないから、普通は、 命令文(キーワード)=青(色付き)、引数/変数=黒(色無し)、マクロ=全大文字、と大体相場が決まっている。 (そもそもverilogにも大文字文化はない。VHDLには多少有った気もするが…) > Cの参考書 Cに限らず、プログラミング全般で、入門書/参考書はゴミだ。理由は筆者自身がゴミだから。 海外の参考書は一部達人が書いている物があって、それは参考になるらしいが、俺はよくは知らん。 (ただこれも、昔からプログラミングをやっているのなら常識のはずだが) > この事象が起こりうるという説明 int/int は端数切り捨てで商のみが返る、というのはCの仕様だ。 > 変数を全て大文字にしているのは単純に昔からの癖です。 言っちゃ悪いが、君は「昔から」というほどプログラミングをやってないはずだ。 昔からやってるなら、マイコンで割り算やfloatを使うこと自体が無いし、 Cの割り算の仕様を知らないこともない。 そしてそのソフトウェアの完成度で良しと出来ること自体が(普通のプログラマからすると)キチガイじみてる。 確実に事故るぞ。 : デフォルトの名無しさん (ワッチョイ 034f-1YVs) [sage] 2018/11/22(木) 22:10:24.36:/6bysR4g0 (続き) ただしあまり反発もないところを見ると、ただのゆとり(若者)でもないらしい。 仮に全てを満足出来るプロフィールを定義すると以下となるが、合ってるのか? ・全て大文字とはCOBOL/FORTRAN/BASIC/アセンブラの世界。つまりC以前からであり、プログラミング歴自体は長い。 ・Cの基本的仕様を知らない=Cは普段使いではない。 ・変数が大文字の方が都合がいい=RAMがほぼ無い4bitマイコン等だとあり得る。この場合、ほぼアセンブラ。 ・基本ハードウェア+ちょいソフト(アセンブラ)程度で、今時ならIoTの末端の各センサ等、 定期的に計測値を報告するようなプログラムはずっとやってきている。 WatchDogTimerやPowerOnResetを使いまくりなのでプログラム自体はポンコツでもいい。 だとすると、下からCを攻めてきているわけだが、これはほぼ無いパターンだから最初にそれを言うべきだ。 この場合、参考書はK&Rのみで、それ以外は全部ゴミだから捨てていい。 割り算の仕様なら、P13にもろに書いてある。 > Cでは他の多くの言語と同様、整数の割り算では切り捨てが行われて、 > 小数部が切り捨てられてしまうからである。(K&R第2版P13) K&Rは「既にプログラミング出来る人がCを入門する用」に書いてあるから、 プログラミング自体の入門者には不向きだが、君の場合は最適だ。 一応言っておくが、ハロワがP7、コメントがP11、のP13な。本当にど頭に書いてある。 アセンブラの範囲を超えてCに踏み込んできたのなら、C流の管理方法に合わせた方がいい。 アセンブラの管理方法は、結局はアセンブラの規模用でしかなく、Cの規模には対応しづらい。 アセンブラ修得済みの人がCを修得するのは容易い。 ただし既に言ったように、世の中の「入門書」はそういう人向けではないから、K&R以外は読まなくていい。 とりあえずK&Rを頭から全部一通り読め。それでだいぶ状況が変わるはずだ。 : デフォルトの名無しさん (ブーイモ MMe7-XNyg) [sage] 2018/11/22(木) 22:12:40.41:BRQlwM1LM でもvoid君はC言語詳しくないじゃん : デフォルトの名無しさん (ワッチョイ 034f-1YVs) [sage] 2018/11/22(木) 22:14:51.83:/6bysR4g0 × キャストに頼らないコードを書く ○ 『暗黙の』キャストに頼らないコードを書く だろ。ただ、intをfloatに突っ込むと『精度が落ちる』と警告が出るはずだが。 (少なくともVC++ではそう。gccはこの辺甘々だから駄目かもしれんが) キャスト自体が悪、というのはC++(というより型安全)の思想だが、 現実的にはCでは『明示的な』キャスト無しではまともに書けない。 ただし、『暗黙的な』キャストは当然無しには出来る。 : デフォルトの名無しさん (ワッチョイ cf6e-zhOP) [sage] 2018/11/22(木) 23:05:52.65:Qbh1A67u0 10分という物理量と3308はどういう関係だ? テキトーすぎて相手するに値しないんだが : デフォルトの名無しさん (ドコグロ MMdf-I6zH) [sage] 2018/11/22(木) 23:32:58.42:y7NAvobyM 暗黙のキャスト? 意味わからん造語で語られても困るわ : デフォルトの名無しさん (ワッチョイ cf6e-zhOP) [sage] 2018/11/22(木) 23:47:40.88:Qbh1A67u0 > 現実的にはCでは『明示的な』キャスト無しではまともに書けない。 ほうほう 暗黙変換を明示的なキャストにすることで どんな「現実的」なコードが書けるんだ? おいバカ : ◆QZaw55cn4c (ワッチョイ 7f60-4xdr) [sage] 2018/11/23(金) 00:18:09.13:e/BZMkzC0 , >暗黙のキャスト integral promotion? それとも bcc用語では暗黙の型変換のことですか? : デフォルトの名無しさん (ワッチョイ 8fbe-pqc8) [sage] 2018/11/24(土) 09:23:26.40:I8hvszb00 型変換って割とおこなうとは思うけどなぁ。 : デフォルトの名無しさん (ワッチョイ cf61-9gvt) [sage] 2018/11/25(日) 05:17:32.88:iX9BTM1g0 確かにintをflotに突っ込むのは型だけ変わるじゃなくてデータも変わるからなぁ : デフォルトの名無しさん (ワッチョイ 8fbe-pqc8) [sage] 2018/11/25(日) 08:02:06.68:rsPEFWOD0 <stdint.h>とかのint8_tとかって 「プログラマが気が付かない整数型に関するミスをコンパイルする段階で(エラーとして)発見できる」 以外に使い道ってか利点ってないよね? int8_tで定義することでプログラムの速度が上がったりはしないと思ってるんだけど 間違ってる? : デフォルトの名無しさん (ワッチョイ 83b3-4vBw) [sage] 2018/11/25(日) 08:15:12.05:Euo5liwn0 速度も上がらないし、そもそもコンパイル時にエラーとしても発見できない。 ただ単にコーディング時や人のソースを読む時にビット数が明確に認識できるだけ。 : デフォルトの名無しさん (ワッチョイ 63b3-jnO+) [sage] 2018/11/25(日) 08:19:43.85:8Uvv4MpL0 (通信プロトコル等の)外的要因でビット数が規定されているものを操作するコードを書くとき : デフォルトの名無しさん (ワッチョイ 8fbe-pqc8) [sage] 2018/11/25(日) 09:24:44.24:rsPEFWOD0 例えばすごく初歩的なんだけど uint8_t型で宣言したループカウンタが500回回ったらコンパイルの時に警告でるよね。 ……と思って今試したら警告レベルを最大にしてやっと出たわ。 #include <stdio.h> #include <stdlib.h> #include <stdint.h> int main(void) { for (uint_fast8_t cnt = 0; cnt < 500; cnt++) { printf("%d\n", cnt); } exit(EXIT_SUCCESS); } これを $ gcc -std=c99 -Wall -Wextra -Wpedantic -o inttest ./inttest.c でやっと注意してくれる。 あれ? なんかもっと良い感じに撥ねられて(不注意な自分には)便利だなと思ったんだが,勘違いだったようだw : デフォルトの名無しさん (ブーイモ MM1f-XNyg) [sage] 2018/11/25(日) 09:53:54.15:2C+NPzGbM 利点というか、1byteが8bitでない環境もあるので、ポータブルなコードを書く場合は他に選択肢がないと思う : デフォルトの名無しさん (アウアウウー Sa27-rBFN) [sage] 2018/11/25(日) 09:55:02.80:jMSg79gEa それはどちらかというと静的解析の仕事じゃないかなあ。 : デフォルトの名無しさん (ワッチョイ 034f-1YVs) [sage] 2018/11/25(日) 10:08:42.57:i1TAIE2a0 > ……と思って今試したら警告レベルを最大にしてやっと出たわ。 最大にすれば出るのだから『便利』と言っていい。 警告レベルは自分に合わせて使うものだ。 判断する能力がないのなら、とりあえず最大にしとけ。 演算速度自体は上がらない。むしろ符号拡張等が必要になり落ちる。(事が多い) これは通常はintがCPU内部のALU幅と同じ(つまり最速)に設定される為だ。 ただしフットプリントは減る為、キャッシュヒット率が上がり、結果的に速くなることはある。 よく分からなければ、基本的に全部 int で、明確に必要なところだけその他を使えばいい。 (同一ソースでint幅が異なる複数の処理系で動かすというような場合を除く) : デフォルトの名無しさん (ワッチョイ 8fbe-pqc8) [sage] 2018/11/25(日) 10:15:56.81:rsPEFWOD0 ありがとう。 : デフォルトの名無しさん (ワッチョイ cf3f-zhOP) [sage] 2018/11/25(日) 12:58:50.32:FjBIbaie0 int8_tとか使おうとしているやつ相手に、とりあえずint使っとけとか どんだけドヤアホなんだよ : デフォルトの名無しさん (ドコグロ MM87-I6zH) [sage] 2018/11/25(日) 13:25:51.40:dxJC+hBBM いやint8_tの利点を聞いてる時点でに分があると思うぞ : デフォルトの名無しさん (アウアウカー Sa87-rBFN) [sage] 2018/11/25(日) 14:26:54.92:uM/ivlZCa 現時的にはちょっとデータを保存するとかネットワーク越しに外に送るとかした時点でサイズは意識することになるから、intが無難とも言い難い。 意識できてればなんでもいいんだが… : デフォルトの名無しさん (ワッチョイ cf61-9gvt) [sage] 2018/11/25(日) 15:22:16.95:iX9BTM1g0 構造体とかにint_8が入ってたらintに入れて計算してint_8に入れて 戻すのがいいのか? : デフォルトの名無しさん (ワッチョイ cf3f-zhOP) [sage] 2018/11/25(日) 16:05:11.73:FjBIbaie0 よくねえよ ナローイングになっちまう : デフォルトの名無しさん (ワッチョイ e3f2-/G1A) [sage] 2018/11/25(日) 16:11:29.88:x3zl9kFB0 計算の途中でint8_tの範囲外になる可能性があるかどうかと範囲外になった場合にどうしたいか次第だろ。 : デフォルトの名無しさん (ワッチョイ cf61-9gvt) [sage] 2018/11/25(日) 17:07:06.68:iX9BTM1g0 int32_tが最速だけれどsize_tと一緒に使うと型変換がいることで遅くなるんだよな : デフォルトの名無しさん (スッップ Sd1f-TL5M) [sage] 2018/11/25(日) 17:16:56.38:XilAUoVOd 何が最速化は環境によるのでは? 少なくともfast型のほうが早そうだが : デフォルトの名無しさん (ワッチョイ c364-m15j) [sage] 2018/11/25(日) 20:07:43.14:74eaLfxV0 ごめんバカみたいな質問なんだけど その「遅い」っていうのは実行時の速度だよね。コンパイルが遅いってことじゃないよね。 だとすると8の倍数のbit数のCPUでint<8×N>型を使ってもタイムロスって起きない気がするんだけど……。 : デフォルトの名無しさん (アウアウカー Sa87-rBFN) [sage] 2018/11/25(日) 21:05:52.83:6ChQfOQca メモリに詰めて格納してると嫌な感じ : デフォルトの名無しさん (アウアウカー Sa87-ZX3B) [] 2018/11/26(月) 06:54:36.44:xHCVYRaTa そういうのはSSE命令とか使うXMMレジスタ使う話。 Intelコンパイラでも無いとアセンブラの話。 単純に上位ビットを0で埋める。(分遅くなる) ただ、CPUアーキテクチャにも依存する。 95年当時はpentiumは32ビットCPUだが16ビットの方が速く、pentiumU以降で32ビットの方が速くなった。 Core2は32ビットが速く、64ビットは遅く、Core iから64ビットの方が速くなった。 (ハードレベルでも、ただ実装しただけと、最適化したのとある) : デフォルトの名無しさん (スフッ Sd1f-TETZ) [] 2018/11/26(月) 14:44:44.56:00kzfg0Id encode.exe PGM 形式の画像ファイルを入力に与え,Run Length 法によって圧縮したデータを出力す る decode.exe encode.exe で圧縮したデータを入力に与え,PGM 形式の画像ファイルを出力する。 これをc言語で書くにはどうすればいいですか? osはUnix開発環境はMSYS2です。 : デフォルトの名無しさん (アークセー Sx47-4vBw) [sage] 2018/11/26(月) 15:15:00.32:t9INuUY1x ランレングスと画像フォーマットは何ら関係ないよ。 てかもしかしてランレングスのコードそのものを教えてもらうつもり? 学校の課題は自分でやりな。 : デフォルトの名無しさん (スフッ Sd1f-TETZ) [] 2018/11/26(月) 15:19:44.48:00kzfg0Id コードはかけたのですがエラーが出ないのに圧縮するとデータサイズが大きくなるはずなのに小さくなります。それがわからないです。 : デフォルトの名無しさん (アークセー Sx47-4vBw) [sage] 2018/11/26(月) 15:25:50.47:t9INuUY1x 私はあなたの言ってることが分からないです。 : デフォルトの名無しさん (アウアウウー Sa27-ml8p) [] 2018/11/26(月) 15:27:58.32:mDHVgMsLa 元のファイルと出来上がったファイルの中身を16進ダンプしたりして調べれば良いのでは? それとプログラムもよーく読み直してみな。 : デフォルトの名無しさん (アークセー Sx47-4vBw) [sage] 2018/11/26(月) 15:36:52.43:t9INuUY1x 圧縮したらデータサイズが小さくなったって悩んでるんだよね? 自分で何言ってるか分かってる?? 布団も圧縮したら小さくなるぜ。 : デフォルトの名無しさん (アウアウウー Sa27-ml8p) [] 2018/11/26(月) 15:44:04.38:mDHVgMsLa Run Length は連続データが少ないと大きくなる事があるからその辺は特に不思議はない。 : デフォルトの名無しさん (アウアウカー Sa87-rBFN) [sage] 2018/11/26(月) 15:45:34.47:n96xVY2na でかくなる様なデータで確かめる課題かね? ちょっとそのまんま見てみたいね : デフォルトの名無しさん (アークセー Sx47-4vBw) [sage] 2018/11/26(月) 15:47:36.67:t9INuUY1x ああ、単純な実装なら確かにそうね。 : デフォルトの名無しさん (ワッチョイ 63b3-jnO+) [sage] 2018/11/26(月) 18:55:01.13:XECRUPoh0 PGMのランレングスは何かしら工夫してんのかな (行単位で生列とRLを切り替えできるとか? 連続性の強い色空間を選択してるとか?) : デフォルトの名無しさん (ワッチョイ 63b3-jnO+) [sage] 2018/11/26(月) 19:58:24.72:XECRUPoh0 あー ちゃんと読んでなかった 189 は無しで : デフォルトの名無しさん (ワッチョイ c380-1YVs) [] 2018/11/26(月) 22:38:09.76:404pxOU70 0バイトのデータを圧縮すると間違いなく大きくなる : デフォルトの名無しさん (ワッチョイ cf81-zhOP) [sage] 2018/11/26(月) 22:54:04.60:9UWiUoMZ0 虚数空間にデータを書き移すから、さらに小さくなる、かも : デフォルトの名無しさん (ワッチョイ 63b3-jnO+) [sage] 2018/11/26(月) 22:58:35.51:XECRUPoh0 ホログラフィーみたいに3次元情報?が2次元に畳み込まれてなんて話ではないんだろう : デフォルトの名無しさん (アウアウウー Sa27-rBFN) [sage] 2018/11/26(月) 23:10:34.44:4Tpz9uQJa 単に乱数とかね : デフォルトの名無しさん (ワッチョイ cf81-zhOP) [sage] 2018/11/26(月) 23:21:21.04:9UWiUoMZ0 任意のデータをその半分に出来る圧縮技法、誰か考えて : デフォルトの名無しさん (ワッチョイ 33ab-kvwJ) [sage] 2018/11/27(火) 00:17:38.39:sRUlwxGC0 SERNをハックしてLHCでマイクロブラックホールを作ってどうたらこうたらするとかなり圧縮できるよ : デフォルトの名無しさん (ブーイモ MMff-X8Q6) [sage] 2018/11/27(火) 00:21:47.09:E9za3JrpM 綴りを間違えるとホワイトホールができちゃうかもしれんぞ : デフォルトの名無しさん (ワッチョイ cf81-zhOP) [sage] 2018/11/27(火) 00:22:04.16:ugyzpzqZ0 圧縮は出来ても、復元が出来なさそうw : デフォルトの名無しさん (ワッチョイ c364-m15j) [sage] 2018/11/27(火) 01:23:33.76:UHpiRGCo0 マジレスすると情報っていうのは消失しないと考えられているので BH表面にエネルギー運動量テンソルの波動として,飲み込まれた物質郡の属性 (電荷など)が記録される……筈w 少なくとも現状の場の量子論と重力宇宙論ではそういう結論が出てる。 C言語とは関係ないけど,BHを記憶装置として用いるっていう考えは 突拍子もないけど理論的には可能だよねぇ,上記の理屈が正しいとすると。 : デフォルトの名無しさん (ワッチョイ 6f9f-KQkZ) [] 2018/11/27(火) 01:29:33.86:IxTjeZ9T0 みんなが何を言っているのかよくわからない : デフォルトの名無しさん (ワッチョイ 7ff9-/93F) [sage] 2018/11/27(火) 02:18:13.33:enNfKuoe0 C言語でok : デフォルトの名無しさん (ワッチョイ 6f9b-nNS8) [sage] 2018/11/27(火) 22:26:43.87:/aKqcH8H0 例えば100bitの長さのデータは全部で2^100種類作ることができる 50bitの長さのデータは全部で2^50種類作ることができる 任意のデータを半分に圧縮できる方法があるとして 100bitで作れる2^100種類のデータをすべて圧縮したなら 50bitの長さで2^100種類の異なるデータができなくてはいけないがそれは不可能 : デフォルトの名無しさん (ワッチョイ 6f9f-zhOP) [] 2018/11/28(水) 01:13:46.19:BkKDQWNJ0 いやいや、ちょっと待て。ここは発想の転換が必要だ。例えば8インチのフロッピーディスクから3.5インチの いや、なんでもない。みんなには内緒にしておいてくれ。 : デフォルトの名無しさん (ワッチョイ ff2b-pqc8) [sage] 2018/11/28(水) 02:27:03.19:iOF+GVq50 「任意の」データを半分に圧縮できるとすると 圧縮した後のデータもさらに半分に圧縮できるはず そうやって圧縮を繰り返せば最後には全てのデータは1ビットになる よってそのような圧縮法がないことは明らか 可逆でないならそれでもいいかw : デフォルトの名無しさん (ワッチョイ c364-m15j) [sage] 2018/11/28(水) 05:46:42.41:N04UITTm0 しかしソースコードとかって圧縮率高いよね。 やっぱり同じような文字が続いたりインデントに空白文字が続いたりするからだろうか。 : デフォルトの名無しさん (アウアウウー Sa27-9MLK) [sage] 2018/11/28(水) 07:08:14.21:82iiMHmWa コルモゴロフの複雑性もあります : デフォルトの名無しさん (ワッチョイ ffd2-f63u) [] 2018/11/28(水) 09:24:07.52:seMAmMUm0 そこでTHCompですよ : デフォルトの名無しさん (ワッチョイ e3ea-jnO+) [sage] 2018/11/28(水) 09:40:55.66:0XeeIlyH0 情報のエントロピー : デフォルトの名無しさん (アウアウクー MM47-Zoqv) [sage] 2018/11/28(水) 13:43:56.99:rECr01ZDM 今から趣味でプログラミング始めます!激励してください!! : デフォルトの名無しさん (ワッチョイ c364-m15j) [sage] 2018/11/28(水) 17:27:07.00:N04UITTm0 悪いこと言わないからPython3やれ : デフォルトの名無しさん (ブーイモ MMe7-X8Q6) [sage] 2018/11/28(水) 17:57:49.24:Vqd4vFOqM 趣味で初プログラミングなら、俺からもpythonを勧める。 GUIが手軽だとモチベーション違うよ。 : デフォルトの名無しさん (アウアウクー MM47-Zoqv) [sage] 2018/11/28(水) 18:00:54.28:rECr01ZDM 分かった!いやよくわかんないけどそっちから始める! XCodeでできるかな、ありがとう! : デフォルトの名無しさん (ワッチョイ c364-m15j) [sage] 2018/11/28(水) 18:48:28.91:N04UITTm0 $ brew install python とやって $ python これで起動する。もうスレチだし「macOS Python3」とかでググれ。 : デフォルトの名無しさん (アウアウウー Sa27-ml8p) [] 2018/11/28(水) 19:51:31.92:wHjpMIAFa Kotlinもよろしく : デフォルトの名無しさん (ブーイモ MMe7-X8Q6) [sage] 2018/11/28(水) 20:05:07.50:Vqd4vFOqM まだマイナーすぎ。入門書があふれてきたら推すよ : デフォルトの名無しさん (アウアウウー Sa27-/Yu/) [sage] 2018/11/28(水) 22:31:15.42:xsmtECg3a ttps://bituse.info/c/kadai/44 上記のサイトなどを参考に 簡単な九九の表を作ると 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15... ... ... (略) このようになると思いますが、 隣の数字を参照にして足して 3 5 7 9 11 13 15 17 6 10 14 18 22 26 30 34 9 15 21 27 33... ... ... (略) と、表示するには上記のサイトの様なプログラムをどのようにすれば良いのでしょうか? 宜しくお願いします。 : デフォルトの名無しさん (ワッチョイ 034f-1YVs) [sage] 2018/11/28(水) 22:37:30.42:IOIePrN/0 死ね : デフォルトの名無しさん (ワッチョイ 63b3-jnO+) [sage] 2018/11/28(水) 23:13:58.25:MBR3DrMT0 puts("3 5 7 9 11 13 15 17\n"); puts("6 10 14 18 22 26 30 34\n"); puts("9 15 21 27 33...\n"); : デフォルトの名無しさん (ササクッテロ Sp47-FLrG) [sage] 2018/11/28(水) 23:24:49.65:30WXuBf5p puts は改行するので、文字列の末尾に \n を付けると2回改行することになる : デフォルトの名無しさん (ワッチョイ 63b3-jnO+) [sage] 2018/11/28(水) 23:26:32.45:MBR3DrMT0 あっー 指摘ありがと : デフォルトの名無しさん (アウアウオー Sa92-LBlS) [sage] 2018/11/29(木) 02:39:17.93:d0mF96D3a #include <stdio.h> int main(void){ int i, j, k, n, m; n = 0; m = 0; for (i = 1; i <= 9; i++){ n += 3; m += 2; k = n; printf("%3d", k); for (j = 1; j <= 9; j++){ k = k + m; printf(" %3d", k); } printf("\n"); } return 0; } : デフォルトの名無しさん (ワッチョイ 0bb3-C0zt) [] 2018/11/29(木) 04:25:22.53:+QhJBOyD0 int main() { char *ary[] = { "AAAA" , "BBBB" , "CCCC" }; printf("%s\n%s\n%s\n" , ary[0], ary[1], ary[2]); printf("%x\n%x\n%x\n" , ary[0] , ary[1] , ary[2]); printf("%x\n%x\n%x\n" , &ary[0] , &ary[1] , &ary[2]); return 0; } 実行結果 AAAA BBBB CCCC 405064 405069 40506e 61ff24 61ff28 61ff2c っていうのでよくわからなくなったんですが 0061FF24==00405064で00405064==41414141 なのに、同じary[n]で参照?してるアドレスが違うのは%sが特別だからですか? それと、AAAA,BBBB,CCCCはどの変数にも格納されていなくて、ただポインタがその文字列たちを指しているっていう理解であってます? *がよくわからない・・・・・ : デフォルトの名無しさん (ワッチョイ 0bb3-C0zt) [] 2018/11/29(木) 04:37:33.83:+QhJBOyD0 ああ直接ポインタを作っててそれで変数がある必要もないのかな? AAAA,BBBB,CCCCを普通に配列で作って、それを1つのポインタでオフセットを指定して選ぶ。みたいなのってCでできるんですか? : デフォルトの名無しさん (ワッチョイ a7c3-o5Pc) [sage] 2018/11/29(木) 05:10:38.21:ljP5qN1x0 any[]には各文字列のアドレスが格納される。文字列へのポインターの配列。 %sはポインターが指すアドレスの文字列を、%xはポインターに格納されたアドレスを表示する。 &any[]とすると、ポインターそのもののアドレスを取得して表示する。 61ff24 -> 405064 -> "AAAA" みたいになってる。 : デフォルトの名無しさん (ワッチョイ a7c3-o5Pc) [sage] 2018/11/29(木) 05:25:57.02:ljP5qN1x0 一つのポインターでオフセットを指定することはできるけど、 "AAAA"はAAAAの4byteではなくて、文字列の終端である0を含めた5byteになる。 char *any = "AAAABBBBCCCC"; こういうイメージで+4や+8でアクセスしようとしたら %sで表示したとき意図する結果にならないかもしれない。 文字列として扱わなければ問題ないです。 char *any = "AAAA\0BBBB\0CCCC"; こんな書き方もできますが、*を理解したほうがよいと思います。 アドレスやオフセットの概念は理解しているようですので。 : デフォルトの名無しさん (ワッチョイ 2393-abuG) [sage] 2018/11/29(木) 07:00:11.93:f12HiZt90 の実行結果を解釈すると... 文字列 "AAAA" "BBBB" "CCCC" の実体は 0x405064 から格納されていて、 16進ダンプだと 0x405064: 41 41 41 41 00 ; {'A', 'A', 'A', 'A', '\0'} 0x405069: 42 42 42 42 00 ; {'B', 'B', 'B', 'B', '\0'} 0x40506e: 43 43 43 43 00 ; {'C', 'C', 'C', 'C', '\0'} という具合に(アラインメントのためのパディングなしに)詰め込まれている。 行分けせずに 0x405064: 41 41 41 41 00 42 42 42 42 00 43 43 43 43 00 と書けば「詰め込む」のイメージが分かりやすいかも。 charへのポインタの配列 ary[] は 0x61ff24 から配置されていて 番地: 0x61ff24 == &ary[0], 値: 0x00405064 == ary[0] (== "AAAA"の先頭番地) 番地: 0x61ff28 == &ary[1], 値: 0x00405069 == ary[1] (== "BBBB"の先頭番地) 番地: 0x61ff2c == &ary[2], 値: 0x0040506e == ary[2] (== "CCCC"の先頭番地) これで分からんかな。 ポインタが指す実体(文字列)の番地、その(文字列の)番地が格納された配列の値、 (値としてポインタが格納された)配列要素の番地。 : デフォルトの名無しさん (ワッチョイ db64-VZvV) [sage] 2018/11/29(木) 09:05:40.33:Msn7clch0 どうでもいいけど略すならaryじゃなくて,arrでは。 : デフォルトの名無しさん (アークセー Sx3b-Gcmv) [sage] 2018/11/29(木) 09:24:21.59:b4PauqdMx aryもまれによく見る。 : デフォルトの名無しさん (ワッチョイ 0bb3-C0zt) [] 2018/11/29(木) 12:11:40.55:+QhJBOyD0 ありがとうございます。 読んでみてなんとなくは理解できるようになりました NULLのことはすっかり忘れてました *を理解できるように頑張ります、ご丁寧にありがとうございました。 : デフォルトの名無しさん (ワッチョイ 4e80-gjgg) [sage] 2018/11/29(木) 16:00:56.19:Pq9K3tWa0 Ruby で作った NUMBERS = ( 1..5 ).to_a Count = NUMBERS.length # 九九の表、Times Table ( Multiplication table ) を作る。 # map は1次元配列を作るので、each_slice で、2次元配列にする Multiplication_table = NUMBERS.product( NUMBERS ).map { | x, y | x * y } .each_slice( Count ).to_a result = [ ] Multiplication_table.each do | ary | # 1行ずつ処理する result.push ary.each_cons( 2 ).map { | x, y | x + y } # 隣同士を足す end p result 結果 [[3, 5, 7, 9], [6, 10, 14, 18], [9, 15, 21, 27], [12, 20, 28, 36], [15, 25, 35, 45]] : デフォルトの名無しさん (アメ MMff-egAi) [sage] 2018/11/29(木) 16:15:48.88:qd4rCcG0M Rubyすげぇ〜!!! ttp://https://gigazine.net/news/20181116-top-programming-languages-2018/ ttp://https://www.softantenna.com/wp/software/the-state-of-the-octoverse-2018/ ttp://https://www.softantenna.com/wp/software/ieee-spectrum-top-programming-languages-2018/ ttp://https://findy-code.io/engineer-lab/github-programming-language-ranking 大人気Ruby! Ruby大人気!! : デフォルトの名無しさん (ワッチョイ db64-VZvV) [sage] 2018/11/29(木) 16:20:18.55:Msn7clch0 やめてさしあげろw まあ擁護するなら人気のありなしで言語の優劣は測れないと思うけどね。 IOなんてドマイナーだけど俺は好きだし,素晴しい言語だと思っている。 なおRuby : デフォルトの名無しさん (ワッチョイ a7c3-o5Pc) [sage] 2018/11/29(木) 18:14:40.72:ljP5qN1x0 (´-`).oO(aryだったのね……) : デフォルトの名無しさん (ワッチョイ db64-VZvV) [sage] 2018/11/29(木) 18:49:51.71:Msn7clch0 いやarrやろ(しつこい) : デフォルトの名無しさん (アウアウウー Sa47-2q9Y) [] 2018/11/29(木) 19:09:36.82:8tueZiBHa array : デフォルトの名無しさん (ワッチョイ 0bb3-Gcmv) [sage] 2018/11/29(木) 19:12:17.70:sIB7nB920 いいやaryもまれによく見る。 俺は省略せずarray派だが。 : デフォルトの名無しさん (ワッチョイ db64-VZvV) [sage] 2018/11/29(木) 19:19:19.48:Msn7clch0 まあarrayくらい省略するなって話よな creatじゃないんだからw : デフォルトの名無しさん (アウアウウー Sa47-2q9Y) [] 2018/11/29(木) 19:46:28.81:8tueZiBHa 「まれによく見る」とは? : デフォルトの名無しさん (ワッチョイ 83b3-YERU) [sage] 2018/11/29(木) 19:51:20.93:lt3dDpp60 総体としての頻度は稀だが、とある人の書いたソースには悉く ary として書かれており、 その書いた人というスコープ内においては良く見る : デフォルトの名無しさん (ワッチョイ 0bb3-Gcmv) [sage] 2018/11/29(木) 19:53:37.10:sIB7nB920 weblio辞書より まれによくある 別表記:稀によくある、稀に良くある 起こり得る事柄を形容して用いられることのある言い回し。 滑稽な表現であるが、あからさまな形容矛盾であり、日本語としては意味をなさない。 「ブロント語」として広まったインターネットスラング。 「まれによくある」の語のニュアンスは、使用者や使用場面によって異なるといえるが、 「頻繁に起こるとも言えるし、めったに起きないとも言える」といった意味合いだったり、「特定の人においてはよくあるが、その他の人には起こらない」といった意味合いだったり、あるいは、いわゆる「あるあるネタ」を指していたりする。 : デフォルトの名無しさん (ワッチョイ 0bb3-C0zt) [] 2018/11/29(木) 20:38:21.77:+QhJBOyD0 ちなみにのやつは入門サイトにあったやつを少しいじったやつです : デフォルトの名無しさん (アウアウウー Sa47-gzl5) [sage] 2018/11/29(木) 21:38:47.98:FncUCYw3a スッキリわかるC言語と苦しんで覚えるC言語 どちらで勉強するか迷ってるんですがどっちがいいと思いますか? : ◆QZaw55cn4c (ワッチョイ ba60-4R1R) [sage] 2018/11/29(木) 22:00:55.64:yDZ234lo0 >スッキリわかるC言語 胡散臭いです… >苦しんで覚えるC言語 正直で好感を持てる題名ですね : デフォルトの名無しさん (ワッチョイ baf9-+PYh) [sage] 2018/11/29(木) 22:01:35.59:kX/wXhND0 立ち読みして自分にとって説明が理解しやすいと思った方を選んだら? : デフォルトの名無しさん (ワッチョイ 0bb3-C0zt) [] 2018/11/29(木) 22:30:54.22:+QhJBOyD0 苦CのほうはWebにサイトがあるのでそっちを見ては? : デフォルトの名無しさん (アウアウウー Sa47-gzl5) [sage] 2018/11/29(木) 22:40:45.52:FncUCYw3a まだ新しいスッキリわかるC言語をベースにウェブで分からない時に苦しーも見る方針に決めました 皆さんありがとうございます : デフォルトの名無しさん (ワッチョイ 2b4f-y69T) [sage] 2018/11/29(木) 22:48:01.10:TPe/tu+/0 IDEを使ってメモリウインドウからの内容を納得いくまで確認しろ。 > AAAA,BBBB,CCCCを普通に配列で作って、それを1つのポインタでオフセットを指定して選ぶ。みたいなのってCでできるんですか? それを222で君がやっているように見えるが。 書き方が気に入らないのなら、以下でも多分行ける。 for (int i=0;i<3;i++) printf("%s", *(ary+i)); 他言語とは文字列の扱いが異なる。Cの方がより原始的で、はっきり言って使いにくい。 他言語:文字は長さ1の文字列 C言語:文字はcharで、文字列はcharの配列 ただ、char周りなんてどうせ大して使わないから飛ばしていい。さらに言うと、 > AAAA,BBBB,CCCCを普通に配列で作って、それを1つのポインタでオフセットを指定して選ぶ。 なんてのはbotとかでも作るわけでなければ使わない。 printfべた書きで大体事足りる。 : デフォルトの名無しさん (ワッチョイ 0bb3-C0zt) [] 2018/11/29(木) 23:07:20.28:+QhJBOyD0 一応プロセスメモリエディタとか使いながらやってたんですよ、それでも混乱するので聞きました。 多言語はやったことないのでよくわかりませんが、高級言語のよくわからずに使う感じが苦手なので、むしろ原始的なのは好きです。 > AAAA,BBBB,CCCCを普通に配列で作って、それを1つのポインタでオフセットを指定して選ぶ。 っていうのがbotを作るうえで必要というのは初めて知りましたが、botは作りたいと思ってました。 : デフォルトの名無しさん (ワッチョイ 2b4f-y69T) [sage] 2018/11/30(金) 00:06:17.84:tn7d6mNM0 > プロセスメモリエディタ なんじゃそりゃ?と思ってみてみたが、どっちかというとハッキングツールだな。 マジな話、IDE使え。個人開発レベルの糞ツールとは次元が違うから。 俺はVSがいいと思うが。 言い忘れてたが当然return文にブレークポイントを当てて止めて見るんだよ。 というか他に何言語やってるんだ? > AAAA,BBBB,CCCCを普通に配列で作って、それを1つのポインタでオフセットを指定して選ぶ。 これは全くの初心者の発想ではないはず。 明らかに他言語ではこう書ける、これをCでやりたい、というように読めるが。 > っていうのがbotを作るうえで必要というのは初めて知りましたが というか、文字列を配列に持って切換ながら使う=それらの文字列は同列に扱うべき、 という使い方をすることがほぼ無いんだよ。他の言語でも、アプリでも。 大体文字列なんてリテラルでその場で使って終わり、が殆どだ。 それ以前に、charを主として使うアプリ(bot含む)をCでやろうというのも間違いだが。 char出力は結局UIであって、どうせI/Oで引っかかるから、Cの優位性(速度)が生かせない。 そして原始的な分、生産性自体は悪いから、そのデメリットだけ受けてしまう。 AIbotとかで演算部分に相当速度が必要でない限り、スクリプト言語で作った方がいいと思うぞ。 この意味で、Cでの文字出力はほぼログ生成でしかなく、 だからこそ貧弱なライブラリでも間に合ってる訳だが。 > 高級言語のよくわからずに使う感じが苦手 いやこれは違う。 「余計なことを考えなくて済む」という意味で後発言語はよく出来てるんだよ。 まあこれはじきに分かるだろうさ。 : デフォルトの名無しさん (ワッチョイ 6a80-6Zjp) [sage] 2018/11/30(金) 01:05:40.46:qUT8id4/0 void君は相変わらずだな : デフォルトの名無しさん (ワッチョイ 0bb3-C0zt) [] 2018/11/30(金) 01:14:13.61:dHzryZqK0 プログラミングというより解析系に興味があっていろいろ調べてただけです。 Cのこともプログラミングのこともまだ全然わからないです : デフォルトの名無しさん (ワッチョイ db64-VZvV) [sage] 2018/11/30(金) 01:40:17.87:ZZJKHSVT0 puts()関数とかの「s」ってストリングのsなんだね。 今までずっとputの三単現だと思ってたわw : デフォルトの名無しさん (ワッチョイ 4e80-gjgg) [sage] 2018/11/30(金) 08:28:07.36:VjmtC3o00 スッキリJava は、250ページにも及ぶ、猿向けにオブジェクト指向を解説した、伝説の書。 単純な言語の文法書ではない 前半はフレームワークを使う人の立場で、後半はフレームワークを作る人の立場での解説。 だから初心者は、後半を読まなくてもよい 苦しんでC は、手順書。 14歳以下とか、中学生に教えるたぐいの本。手順を教えるだけ。 たいていのAndroid アプリの本と同じ なぜ、こういうデザインパターンをするのかとか、概念の説明などはない。 漏れは、2時間で読める。 理解して考える要素がないから、ライトノベルと同じ : デフォルトの名無しさん (ワッチョイ ff7b-egAi) [sage] 2018/11/30(金) 08:32:59.05:xQIq6Uyn0 理解して考える脳の無いRuby厨であった : 253 (ワッチョイ 4e80-gjgg) [sage] 2018/11/30(金) 08:36:47.97:VjmtC3o00 例えば、WEB+DB 106号の「実践 Android/iOS アプリ設計」を読んでみ DI, MVVM, Flux とか、なぜこういうデザインパターンを使うのか、 自分で理解して考えないといけないから、こういう概念の話は難しい デザインパターンを参考にして、Ruby などでいじくり回すのが、最も身につく。 ポインターのバグ取りに、時間を取られないし : デフォルトの名無しさん (アウアウウー Sa47-7zod) [sage] 2018/11/30(金) 09:22:30.92:KWzr3gbka DIって外部の設定を使いましょうって話なんですか? : デフォルトの名無しさん (アウアウウー Sa47-gzl5) [sage] 2018/11/30(金) 09:39:20.17:vcs52++Va スッキリわかるC言語はパズドラ作りながらC言語が学べるみたいです : 253 (ワッチョイ 4e80-gjgg) [sage] 2018/11/30(金) 10:35:00.21:VjmtC3o00 DI は、C++ の、p-impl パターン。 外部から、後に作られる、依存性を注入する class A { new B(引数); } class A { b = 構築メソッド } 上のように、クラスA 内で、直接B を作らず、 構築メソッドで、Bインスタンスを作る 例えば、クラスBの引数の変更が、クラスAに及ばないように、疎結合にしている。 クラスA・Bの作者が、同一でない場合に、効果が大きい 間接的に、Duck Typing, Interface を使う事で、インターフェース・構築メソッドが固定されるが、 同じ構築メソッドを使うことで、似たようなクラスを扱いやすい : デフォルトの名無しさん (ワッチョイ a79f-C0zt) [] 2018/11/30(金) 14:03:17.31:wR5wJL4H0 苦Cから入ったけどつまずいて1年くらい何も触らなかったおもひで : デフォルトの名無しさん (ワッチョイ 0ed6-C0zt) [sage] 2018/11/30(金) 16:07:52.38:cYaYTjx50 何もわからんうちからえり好みしないでK&R これですんなり入れることが適性試験 : デフォルトの名無しさん (JP 0H63-X2R9) [sage] 2018/11/30(金) 17:16:53.52:fQi4U1HQH ループとか条件分岐とか関数とかは別言語で十分習得したという前提でならそれでよい。 : デフォルトの名無しさん (ワッチョイ a79f-C0zt) [] 2018/11/30(金) 17:20:44.30:wR5wJL4H0 アセンブラの入門かじった程度でもイメージはつかめるしCで躓くことはかなり減ると思う : デフォルトの名無しさん (ワッチョイ 0ed6-C0zt) [sage] 2018/11/30(金) 18:19:25.99:cYaYTjx50 俺はサブルーチンが関数な言語を1つも知らずにK&Rで憶えた 強いて言うならBASICのUSR関数くらいか : デフォルトの名無しさん (アウアウウー Sa47-2q9Y) [] 2018/11/30(金) 18:33:32.23:vx8Iixcxa BASICの全てグローバル変数だとか行番号に苦しんでいた時に徐々にMS-DOSでCが使える状態になってきて、PC-98でMS-DOSが使えるようになり、TurboCとかも出て俺は救われた。 しかしその後UNIX関係の仕事になったのでCができて当たり前の環境になってしまった。 : デフォルトの名無しさん (ワッチョイ 0e30-C0zt) [sage] 2018/11/30(金) 19:07:15.02:m3TSK4YL0 大学でunixでCをやるようになってvim系の操作が気持ち悪かったからノリで大学を辞めた 人生で最悪の選択をしてしまった : デフォルトの名無しさん (バットンキン MM77-Gcmv) [sage] 2018/11/30(金) 19:17:21.91:9hh85ykUM BASICならGOSUBだろ。 : デフォルトの名無しさん (ワッチョイ 0ed6-C0zt) [sage] 2018/11/30(金) 21:49:44.97:cYaYTjx50 GOSUBが、どのように関数なんだ? : デフォルトの名無しさん (ワッチョイ 4e81-C0zt) [sage] 2018/11/30(金) 22:03:56.69:5CDqtXe60 関数と言えるのは、DEF FN かな? : ◆QZaw55cn4c (ワッチョイ ba60-4R1R) [sage] 2018/11/30(金) 23:31:23.55:MkfLpznc0 >スッキリJava は、250ページにも及ぶ、猿向けにオブジェクト指向を解説した、伝説の書。 私が知りたいのはスッキリC++(そんなものが存在するのですか?限りなく胡散臭いですね)の話です : ◆QZaw55cn4c (ワッチョイ ba60-4R1R) [sage] 2018/11/30(金) 23:33:27.03:MkfLpznc0 おっしゃることがよくわからないので、ちょっと書いていただけますか? ttp://http://ideone.com : デフォルトの名無しさん (ワッチョイ b3af-C0zt) [] 2018/11/30(金) 23:34:56.47:PIchVJHi0 #define C Java : ◆QZaw55cn4c (ワッチョイ ba60-4R1R) [sage] 2018/11/30(金) 23:50:06.20:MkfLpznc0 下準備にはPEEK/POKEも重要 私は CALL で呼んでいた記憶がありますが、もしかするとNとN88とN88(86)とでは違っていたかもしれません… : デフォルトの名無しさん (ワッチョイ 0bb3-C0zt) [sage] 2018/12/01(土) 07:43:03.30:7EJdQB2R0 PC6001でBASICを覚えてPLAY,SOUNDで音楽作ってたな PSGの音を聞くだけで懐かしい気分になる そしてMSXでMSX-Cを覚えた cursesがあったからローグもどきのゲーム作って遊んでたよ : デフォルトの名無しさん (ワッチョイ 1761-o5Pc) [sage] 2018/12/01(土) 07:47:36.67:+NY+xI8A0 サブルーチンって用語はもう消えた? : デフォルトの名無しさん (ワッチョイ 9ab3-TLTW) [sage] 2018/12/01(土) 09:16:07.78:4Hoi4/y50 C言語以降関数と手続きを区別しない言語が増えたこととOOPでは一部がメソッドと呼ばれるようになったので使用頻度は下がったな なくなってはいないけど : デフォルトの名無しさん (ワッチョイ 2393-abuG) [sage] 2018/12/01(土) 09:27:06.02:TOuK5lWF0 関数と手続きを総称して、「メインルーチン」に対して「サブルーチン」って 言い方なら今でも使うんじゃないかな。 プログラミング教育の初期の段階での説明。 BASICでの「サブルーチン」は言語仕様での用語だっけ? : デフォルトの名無しさん (ワッチョイ bebe-lzSb) [sage] 2018/12/01(土) 09:27:25.60:piawvWud0 サブルーチンと関数って違うのか(無知) : ◆QZaw55cn4c (ワッチョイ ba60-4R1R) [sage] 2018/12/01(土) 09:55:16.44:J8cQMvWo0 GOSUB 命令がありました : デフォルトの名無しさん (アウアウウー Sa47-7zod) [sage] 2018/12/01(土) 10:14:48.66:/TQ/ikyba ラベルはなかったね : デフォルトの名無しさん (ワッチョイ b78a-+5zm) [sage] 2018/12/01(土) 10:27:11.17:tI2T+oTI0 処理をまとめたのがサブルーチンで 値を返すのが関数…とかなんかあった気がする : デフォルトの名無しさん (ワッチョイ bebe-lzSb) [sage] 2018/12/01(土) 16:05:57.68:piawvWud0 その定義だとvoid func(void) はサブルーチンになるな ちょっと難癖っぽいけどw : デフォルトの名無しさん (ワッチョイ 0bb3-C0zt) [] 2018/12/01(土) 16:11:09.57:oMoZEV7I0 アセンブラだと値返していようがいまいがサブルーチンっていうよね 今曖昧だってことは元々曖昧だったのかな : デフォルトの名無しさん (ワッチョイ e3f2-r3MB) [sage] 2018/12/01(土) 16:42:04.42:mW7z3f7A0 もともとは呼び出しがステートメントであって返値というものが存在しないサブルーチンと、 値を返して式の一部となる関数という区別だね。 式+;が文になるという単純化を行ったCではその区別もなくなってそれが主流になった。 副作用のないものが関数、ありえるのがサブルーチン、と定義を変えて復活はあるかも。 : デフォルトの名無しさん (ワッチョイ 4e81-C0zt) [sage] 2018/12/01(土) 16:58:01.89:6zv/O1Bm0 void以外は関数って事だな : デフォルトの名無しさん (ワッチョイ 0bb3-Gcmv) [sage] 2018/12/01(土) 17:11:46.73:FtOkB0gI0 言語(VBとか)によっては明確な違いがあったりするけど、概念的にはサブルーチン⊃関数というイメージあるわ。 : デフォルトの名無しさん (ササクッテロレ Sp3b-4pMt) [sage] 2018/12/01(土) 18:36:37.73:qSa8BGaMp 副作用のある手続きをほんとは関数とは呼ばないのだろうけど Cではそんなことに頓着せず全て関数に単純化したからね ただ本来サブルーチンとはメインルーチンと対立する文脈で語られていたものかと これは単なる呼び出し関係だけでなく、古い言語では変数のスコープなども異なる Cではこれも単純化してしまった main は単にスタートアップルーチンから最初に呼び出されるという以外は 特別なスコープを持つわけでもなく、他の関数と何ら違いがない 他の関数から main を呼ぶことも、普通やらないだけで問題なく可能だ Cでサブルーチンという名前がしっくりこないのはこの辺が理由でもあるかと : デフォルトの名無しさん (ワッチョイ e3f2-r3MB) [sage] 2018/12/01(土) 19:00:11.99:mW7z3f7A0 ああ、関数と対比されるのはサブルーチンじゃなくて正しくはプロシージャ(手続き)だね。 : デフォルトの名無しさん (ササクッテロレ Sp3b-4pMt) [sage] 2018/12/01(土) 19:53:46.70:qSa8BGaMp そうだけと、その辺の用語も統一されてるとは言い難いところがあるよ AdaなどのPascal系の言語ではprocedureとfunctionという区別があるよね まぁ値を返すかどうかという違いでしかないわけだけど VBではPascalのprocedureに相当するのはSubであって、SubとFunctionをまとめた 上位概念としてプロシージャと言うからね : デフォルトの名無しさん (ワッチョイ bebe-lzSb) [sage] 2018/12/01(土) 21:37:27.03:piawvWud0 mainが特別扱いされてると言えばOSが受け取れる返り値は0--255なのにint型を指定するってところとかかな。 : デフォルトの名無しさん (ワッチョイ 769f-C0zt) [sage] 2018/12/01(土) 22:24:12.87:3EVAE8120 Perl ではサブルーチンは sub で始まる。これはCの関数のようにも使える。 : デフォルトの名無しさん (ワッチョイ 2b4f-y69T) [sage] 2018/12/01(土) 22:38:01.02:VxENaYkZ0 > 副作用のある手続きをほんとは関数とは呼ばないのだろうけど > Cではそんなことに頓着せず全て関数に単純化したからね 逆だぞ。関数型が馬鹿やったから「副作用」なんて言葉が必要になったのであって。 元々Cの関数は副作用がない。これは単純に、Cの場合は引数で渡すしかないからだ。 (当たり前だがグローバルは使わないとする) だからC全盛の時代には「副作用」なんて言っている奴すら居なかった。 関数型の連中が副作用(キリッとか気にする必要がでてきたのは、クロージャを濫用したからだ。 単純に言えば、関数に対しての値の渡し方は、 ・引数 ・グローバル ・this(OOPの)(=インスタンス内グローバル) ・クロージャ(=レキシカルスコープの場合は階層内グローバル) とあって、クロージャは使い方を間違えば結合を強めてしまうんだよ。 (thisの場合は最初からクラス界面で切る《=public/privateを意識して設計する》 からそこまで酷くはならない) Cはそれがないから、便利に書けない反面、無駄に結合するって事もない。 (少なくとも、結合していることは明示的に見える) 伊達に50年近く現役な訳でもないのさ。現役で居続けられた理由がある。 AdaとかPascalとか、最早死んで誰も使わないし使う価値もない言語を持ち出しても、 何の意味も無いと思うぜ。 それらが死んだのは、それなりの理由があるんだよ。 : デフォルトの名無しさん (ワッチョイ 4e81-C0zt) [sage] 2018/12/01(土) 22:43:10.84:6zv/O1Bm0 ねえねえ、Fortranは? : デフォルトの名無しさん (アメ MMff-egAi) [sage] 2018/12/01(土) 22:58:40.52:fkjVwInMM なんだCの関数には副作用なかったのか。これで安心してprintfできる : デフォルトの名無しさん (ワッチョイ bebe-lzSb) [sage] 2018/12/01(土) 23:00:40.61:piawvWud0 Cに副作用の概念はないって……それは流石に嘘でしょう。 箇所は失念してしまったがK&Rにも関数を指して「文字列を出力したりする場合もあるので純粋な関数とは呼べない」 みたいな記述あるくらいだし。 : デフォルトの名無しさん (ブーイモ MMff-6Zjp) [sage] 2018/12/01(土) 23:07:56.71:8rj5PksfM void君は今日も平常運転 : デフォルトの名無しさん (ワッチョイ 2b4f-y69T) [sage] 2018/12/01(土) 23:11:44.86:VxENaYkZ0 副作用の概念はあるに決まってるだろ。 そもそもプログラミング自体が副作用を伴うものであって、 全てを含んだ「学術的な意味での副作用」を伴わないプログラムなんて、何もやらないプログラムだからだ。 それすら理解出来ないなんてただの馬鹿だ。 そうではなくて、関数型()の連中が言っている意味での「副作用の無い関数」についてなら、 Cは全ての関数が該当する、ということだよ。 だから、「副作用(キリッ」する必要すらなかったって事だよ。 試しに関数型()の連中に、「クロージャ禁止、this禁止、グローバル禁止、全て引数で渡せ」と言ってみろよ。 多分、顔が引きつると思うぜ。 : デフォルトの名無しさん (アウアウウー Sa47-7zod) [sage] 2018/12/01(土) 23:56:03.97:C49O7CpGa 引数voidって初めて見たぞ : デフォルトの名無しさん (ワッチョイ bebe-lzSb) [sage] 2018/12/02(日) 00:31:53.73:jISJOvCb0 void君人気っすね。羨し…くはないなw : デフォルトの名無しさん (ワッチョイ 4e81-C0zt) [sage] 2018/12/02(日) 00:39:59.56:qwr+Mk5T0 秋田 : デフォルトの名無しさん (ワッチョイ 2b4f-y69T) [sage] 2018/12/02(日) 00:45:19.85:Bx+z5yQP0 まあそれがゆとりが嫌われる理由なんだけどな。 お前も含めて自覚がないのが救いようがない。 お前ら、もう既に老害になってると思うぜ。 : デフォルトの名無しさん (ワッチョイ ff05-ZETi) [sage] 2018/12/02(日) 00:53:05.03:+Qh0SqlG0 よく分からん捨て台詞だな : デフォルトの名無しさん (ワッチョイ 769f-C0zt) [] 2018/12/02(日) 00:55:37.62:twRH93OM0 ttp://https://ja.wikipedia.org/wiki/%E3%82%86%E3%81%A8%E3%82%8A%E4%B8%96%E4%BB%A3#%E5%AE%9A%E7%BE%A9%E3%83%BB%E7%AF%84%E5%9B%B2 ゆとり世代については明確な定義、範囲はなく諸説ある。 小中学校において2002年度施行(高等学校は2003年度)の学習指導要領による教育を受けた世代(1987年4月2日 - 2004年4月1日生まれ)。 小中学校において1980年度以降(高等学校は1982年度以降)の学習指導要領による教育を受けた世代。1966年度生まれ以降。 1966年度生まれ以降。 1966年度生まれ以降。 1966年度生まれ以降。 1966年度生まれ以降。 1966年度生まれ以降。 : デフォルトの名無しさん (ワッチョイ 2b4f-y69T) [sage] 2018/12/02(日) 01:01:50.46:Bx+z5yQP0 俺に言ってるのなら説明しても良いが、タダではやらん。 お前が説明に値するだけの頭があることを先に示せ。 具体的には、現状の議論について、何らかの進展があるレスをまずしろ。 : デフォルトの名無しさん (ワッチョイ 9a2b-lzSb) [sage] 2018/12/02(日) 01:23:06.59:26H0WWJ10 まず、副作用という言葉は C が生まれる前から使われていたし意識されていたことですよ Lisp をやってれば分かることだけど C 全盛時にCプログラマが副作用という言葉を使わなかったのは当然でしょうね C は副作用そのものであるノイマンアーキテクチャを素直に表現できる言語と 目されていたわけで (i++ とか)、それこそ最初はグローバル変数も使いまくりだったのでは また、引数で文字列を渡すにもポインタを使わざるを得ないので、それが破壊されることを 防ぐ手立てがなかった (今でもないか) 引数経由でなくても、ポインタが使えるということは、そこに任意のアドレスを設定でき、 任意の場所に書き込めるということなので、C の関数で副作用を防ぐ手立てはないわけですよ C 界隈で副作用うんぬんが取り沙汰されるようになったのは const 引数の導入や、 グローバル変数の弊害が意識されるようになって、むしろ民度が上がってきたと見るべきかと あと、Oracle のストアドプロシジャ PL/SQL をやったことはないですか あの文法は Ada そのものなんだけど : ◆QZaw55cn4c (ワッチョイ ba60-4R1R) [sage] 2018/12/02(日) 01:24:03.02:xpb/M8Xl0 1966以前と1966以後では教育内容で変化があったのですか?数学に関する限り一時期は線形代数も微積分もやる、という過剰な状況だったと思っています : デフォルトの名無しさん (ワッチョイ a7c3-lF2n) [] 2018/12/02(日) 01:41:19.09:1UGGVPSQ0 オラクル社の第一言語は、Ada言語を借用したPL/SQLだぞ。 C言語が例外処理機能を受け入れなかったのは完全な失敗。 : デフォルトの名無しさん (ワッチョイ a7c3-lF2n) [] 2018/12/02(日) 01:45:35.26:1UGGVPSQ0 そうですよね。いま働いている日本人のほとんどはゆとり教育です。 ただ昔は教科書に載っているだけでまともに教えていないと思います。 学年トップレベルだったという年配の多くが義務教育の範囲さえ、完全に忘れているか、知らなかったりします。 : デフォルトの名無しさん (ワッチョイ 2b4f-y69T) [sage] 2018/12/02(日) 01:46:50.51:Bx+z5yQP0 > 引数経由でなくても、ポインタが使えるということは、そこに任意のアドレスを設定でき、 > 任意の場所に書き込めるということなので、C の関数で副作用を防ぐ手立てはないわけですよ それは「副作用」ではなく「バグ」と言うんだよJava以外では。 その他諸々色々勘違いするのは自由だが、 さすがにそれだと話が通じなさすぎて煙たがられてるだろ。 > あと、Oracle のストアドプロシジャ PL/SQL をやったことはないですか > あの文法は Ada そのものなんだけど 無いね。 ただ、Oracleがそうなら、Ada文法がまだ生き続けていることにはなる。この点は訂正しよう。 とはいえ、それが「参考にする意味があるか」とは別だよ。 本当に意味がある物は、「オブジェクト指向」や「クロージャ」のように、 ほぼ全ての言語でサポートされる事になる。 現状、procedure/function/Subを区別してない言語がメジャーで、 区別した言語(Ada/Pascal/VB)はことごとくマイナーだし、 最近のクロージャのようにC#/C++/Java等のメジャー言語が 相次いで方針を変更してサポートした、ということもない。 それは不要だった、ということで結論は出てる。 それを反例と持ち出してきても意味がないだろ。 : デフォルトの名無しさん (ワッチョイ bebe-lzSb) [sage] 2018/12/02(日) 01:48:13.42:jISJOvCb0 老害がブチ切れてて草 変ったのは世の中じゃなくてお前の脳味噌やぞ老いぼれ : デフォルトの名無しさん (ワッチョイ 2b4f-y69T) [sage] 2018/12/02(日) 01:50:31.40:Bx+z5yQP0 > 小中学校において1980年度以降(高等学校は1982年度以降)の学習指導要領による教育を受けた世代。1966年度生まれ以降。 そういうことをするからゆとりは駄目なんだよ。 : デフォルトの名無しさん (ワッチョイ 2b4f-y69T) [sage] 2018/12/02(日) 01:55:27.80:Bx+z5yQP0 Oracleについては308の通り。 例外についてはCで採用しなかったのはとりあえずは正解だろ。 未だに各言語で例外方式が安定しないのは、未だにいい解を見つけられてない、ってことだよ。 : デフォルトの名無しさん (ワッチョイ 769f-C0zt) [] 2018/12/02(日) 02:36:57.19:twRH93OM0 自分がゆとりであることに気付かずにだからゆとりはと言い出すやつばかり。 それが今の時代。 : デフォルトの名無しさん (ワッチョイ e3f2-r3MB) [sage] 2018/12/02(日) 07:38:01.21:3j0ioh6B0 >(当たり前だがグローバルは使わないとする) 副作用について議論するうえでこんな変な条件付ける人はいない。 あと当然だが、引数によって参照される関数スコープ外の値を変化させるのも副作用だ。 : デフォルトの名無しさん (ワッチョイ 2b4f-y69T) [sage] 2018/12/02(日) 10:14:19.71:Bx+z5yQP0 > こんな変な条件付ける人はいない 君がグローバルを普段から濫用している人だとは理解した。 > あと当然だが、引数によって参照される関数スコープ外の値を変化させるのも副作用だ。 勿論。 というか、まともに議論する気があるのなら、明確に条件を確定させなければならない。 何も言わないのなら、C言語での『標準的な』コーディングを各自が想定することになる。 君が普段からグローバルを濫用しているのは理解したが、それは俺の『標準』ではないし、 君みたいな馬鹿が出てきて無駄に議論が空回りするのが嫌だから、俺は明示的にそれを除外した。 そしてこの条件付けは『標準的』であり、問題ないと俺は考えている。 君がグローバルを含めて副作用を議論したいのならそうすればいい。 俺はその議論には意味が無いと思うから参加はしない。 君の言うように、俺は「参照透過」は以下の2種類に分けて考えるべきだと思っている。 ・狭義の参照透過…sin()等 ・広義の参照透過…qsort()等やthis ・参照透過でない…その他全部、つまりクロージャやbindやグローバルを用いるもの 通常の文脈で言われる『副作用』はおそらく関数型()言語から来ている。 それは上記「参照透過でない」物を濫用した結果だ。 Cの場合は最初からそれが出来ないから、その議論が発生することはなかっただけ。 それとは別に、意識高い系関数型()の「『狭義の参照透過』だけでプログラミングすべき」、 というのは当たってはいるが、実際の所それは多値を返せないと厳しい。 そして多値返しよりも参照を返してそこからアクセスしろ、というのがメインストリームの言語だろ。 それの方が楽だから。 : デフォルトの名無しさん (ワッチョイ 9a33-o5Pc) [sage] 2018/12/02(日) 10:48:22.22:3LBO8TR+0 少なくともCにおける「副作用」はずっと昔からの規格で定義されている用語だから、 独自定義で話されるのは困る。 ttp://http://kikakurui.com/x3/X3010-2003-01.html#13 > ボラタイルオブジェクトへのアクセス,オブジェクトの変更,ファイルの変更, > 又はこれらのいずれかの操作を行う関数の呼出しは,すべて副作用(side effect)と呼び, > 実行環境の状態に変化を生じる。... : デフォルトの名無しさん (ワッチョイ 2b4f-y69T) [sage] 2018/12/02(日) 11:25:56.48:Bx+z5yQP0 FPUのフラグか。なるほどそれは正しい『副』作用だ。 というか、『副』作用というからには当然「作用」(『主』作用)と対比されるべきで、 「printfが副作用」()というのはHaskellの定義だからな。 スレチというのはごもっとも。 : デフォルトの名無しさん (ワッチョイ 0bb3-C0zt) [] 2018/12/02(日) 12:58:23.54:mXB0v2zh0 C言語使う人ってアドレスって言ったほうがわかりやすい場合でもポインタっていうよね ポインタの意味が多くて混乱する : デフォルトの名無しさん (ワッチョイ 4e80-gjgg) [sage] 2018/12/02(日) 14:18:51.99:uIlAasYL0 副作用は、volatile とか、何かの状態を変えること 関数型のmonad とか、 Vuex, Nuxt.js みたいに、1方向のライフサイクルを作って、 状態は、Mutation からしか変えられないとか どこかのタイミングに、絶対に変化していない、ポイントを作る WEB+DB 106号に載っている、Flux。 状態管理のデザインパターン、単一方向のデータフロー : デフォルトの名無しさん (ブーイモ MMba-ZETi) [sage] 2018/12/02(日) 20:00:19.47:nNQIp+BOM なんだまたvoid君の無知っぷりが露呈したのか : デフォルトの名無しさん (ワッチョイ 4e61-45aa) [] 2018/12/03(月) 06:04:46.06:9nl14toh0 C言語はファイルポインターを配列を指すようにして同じように扱うことはできませんよね。 それなので同じように扱うにはファイルポインターと配列のラッパーを自分で作らなければいけませんよね。 : デフォルトの名無しさん (ワッチョイ 5fe0-fbyJ) [sage] 2018/12/03(月) 06:13:41.09:MMlQh9qb0 mmapやfmemopenを調べてみ : デフォルトの名無しさん (ワッチョイ 4e61-45aa) [sage] 2018/12/03(月) 06:53:46.78:9nl14toh0 調べたらわかりました ありがとうございます : デフォルトの名無しさん (アウアウウー Sa47-7zod) [sage] 2018/12/03(月) 10:00:18.38:KLYQbJ33a fmemopenって何に使うと便利なの? : デフォルトの名無しさん (ワッチョイ 9a9f-0gpL) [sage] 2018/12/03(月) 10:10:02.85:98KtjA3l0 なんだこれ?引数 void って初めて見たぞ。文法的にありなのかこれ? : デフォルトの名無しさん (アウアウウー Sa47-2q9Y) [] 2018/12/03(月) 10:44:00.29:7ySpxLkda FILE * 経由の入力や出力をするように書かれているプログラムで使うと便利な場合があると思う。 : デフォルトの名無しさん (ワッチョイ 0e3f-C0zt) [] 2018/12/03(月) 12:19:30.10:dfidJp1A0 晒しage : デフォルトの名無しさん (アウアウウー Sa47-2q9Y) [] 2018/12/03(月) 12:27:39.88:7ySpxLkda それはC言語を知らない初心者が前スレだったかで残した名言 : デフォルトの名無しさん (ワッチョイ 0e3f-C0zt) [sage] 2018/12/03(月) 13:14:41.09:dfidJp1A0 長文の連投で得意がってるあいつな : デフォルトの名無しさん (ブーイモ MMba-6Zjp) [sage] 2018/12/03(月) 13:29:26.35:UG3pz1BhM プロセスメモリエディタも初めて見たり副作用を知らなかったりする彼ね : デフォルトの名無しさん (ワッチョイ 4e80-gjgg) [sage] 2018/12/03(月) 14:06:18.11:xHLM582p0 Ruby には、StringIO と言う、メモリ上だけに存在する仮想ファイルがある。 これは、IO クラスの派生クラスではなく、 文字列クラスに、IO にある関数をDuck Typing したもの(インターフェース) StringIOインスタンス.read, puts など、ファイル操作と同名の関数を使える テストの際に、本当のファイルを作らなくても、 メモリ上だけでファイルの振りができるので、楽 : デフォルトの名無しさん (アメ MMff-egAi) [sage] 2018/12/03(月) 14:31:36.79:+OGeTNm4M へぇーっ!メモリ上だけに存在する仮想ファイル?Rubyすごぉ〜い! 特許取った方がいいんじゃない? ノーベル賞狙えるかもー!? : デフォルトの名無しさん (アウアウウー Sa47-7zod) [sage] 2018/12/03(月) 14:38:57.12:KLYQbJ33a 単体テストで使った様な気もしてきた でもまあストリームは難しいわ。fopenよりopenが好きだよ : デフォルトの名無しさん (アウアウウー Sa47-2q9Y) [] 2018/12/03(月) 16:07:39.69:7ySpxLkda ノーベル仮装ファイル賞 : デフォルトの名無しさん (ワッチョイ 0e3f-C0zt) [sage] 2018/12/03(月) 17:24:12.07:dfidJp1A0 C++にもstringstreamがあって メモリ内でファイルイメージが作れる しかもcin, cout, ifstream, ofstreamの メンバ関数・フレンドが全て使える : デフォルトの名無しさん (アメ MMff-egAi) [sage] 2018/12/03(月) 18:30:35.22:+OGeTNm4M なぁんだRubyパクリだったのか。ダッサ。 パクリRuby! : デフォルトの名無しさん (ドコグロ MM92-TLTW) [sage] 2018/12/03(月) 19:19:41.79:OHB3X56LM このスレの初心者乙 : デフォルトの名無しさん (ワッチョイ 2b4f-y69T) [sage] 2018/12/03(月) 21:56:42.64:r8O+Z3hZ0 プロセスメモリエディタを知ってる=Cを知ってる、になるのか。 さすがゆとり、だな。 お前らはそんなことばかりするから、お前らの居場所を無くして行ってるんだぜ。 自覚出来てないんだろうけど。 まあ、ゆとりに付ける薬はないって事だな。 三つ子の魂百まで、と同様、ゆとりの魂百まで、なのだろう。 : デフォルトの名無しさん (ワッチョイ db64-VZvV) [sage] 2018/12/04(火) 00:25:16.59:VVlGsdy50 void君怒りのポエム : デフォルトの名無しさん (ワッチョイ 769f-C0zt) [] 2018/12/04(火) 22:17:29.21:YeiHZFGw0 彼は自分がゆとりであることに気付かない。超ゆとりである。 : デフォルトの名無しさん (ワッチョイ 9164-5svG) [sage] 2018/12/06(木) 08:22:58.33:cC0kDT7D0 勉強始めて半年くらいの初学者だけどenumの便利さに今日気が付いて震えてる case文がシェルスクリプトとかのと比べてあんなに使いにくいものになってるのはそういうことだったのね……。 : デフォルトの名無しさん (アウアウウー Sa05-u1Zc) [sage] 2018/12/06(木) 09:11:25.93:mp97/YFka なんにせよまあswitch/caseはあんまり使わない方がいいですよ。 : デフォルトの名無しさん (ワッチョイ ab3f-n9Ol) [sage] 2018/12/06(木) 10:46:35.55:y2fvjog80 なんで? : デフォルトの名無しさん (アウアウウー Sa05-u1Zc) [sage] 2018/12/06(木) 11:06:46.21:mp97/YFka クソコードに発展しやすいんです。 if文の方がちゃんとしてる。 : デフォルトの名無しさん (ブーイモ MMab-nAVI) [sage] 2018/12/06(木) 11:09:04.26:qlBG7toFM 偏見だしアホとしか思えん : デフォルトの名無しさん (アークセー Sxcd-EBCi) [sage] 2018/12/06(木) 12:09:10.95:uFg4otuRx switchは単一の変数(大抵は状態)を比較してることが一目瞭然。 case内が長くなって醜いのは全く別の問題。 : デフォルトの名無しさん (アウアウウー Sa05-MnXc) [] 2018/12/06(木) 12:25:09.83:nzH90qpKa まあ今となってはコンパイラが軽く最適化してくれれば全く同じコードになってしまうかも知れず、どちらで書くかは見易さの問題だけかも知れない。 ま、switchはbreakなしで下に抜けるっていうifとの違いがあるからそれ利用してたら別だけどな。 : デフォルトの名無しさん (ワッチョイ b3eb-u+MK) [sage] 2018/12/06(木) 14:08:22.67:CZHWXsyR0 switch〜caseで、char 値の比較の場合、昔のコンパイラでも最適化した時、 条件分岐じゃなくて、テーブルジャンプにしてくれるものがあったなあ。 最近のコンパイラが if〜else if〜 で記述した時、どう最適化してくれるのかは知らない。 : デフォルトの名無しさん (アウアウカー Sa9d-u1Zc) [sage] 2018/12/06(木) 14:36:37.49:LNgus+SNa 文法に罪はない人が悪いと言って終わるならば、もうなんでもありで良いんです。 C++の方が選択肢が多い分圧倒的に優れてるとも言える。 : デフォルトの名無しさん (アウアウカー Sa9d-u1Zc) [sage] 2018/12/06(木) 14:39:02.58:LNgus+SNa 自分的にアホだと思う書き方はcaseの中身を{}でくくっちゃうやつです。 そんなことするなら関数呼べや。 : デフォルトの名無しさん (バットンキン MM75-EBCi) [sage] 2018/12/06(木) 14:59:28.18:dlLKQRwlM case文内に関数にするほどでもない、ちょっとした処理を書きたいとき、その処理内だけで使う変数宣言は{}使ってその中に書いちゃうわ。 : デフォルトの名無しさん (アウアウウー Sa05-MnXc) [] 2018/12/06(木) 15:27:35.39:nzH90qpKa そういやswitchのブロックの先頭でも変数宣言できるんだよな。 今はどこでもできるから関係ないとは思うが昔は驚いた。 : デフォルトの名無しさん (ワッチョイ 9164-5svG) [sage] 2018/12/06(木) 17:17:12.54:cC0kDT7D0 地味に都合の良いスコープ範囲だから便利っちゃ便利だよね。 : デフォルトの名無しさん (アウアウウー Sa05-u1Zc) [sage] 2018/12/06(木) 17:23:21.26:8Uba5j5za たとえば、caseではクロージャ的なもんが使えて、関数ポインタに代入。 抜けた後でそれを実行、とかできるのなら許容するかも。 : デフォルトの名無しさん (アウアウウー Sa05-MnXc) [] 2018/12/06(木) 18:06:57.01:nzH90qpKa それは普通にできるのでは? : デフォルトの名無しさん (ドコグロ MMb3-KUw8) [sage] 2018/12/06(木) 18:53:53.96:VHVkoIH2M 宣言どころか文法的には実行文も書ける もちろんまともなプログラマはそんなクソコードは書かない ttp://https://www.jpcert.or.jp/sc-rules/c-dcl41-c.html : デフォルトの名無しさん (アメ MMb5-FdCK) [sage] 2018/12/06(木) 19:39:02.33:rq0vzYZsM 初期化されないのかよ。 最初から禁止にしといてくれや… : デフォルトの名無しさん (アウアウウー Sa05-u1Zc) [sage] 2018/12/06(木) 20:21:33.67:2HZFttMva いや、クロージャ無いじゃん。 あってもいいと思うけど。 : デフォルトの名無しさん (アウアウウー Sa05-MnXc) [] 2018/12/06(木) 20:25:38.15:nzH90qpKa のようなもの : デフォルトの名無しさん (ワッチョイ 31b3-EBCi) [sage] 2018/12/06(木) 20:45:48.14:TUEVaed40 構文やや変数キャプチャの問題はさておき、関数ポインタは原始的なクロージャっぽく使えるよね。 こんなん書いたらクロージャ原理主義者が反論しそうだけど。 : デフォルトの名無しさん (アウアウウー Sa05-MnXc) [] 2018/12/06(木) 20:49:35.87:nzH90qpKa 苦労者 : デフォルトの名無しさん (ワッチョイ 4b23-u1Zc) [sage] 2018/12/06(木) 21:11:52.76:qetyDFhY0 GNU拡張だと関数の中で関数定義できたっけ。 : デフォルトの名無しさん (スププ Sdb3-BEmb) [sage] 2018/12/06(木) 22:27:01.40:RVfmRZI1d C言語勉強してます。 エラーにOBJが開けませんってでるんだけど、どうしたらいいか教えてください。 コンパイラーはbcpadです : デフォルトの名無しさん (ワッチョイ db9f-ZeM3) [] 2018/12/07(金) 02:34:07.16:4kVuFzeP0 bcpadって、懐かしい響きだな。 古すぎてなにか特別な理由がない限り使われなくなってるようなものだと思うんだが、なんでそれ使って勉強しようと思った? : デフォルトの名無しさん (スププ Sdb3-BEmb) [sage] 2018/12/07(金) 20:07:09.75:S1fEuKj1d 授業で使ったからこれでいいかなーって感じ、これといった理由ないです笑 最近はどんなコンパイラーが主流なんです? : デフォルトの名無しさん (ワッチョイ 31b3-EBCi) [sage] 2018/12/07(金) 20:26:20.52:RTzoABIk0 Lattice C : デフォルトの名無しさん (アウアウウー Sa05-/enL) [] 2018/12/07(金) 20:32:40.15:F84vPdIda MSのVisual Stdioに入ってるVC++か、gcc か、clangだね。 bcpad使った事ないけど、それで使えるbccも地味に生き残ってて進化してた。 (久しぶりに見に行ったらフリーのは最新じゃないけど、地味に進化してた) エンバカデロがまだインプレス(買収される前)だったり、ボーランド(社名変更前)だったりしてた時代のbccコンパイラ環境設定記事がまんま使えるはず。 : デフォルトの名無しさん (アウアウウー Sa05-MnXc) [] 2018/12/07(金) 20:55:30.39:qRyaIDL9a LinuxまたはWindowsのWSLのUbuntu等やCygwinの中でもgccが動く。Macでも中はUNIXなので動く。 : デフォルトの名無しさん (ワッチョイ 899e-ZtDu) [] 2018/12/07(金) 21:34:48.53:0/x3pMw+0 windowsならmsvc unix、unixクローンならgcc コレで十分 windowsでいちいちgccでコンパイルする必要なんかない たまに確認に使う程度 : デフォルトの名無しさん (ワッチョイ 2b81-n9Ol) [sage] 2018/12/07(金) 21:58:04.56:b95DkfHn0 Windowsでネイティブに動かせるGCCもあるし、 無理してVC使わなくても良いと思う : デフォルトの名無しさん (スププ Sdb3-BEmb) [sage] 2018/12/07(金) 22:33:44.42:S1fEuKj1d 今調べたらけっこうあるんだな、、 これのここがダメ!とかここが強み!とかあったら教えて欲しい🙏 : デフォルトの名無しさん (アウアウウー Sa05-/enL) [] 2018/12/08(土) 02:14:28.50:5PBkTMHJa Winならmsvc(VC++)かなぁ。。。速いしVS入れれば個人用途に限りMFC(MSのC++ライブラリ)付きで無料で使える。 ただ、最新のC/C++への対応状況は多分一番対応が悪い。 つい先月見た限りでは、bccは地味に対応状況は良いので、Win32APIが付いてて最新のC/C++使いたいってのには一番環境整え易い。(setbccで一発) Linux/Unix系はclangかな。 gccにはconio.hが無い。(msvc、bcc、clangにはある) 最新のC/C++対応状況じゃclangとgccが2強だけど、Win用にWin32APIは最初から付いてたか分からない。 WinでGUIするのに情報少なかったから、最新のC/C++の勉強にしか使ってない。 : デフォルトの名無しさん (ワッチョイ db9f-n9Ol) [] 2018/12/08(土) 05:48:44.85:xmV4OmOO0 conio ライブラリの ncurses を使った Linux 用の互換ライブラリはあるよ(多分UNIX系OSならLinux以外でも動くような気がするが)。 ttp://https://ja.osdn.net/projects/sfnet_linux-conioh/ ていうか conio と curses ライブラリの両方が存在する状態になってから30年ぐらい経ってるので既に世界中で互換ライブラリは作られてると思う。 UNIX系OSでconioが標準的なものとして取り入れられない理由はもっと昔から curses や termios があって根付いていたからだと思う。 後から出てきた MS-DOS 画面専用ライブラリを組み込む気になる人はあまりいなかったんだろう。 : デフォルトの名無しさん (アウアウウー Sa05-/enL) [] 2018/12/08(土) 08:04:27.69:5PBkTMHJa 助かった。 昔読んだ入門書に環境依存と書いてたけど、互換ライブラリあるんだね。 getch関数地味に使うのよ。 調べたらバッファオフしてから普通のgetchar使ってるのか。 そのままLinux流を覚えても良いかな。 どっちにしても良い機会だった。 有り難う。 : デフォルトの名無しさん (ワッチョイ f14f-ZtDu) [sage] 2018/12/08(土) 10:14:50.43:+xxwdKok0 > WinでGUIするのに情報少なかったから、最新のC/C++の勉強にしか使ってない。 MFCなんて言ってるから少ないんだよ。それ、20年前の話だし。 MFC -> .NET(Forms) -> .NET(WPF) -> UWPか?もう一つくらい有った気もしたが。 『標準』への対応という意味では遅いけど、 そもそも標準が糞な所はMS独自拡張が行われているからそれなりには困らない。 最新のならC++11にはほぼ対応してたはずだし、「どれがいいですか?」なんて聞く奴には問題にならない。 まあ、お前らは最新の文法を使えることが腕前だと勘違いしているようだから、大問題なのだろうけど。 それも含めて自由にやればいいが。 Borland Builderは一時期Cをリードしたのは事実だが、今だに開発が継続されていたのは俺も今知ったレベル。 Borland信者でなければ普通は地雷扱いで使わない。 というか、win環境ならVS以外を考える意味がない。 無料でGUIのIDEなら第一選択肢がVSで、実際それで十分で終わり、のはず。 無駄なところで苦労したくなければ、とりあえずみんなが使ってる物を使っておけ。 : デフォルトの名無しさん (ワッチョイ 81f2-Po2/) [sage] 2018/12/08(土) 10:22:20.61:eB2yg23l0 C/C++でFormsやWPFなんて使えないんだからしょうがないじゃん。 : デフォルトの名無しさん (ワッチョイ f14f-ZtDu) [sage] 2018/12/08(土) 10:26:03.56:+xxwdKok0 普通の人やMSの定義なら「使える」わけだが。 まあどう見ても平行線だからもういいが。 : デフォルトの名無しさん (ワッチョイ 81f2-Po2/) [sage] 2018/12/08(土) 10:50:52.94:eB2yg23l0 C++/CLIでも持ち出す気か : デフォルトの名無しさん (ワッチョイ 99cb-n9Ol) [sage] 2018/12/08(土) 11:51:32.86:PBftE5qw0 bccって揃えやすいか? ダウンロードするのに個人的なことを根掘り葉掘り聞かれるのが たとえば俺なんかウゼーと思うが 対応状況が良いって、C++98だぜ? テンプレート実引数にメンバポインタを渡すとコケるあたり致命的だろ : デフォルトの名無しさん (ワッチョイ f14f-ZtDu) [sage] 2018/12/08(土) 12:13:07.40:+xxwdKok0 いやこっちだろ。一応ClangベースでC++11らしいぜ。 ttp://https://www.embarcadero.com/jp/free-tools/ccompiler Clang標準のGUI環境としてはありなのか? 或いはVSでgccやClangを動作させている奴もいるし、そっちの方がマシなのか? いずれにしても人柱物件だと思うぜ。勇者に期待だな。 : デフォルトの名無しさん (アウアウウー Sa05-u1Zc) [sage] 2018/12/08(土) 12:16:03.45:UjmNmcZda 最近はwindowsでもQt使ってくれみたいな話は多いですね : デフォルトの名無しさん (ワッチョイ f14f-ZtDu) [sage] 2018/12/08(土) 13:05:07.00:+xxwdKok0 一応訂正(補完)しておく。 × > Clang標準のGUI環境としてはありなのか? ○ Clang標準のGUI環境『のIDE』としてはありなのか? 今更CでGUIアプリを作る意味はないし、Qtも流行らないよ。 やれば分かるが、GUIに関しては今現在はHTML/CSS/JavaScriptが最強だ。 マジでそれ以前のGUIなんて全部ゴミ。 だから全部の環境がHTML/CSS/JavaScriptを追いかけているのではないかな。 WPFもGtkもまだCSS部分が出来てない。Qtも見た目その辺の感じ。 Qtはそもそも今時珍しく仕様を開示してない.。この辺が超絶イケてない。 (例:QMLのビデオを試しにみようとしたが目隠しが出る) : デフォルトの名無しさん (ワッチョイ 4905-4bn4) [sage] 2018/12/08(土) 15:03:57.91:AnxWbhvF0 そうか、じゃあwebglでも使うか。 : デフォルトの名無しさん (ワッチョイ 4905-4bn4) [sage] 2018/12/08(土) 15:27:14.56:AnxWbhvF0 あとQtはgpl/lgpl3でもライセンスされてるぞ?ドキュメントも公開されてる。 仕様を開示してないとかどこ見て言ってるんだよ : デフォルトの名無しさん (ワッチョイ f14f-ZtDu) [sage] 2018/12/08(土) 15:59:03.07:+xxwdKok0 WebGLはGUIではなくグラ(フィックス)だし、 それ主体ならMFCでも大して変わらないと思うが。 Canvas自体はむしろ旧インタフェースをHTML側に輸入したものだし。 ただ、GUIやるならマジでHTML/CSSのお手軽さは一度試した方がいい。 今のところ他プラットフォームも同様の場所を目指しているから、無駄にはならんし。 CanvasでGUIやる気なら、背景にjpg貼ったなんちゃって仕様のHTMLの方が楽だし、見た目だけなら同じに出来る。 もちろんCanvasの上や下にHTMLを重ねてそっちでイベントだけ取り扱うことも出来る。 これらは旧来のインタフェース(Forms等)でも出来るが、それ用に設計されてないからいろいろ話が面倒になる。 が、まあ、CでGUIアプリを作ろうとすること自体が若干間違いで、 ビュワー等大きなデータを扱う(=速度がそれなりに必要)でなければ、 60fpsさえ出れば何でもいいし、Cでやる意味はないよ。 他環境と比べての話だぞ。 以前ドキュメント探してもろくなのが無かったし、 今日チュートリアルビデオを見ようとしても登録しないと目隠しが出るし。 こんなのでQtが流行るわけがないね。考え方が15年以上遅れてる。 それでもQtと心中するのも自由だけど。 : デフォルトの名無しさん (ワッチョイ 4905-4bn4) [sage] 2018/12/08(土) 17:15:39.30:AnxWbhvF0 開示してないって断言してるじゃん。チュートリアルは仕様じゃないよ? 意見変えるならそう言ってよ。 : デフォルトの名無しさん (ワッチョイ f14f-ZtDu) [sage] 2018/12/08(土) 17:42:53.93:+xxwdKok0 変えてない。Qtはゴミだよ。 あれで公開していると思うのなら他フレームワーク等見てみろよ。 : デフォルトの名無しさん (ワッチョイ 4bbe-5svG) [sage] 2018/12/08(土) 18:40:20.20:hIfZgykd0 ほとんどC言語関係ないけどQtは最初,マルチプラットフォームで使えてC++バインディングが公式で提供されているっていう理由で かなーり期待したんだけどね……。結局今はGTK+に戻ってしまった。 : デフォルトの名無しさん (ワッチョイ 4bbe-5svG) [sage] 2018/12/09(日) 09:54:16.91:8tZnBeFG0 Cってほんとに実行速度が速いの? 他のコンパイル式の言語に速度で勝る理由が分からん。 インタプリタならともかく。 : デフォルトの名無しさん (ワッチョイ 9312-ZtDu) [sage] 2018/12/09(日) 11:07:31.14:dkLieERx0 ・C言語自体が単純で低水準、変換しやすい ・コンパイラの最適化とそこに投入された人月 というわけでC言語そのものじゃなくてコンパイラで生成された機械語が早い : デフォルトの名無しさん (ワッチョイ 2b61-KVvr) [] 2018/12/09(日) 15:36:30.25:e81YHx5p0 ttp://http://www.c-tipsref.com/reference/stdlib/div.html この辞典の作者はnumeratorを知らないらしいなwww : デフォルトの名無しさん (ワッチョイ 93bd-xVWz) [] 2018/12/09(日) 15:56:34.95:LXVWu9Mt0 よくもまあPL/SQLを知らないのに批判できるよな。 PL/SQLの例外処理はOracle DatabaseがSQL、ビルトインパッケージの結果をうまく例外として伝播してくれる。 あなたは単に例外を作り出す方の実装が悪いものを見ているだけ。 : デフォルトの名無しさん (ワッチョイ 93bd-xVWz) [] 2018/12/09(日) 15:58:53.53:LXVWu9Mt0 アドレスを指しているアドレスがポインタ。 ポインタが指しているアドレスにポインタがあるわけではない。 : デフォルトの名無しさん (ワッチョイ 93bd-xVWz) [] 2018/12/09(日) 16:03:51.04:LXVWu9Mt0 C言語は低水準言語であるから、うまくやれば速いマシン語になるが、ちょっとしたことでむしろ遅くなるマシン語を生みやすい。 アーキテクチャの知識がない場合は、誤解したアーキテクチャを想定したコードを書いてしまい、実行速度が遅いものができあがる。 : デフォルトの名無しさん (ワッチョイ 31b3-EBCi) [sage] 2018/12/09(日) 16:59:21.16:c1W3T6/y0 ん?? : デフォルトの名無しさん (ワッチョイ 9321-OBpN) [sage] 2018/12/09(日) 18:56:28.62:+IQ+xQud0 どうやら違う世界線から紛れ込んできたと見える なんでこういうcrazyなことを言う輩に限って自信満々に断言するんだ 謎 : デフォルトの名無しさん (ワッチョイ 13d4-n9Ol) [sage] 2018/12/10(月) 15:01:58.63:Yf20pj4f0 初心者です。 のレスを読んでちょっと混乱しているんですが、 C言語は高水準言語で、 ポインタ変数自体は「アドレスを格納できる4バイト?の変数」っていう認識で合っていますか? : デフォルトの名無しさん (アウアウエー Sa23-u1Zc) [sage] 2018/12/10(月) 15:10:08.76:FyPZmeq6a 何バイトかは決まっとらん。 サイズに注意出来るようになったらあなたは中級者。 : デフォルトの名無しさん (ワッチョイ 13d4-n9Ol) [sage] 2018/12/10(月) 15:44:39.90:Yf20pj4f0 あーそうか、 4byte(32bit)だと0x00000000から0xFFFFFFFFまでの?4294967296通りのアドレスが保存できるんですね。 なので処理系?によって変わるってことなんですね。 ありがとうございます。 : デフォルトの名無しさん (アウアウウー Sa05-MnXc) [] 2018/12/10(月) 15:58:27.14:4x6+51xya この頃の64bit環境だとアドレスも64bitだと思う。 クロスコンパイルする場合や意図的に32bit用のバイナリを作るようにコンパイルする場合を除く。 : デフォルトの名無しさん (ワッチョイ 0193-IW2Q) [sage] 2018/12/10(月) 16:54:58.91:o+toD3xT0 ポインタ変数のサイズは32bit幅、 ただしセグメント部16bitのオフセット部16bitで 有効な全範囲はトータルで20bit。 : デフォルトの名無しさん (ワッチョイ 2b81-n9Ol) [sage] 2018/12/10(月) 16:56:42.73:/sc6zE4j0 いつの時代の話だろう : デフォルトの名無しさん (ラクペッ MM7d-24dN) [sage] 2018/12/10(月) 17:03:42.11:Ezpzf515M プロテクトモード 何それ美味しいの? : デフォルトの名無しさん (JP 0Hdd-nAVI) [sage] 2018/12/10(月) 17:04:09.37:M7qQG5lGH やべー あの頃から35年も経ったのかよ 漠然と20数年かなとか思ってたよ : デフォルトの名無しさん (ワッチョイ 13d4-n9Ol) [sage] 2018/12/10(月) 17:16:13.17:Yf20pj4f0 一体何の話をしているんです!? 教えてくださいおじい・・・紳士さま。 : デフォルトの名無しさん (ワッチョイ 998a-Po2/) [sage] 2018/12/10(月) 17:33:22.27:OF068zeT0 16bitCPU時代のアドレスの話 : デフォルトの名無しさん (ワッチョイ 9312-ZtDu) [sage] 2018/12/10(月) 19:37:12.53:cqLRK3I00 映画タイタニックでも「near far wherever you are」と謳われているほどポインタは面倒 : ◆QZaw55cn4c (ワッチョイ 5360-460t) [sage] 2018/12/10(月) 20:20:50.73:NenbAhKQ0 …うまい でも near far とかもう通じないんじゃないかな? : デフォルトの名無しさん (アウアウウー Sa05-MnXc) [] 2018/12/10(月) 20:29:46.12:4x6+51xya 昔々、8086があったとさ。 めでたしめでたし。 終わり。 : デフォルトの名無しさん (アウアウウー Sa05-MnXc) [] 2018/12/10(月) 20:32:35.54:4x6+51xya 英語版 A long time ago,in a galaxy far,far away.... : デフォルトの名無しさん (アウアウウー Sa05-/enL) [] 2018/12/10(月) 23:14:07.07:l83Jt/Qga OSによる。 4バイトは8ビット(=1バイト)x4なので32ビット。 32ビットOSなら、それで正しい。 じゃあ16ビットOSや64ビットOSの場合は? : デフォルトの名無しさん (アウアウウー Sa05-/enL) [] 2018/12/10(月) 23:16:39.78:l83Jt/Qga セグメントは16ビット迄だよね〜。 : デフォルトの名無しさん (ワッチョイ f14f-ZtDu) [sage] 2018/12/10(月) 23:22:09.98:ADpwiSWg0 つPAE : デフォルトの名無しさん (アウアウウー Sa05-/enL) [] 2018/12/10(月) 23:38:01.37:l83Jt/Qga いあ、知ってるよ? でも今でも意味あるの? Athlon64にPCの64ビット化を先越された時代の、その苦し紛れの拡張。 64ビット標準だけで今後PCに乗り切れる時代は来ないであろうメモリ容量をサポートしてるのに。 (理論上の限界来る前に、製造技術上の限界が来る) Winはあえて制限してるが、時代とともに緩めるだけっしょ。 : デフォルトの名無しさん (アウアウクー MM4d-xVWz) [] 2018/12/10(月) 23:53:27.02:bJUChMIiM このスレッドは妄想コンピュータで話すやつが張り付いているね。昔は単純な話だったけどさ。 : デフォルトの名無しさん (ワッチョイ 2b81-n9Ol) [sage] 2018/12/11(火) 00:26:54.92:qpk98o5j0 8ビットがなつかしいね? : デフォルトの名無しさん (ワッチョイ 93b3-KUw8) [sage] 2018/12/11(火) 07:34:54.16:zUaOIyWC0 > 64ビット標準だけで今後PCに乗り切れる時代は来ないであろうメモリ容量をサポートしてるのに。 32ビットになった時にもそんな話をしてたな w : デフォルトの名無しさん (ワッチョイ 31b3-EBCi) [sage] 2018/12/11(火) 09:17:41.73:7sleUDEz0 プロセスルールの限界から実用的で物理的なメモリの上限はあるんだろうけど、何がどう進化するか分からないからねぇ。 単純に超多層化プロセスルールが一般化するかもしれないし、もしかするとクラウドRAMサービスとCPUアーキテクチャが融合してその限界突破なんて時代が来るかもしれん。 人間の創造力は無限と信じよう。 : デフォルトの名無しさん (ワッチョイ 2b81-n9Ol) [sage] 2018/12/11(火) 10:15:17.85:qpk98o5j0 4GBと言う上限は意外に早くたどり着いた 4K動画をオンメモリーで編集したいとなると 途端にぶつかる壁だな 次は誰がこの壁にたどり着くかな? : デフォルトの名無しさん (ワッチョイ dbf7-pji+) [sage] 2018/12/11(火) 12:57:57.93:ZRU2RXnk0 Visual Studio 2017のC/C++コンパイラってどこのフォルダに置いてあるんですか (もしくはファイル名、あるいは、商標名?) 調べても「VSに付属するVisual C++にC/C++コンパイラが同梱されている」程度の 情報しか出てこない・・・ そのコンパイラは何て名前でどこに置いてあるんだ・・・ : さまよえる蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ 31b3-BEmb) [sage] 2018/12/11(火) 13:14:43.83:CGbAPZXN0 スタートメニューのVSコマンドプロンプトを開いてみい。 : デフォルトの名無しさん (ワッチョイ dbf7-pji+) [] 2018/12/11(火) 13:42:28.53:ZRU2RXnk0 はい ********************************************************************** ** Visual Studio 2017 Developer Command Prompt v15.9.3 ** Copyright (c) 2017 Microsoft Corporation ********************************************************************** C:\Program Files (x86)\Microsoft Visual Studio\2017\Community : デフォルトの名無しさん (ワッチョイ dbf7-pji+) [] 2018/12/11(火) 13:48:36.76:ZRU2RXnk0 \Microsoft Visual Studio\2017\Community\VC の中を compiler で検索した結果 compiler.cpp ん・・・?これ? 実行ファイルじゃなくてソースファイル・・・? 分からない、もうダメだ(絶望) : デフォルトの名無しさん (ワッチョイ 01ea-fo8h) [sage] 2018/12/11(火) 13:51:50.68:rotYdjfa0 その昔は cl.exe に link.exe のフロントエンドで make は別途だったが今はどうなんだろう : さまよえる蟻人間 ◆T6xkBnTXz7B0 (スフッ Sdb3-BEmb) [sage] 2018/12/11(火) 13:55:01.02:1cpVaJ7Sd cl.exeとかcl64.exeなどの名であると思う。 : デフォルトの名無しさん (ワッチョイ dbf7-pji+) [] 2018/12/11(火) 14:00:29.46:ZRU2RXnk0 ありました!(なぜか4つも) というかcl.exeってコンパイラだったんですね コンパイラその他を呼ぶための媒介物かと思ってますた 感謝 : さまよえる蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ 31b3-BEmb) [sage] 2018/12/11(火) 14:18:43.44:CGbAPZXN0 最近はx64とかx86とかARMとかARM64とかいろんな環境があるから、コンパイラは複数必要になっている。 : デフォルトの名無しさん (ワッチョイ dbf7-pji+) [] 2018/12/11(火) 14:51:38.89:ZRU2RXnk0 >とかいろんな環境があるから、コンパイラは複数必要 なるほど 勉強になりました : デフォルトの名無しさん (アウアウクー MM4d-xVWz) [] 2018/12/11(火) 20:20:15.88:3ovMnnL0M CプログラマでいまのCPUを理解しているやつなんてごく僅か。わざわざC言語を作る必要がない。もっと高水準言語で作って、VMと優秀なコンパイラに任せた方がいい。 : デフォルトの名無しさん (ワッチョイ 13d4-n9Ol) [sage] 2018/12/11(火) 20:46:12.25:g9W94UvY0 初心者です。 ののレスを読んでちょっと混乱しているんですが、 >>いまのCPUを理解 というのがまず何を指しているのか分かりません。 パーソナルコンピュータに内蔵されているCPUでしょうか、炊飯器に内蔵されているCPUでしょうか。 >>C言語を作る必要が無い 作らなくてもすでに存在していると思うのですが、自作が必要なものなのでしょうか。 >>もっと高水準言語 C言語自体が高水準言語だと思うのですが、これ以上の高水準とはどういう基準なんでしょうか。 自然言語をコンパイルするとかでしょうか。 >>VMと優秀なコンパイラ VMというのはVirtualMachineの略でしょうか。VM上で動作するC言語というのがあるのですか? VMを動かすほどのリソースが無いようなマシン上では何を動かすのでしょうか。 優秀なコンパイラ、ということは Cのコンパイラは優秀ではないのでしょうか。 おじい・・・紳士のみなさま、ご教授お願いいたします。 : デフォルトの名無しさん (ワッチョイ 2b80-7TzT) [sage] 2018/12/11(火) 21:55:08.95:ihMfYHRY0 Windows でも、ファイル操作なら、Ruby ! 画面なしのツールなら、たいていのものは作れる ポインタで時間を浪費することもない : デフォルトの名無しさん (ワッチョイ f14f-ZtDu) [sage] 2018/12/11(火) 23:16:54.03:j8P28cRB0 嘘を嘘と(ry : さまよえる蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ 31b3-BEmb) [sage] 2018/12/11(火) 23:27:54.09:CGbAPZXN0 相手にするのが時間の無駄。悩む時間で基本情報とITパスポートの勉強するのがはるかにまし。 : さまよえる蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ 31b3-BEmb) [sage] 2018/12/11(火) 23:43:31.10:CGbAPZXN0 おじい、とか言って馬鹿にしちゃダメだよ。ワード、エクセルのエキスパートで、原子炉のタービンを設計するような「ものすごい人」も見てるんだからね。 : さまよえる蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ 31b3-BEmb) [sage] 2018/12/11(火) 23:50:36.12:CGbAPZXN0 あと補足だけど、30歳定年説は、人件費を削るための嘘だからね。 人不足の今時にこんなことを言ってるアホの取引先は排除すべし。 : さまよえる蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ 31b3-BEmb) [age] 2018/12/11(火) 23:59:29.31:CGbAPZXN0 今時ハードディスク使ってモニターと照明費を削るようなケチ臭い企業とは取り引きしません! : デフォルトの名無しさん (ワッチョイ 2b80-7TzT) [sage] 2018/12/12(水) 00:19:15.01:ysgUNYaF0 Code For Japan というイベント内でも、 PDF, Excel などの表示情報が入ったデータを、 エンジニア(住職)が供養する企画をやっているw : デフォルトの名無しさん (ワッチョイ e18a-Po2/) [sage] 2018/12/12(水) 06:43:02.35:MN/7vBAt0 >基本情報とITパスポートの勉強 何のことかと思って調べてみれば情報処理技術者試験のことか そう言えば昔に第一種と上級シスアドに合格してたこと思い出したわ : デフォルトの名無しさん (ワッチョイ 937f-xqdQ) [sage] 2018/12/12(水) 11:11:59.11:Fd1X4TAb0 マシン性能の限界を突破する為に、関数型プログラミングがある。 : デフォルトの名無しさん (ワッチョイ e18a-24dN) [sage] 2018/12/12(水) 11:23:33.13:MN/7vBAt0 関数型は抽象表現能力は高いが実行効率を追求する様な用途向きではないぞ 生産効率も圏論などの数学的思考に慣れていないと下手すればOOPよりも悪化する可能性が高い : デフォルトの名無しさん (アウアウウー Sa05-MnXc) [] 2018/12/12(水) 12:19:40.64:XAdiQzbba ( ´_ゝ`)フーン : デフォルトの名無しさん (ドコグロ MMa3-KUw8) [sage] 2018/12/12(水) 12:31:12.08:4PEjGm8GM それ以前にマシン性能を言語で突破できたらノーベル賞ものかと w : デフォルトの名無しさん (ワッチョイ 2b61-KVvr) [sage] 2018/12/12(水) 12:38:27.52:b75HkCZx0 CPUは関数型言語を直接実行するようにできてないから遅いでしょ。 : デフォルトの名無しさん (ワッチョイ 2b81-n9Ol) [sage] 2018/12/12(水) 12:42:36.11:x/hCtcVY0 フォースとともにあれ : デフォルトの名無しさん (アークセー Sxcd-EBCi) [sage] 2018/12/12(水) 12:55:07.41:AGB/ZeXIx CPUの限界を超えれる関数型言語上で関数型言語を作れば元の関数型言語の限界を突破できる。 その作った関数型言語上でまたry んなわけねーよw : デフォルトの名無しさん (アウアウウー Sa05-MnXc) [] 2018/12/12(水) 13:11:22.57:XAdiQzbba SFのスレはここですか? : デフォルトの名無しさん (ワッチョイ 91d2-3M3s) [] 2018/12/12(水) 13:12:45.03:5HIThNOt0 【平和を実現するために】 武器調達の中止、格差拡大の抑止、労働移民の禁止、国政からのバカウヨ排除 ttp://rosie.5ch.net/test/read.cgi/liveplus/1544586377/l50 : デフォルトの名無しさん (ワッチョイ 9312-ZtDu) [sage] 2018/12/12(水) 13:15:11.92:SHf/dQVX0 関数型プログラミングはλ計算の時点で全く理想的だから 有限のアドレッシングで動いてる今のCPUには全くそぐわない だから関数型と今のCPUアーキテクチャは根柢から反りが合わないんじゃねえかと すると関数型の書法を現状の機械語に書き直すだけでロスが出てくる 理想的なモンを劣化させてるに等しいが技術上はそうするしかない そもそも関数型を直接実行できるようなCPUを人類が作れるかどうか 無限の再帰と無限のストリームが必要になっている時点で怪しい : デフォルトの名無しさん (アウアウウー Sa05-/enL) [] 2018/12/12(水) 13:25:42.01:LIx8RHBsa 昔どっかがLisp用にスタックコンピュータだか何だか作ってなかったっけ。 それはともかく、関数型言語でも結局どういうマシン語に落とすかだから、最適化技術で高速化は出来るはずなんだがな。 Cは低水準な操作も出来るから速いコード書けるとはいえ、素直なコードは最適化無しだと他の言語と変わらないし、 速度で言えば別に低水準な操作出来る訳でも無いFortranはC並みに速いわけで。 最適化への技術や時間の掛け方が違うってだけ。 : デフォルトの名無しさん (ワッチョイ 9312-ZtDu) [sage] 2018/12/12(水) 13:28:27.57:SHf/dQVX0 シンボリクスだ : さまよえる蟻人間 ◆T6xkBnTXz7B0 (スフッ Sdb3-BEmb) [age] 2018/12/12(水) 14:37:12.07:duFENGTGd 理論的限界を超えたら、その理論のモデルが事実に反する訳だから、理論の反例になってしまう。 : デフォルトの名無しさん (アメ MMb5-FdCK) [sage] 2018/12/12(水) 15:28:39.64:02Irmhu2M ループに展開されることを期待して末尾再起化にハゲむってギャグだよな。 最初からループ書けよw : デフォルトの名無しさん (アウアウウー Sa05-/enL) [] 2018/12/12(水) 15:38:07.68:LIx8RHBsa ループだと関数渡せないから。 あとはリストを受け取ってリスト返す関数とか、IOモナドとかは 再帰関数がそのままループになる。 (リストもモナドなので、モナドを返す再帰関数がループになると言える) : デフォルトの名無しさん (ワッチョイ cad4-UKyl) [sage] 2018/12/13(木) 14:18:51.88:oii7E7F70 初心者です。 inline指定子について教えて頂きたいのですが、 関数ポインタからinline関数を呼び出す場合、どのように展開されるのでしょうか。 また、関数ポインタを格納する配列から呼び出すような場合はどのように展開されるのでしょうか。 : デフォルトの名無しさん (ラクペッ MM9b-8Y2+) [sage] 2018/12/13(木) 14:32:27.38:1m7XwvCgM inline関数の展開は環境依存 呼び出し方が如何なる方法であれ関数の構造によってはインライン展開される保証はない ループ構造を含んでいると殆ど期待できない : デフォルトの名無しさん (ワッチョイ cad4-UKyl) [sage] 2018/12/13(木) 14:56:19.82:oii7E7F70 なるほど、ありがとうございます。 まさに、 for (i = 0; i < length; i++) { func_ptrs[i](hoge); } みたいなことを試そうとしているところでした。 こういう場合は展開は期待できないということですね。 今回も勉強になりました。 : デフォルトの名無しさん (ワッチョイ 6acb-UKyl) [sage] 2018/12/13(木) 17:31:05.02:jSkPpV300 次は16EBの壁だな : デフォルトの名無しさん (ワッチョイ 1e61-6aDR) [sage] 2018/12/13(木) 18:29:51.36:Bj9kGxVc0 gccもclangも最適化を-O3にしても if(a=='a'||a=='b'||a=='c'||a=='d'||a=='e'||a=='f') をif('a'<=a&&a<='f')に置き換えてくれないのな : デフォルトの名無しさん (アウアウウー Sa4f-mTCp) [] 2018/12/13(木) 18:40:11.12:Fv0+Omexa Tではないと : デフォルトの名無しさん (アウアウウー Sa4f-mTCp) [] 2018/12/13(木) 18:48:07.23:Fv0+Omexa え?gccで -O -S で置き換えられたように見えるアセンブリ言語出力したぞ。(97引いて5以下かどうか見ているやうなやつ)。 -Oなしだと一つ一つ比較していて明らかに違う。 : デフォルトの名無しさん (ワッチョイ 1e81-UKyl) [sage] 2018/12/13(木) 18:48:36.88:Gz5l93Ou0 GCCの動作環境は特定OSだけではないと思う : デフォルトの名無しさん (アウアウウー Sa4f-mTCp) [] 2018/12/13(木) 18:51:31.61:Fv0+Omexa CPUによっては一つ一つ比較するように書いた方が速いなんてこともあるのかも知れないが、普通はそうならないように思う。 : デフォルトの名無しさん (ワッチョイ cad4-UKyl) [sage] 2018/12/13(木) 19:07:27.96:oii7E7F70 ソース全体で見たときに(a < 'a') や (a > 'f')の可能性もあるから最適化されないということでしょうか? : デフォルトの名無しさん (ワッチョイ f34f-rp3U) [sage] 2018/12/13(木) 19:08:30.18:y280e6J90 a=='a'のときにべたの方が速いからだろ。 a-fが均等な確率だ、というのをコンパイラに対して教えてないし、教える方法もない。 だからコンパイラが勝手にそこを改変するようでは困るだろ。 (大半がa=='a'と分かっていて最速コードが欲しいときに記述出来なくなる) C言語はそういう言語なんだよ。自動的に勝手にやってくれる言語ではない。 細部まで自分で指定できるからこそ極限までチューニング出来る。 最速コードが欲しければ、a-fの確率まで考えて、自分で指定しろ、でしかない。 : デフォルトの名無しさん (ワッチョイ 2b93-eQ7e) [sage] 2018/12/13(木) 19:28:54.20:VenLBJVu0 ワシのとこでも -O で「即値97を引いて即値5と比較…」が出たわ。 -O なしだと真っ正直に即値との比較が6回。 に書かれた通りの ('a'<=a&&a<='f') にならないと言っても、 'a'以上か? 'f'以下か? の判定2回よりもっと効率的になってるでしょ。 もちろん gcc のバージョンによる違いかも知れんが。 : ◆QZaw55cn4c (ワッチョイ aa60-D8NS) [sage] 2018/12/13(木) 19:56:57.11:mMIcaeGH0 ときどき夢にみます、inline 指定がどんな場合にも百発百中 inline になるコンパイラがあればどんなに嬉しいか… : デフォルトの名無しさん (アウアウウー Sa4f-mTCp) [] 2018/12/13(木) 19:58:30.01:Fv0+Omexa あー。なるほど。 かといって言語の規格として最適化についてまで決まってたっけ? その辺は決まってなくてコンパイラしだいのような気がするが。 : デフォルトの名無しさん (アウアウウー Sa4f-mTCp) [] 2018/12/13(木) 20:01:00.67:Fv0+Omexa しかし関数へのポインタが作れてしまう時点でそれはもう inline ではなくなっているように思うのだが。 : デフォルトの名無しさん (ワッチョイ f34f-rp3U) [sage] 2018/12/13(木) 20:23:30.62:y280e6J90 規格云々以前に、適用ヶ所と文化の問題。 C言語がガチで使われている領域はそういうところだから、「書いたとおりのコードを吐け」でないと困るし使えない。 だから適当に改変するコンパイラは嫌われる。 対してC++は「出来るだけコンパイラにやらせる」思想だし、そもそもCほど掘り下げる使い方はされないから、 「可能な限り自動的に最適化しろ」な気はするが。 : デフォルトの名無しさん (ワッチョイ 1e61-6aDR) [sage] 2018/12/13(木) 21:03:29.67:Bj9kGxVc0 C言語のアセンブリがすぐ確認できるサイトで調べてみたんだけど、 違うみたいだね。 : ◆QZaw55cn4c (ワッチョイ aa60-D8NS) [sage] 2018/12/13(木) 21:27:21.48:mMIcaeGH0 なるほど… そういうときは、call されたときは inline に展開するけれども、関数のポインタとして渡されたときに動かすためだけに(実際にポインタから呼ばれるかどうかは考えずに)inline の関数を別にバイナリーに展開しておくっていうのはどうですか? : デフォルトの名無しさん (ドコグロ MMaa-skpA) [sage] 2018/12/13(木) 21:28:48.05:k+IaCMCPM この人何言ってるんだろう… : デフォルトの名無しさん (ワッチョイ d3b3-JU2d) [sage] 2018/12/13(木) 21:30:50.24:Pd0B4/Sw0 ん?? : デフォルトの名無しさん (ワッチョイ f34f-rp3U) [sage] 2018/12/13(木) 21:53:47.05:y280e6J90 お前がな : デフォルトの名無しさん (アウアウウー Sa4f-fk3u) [sage] 2018/12/13(木) 22:39:39.76:fVy8DFiFa 関数内でstaticの変数が宣言されるケースも忘れずに。 : デフォルトの名無しさん (ドコグロ MMaa-skpA) [sage] 2018/12/13(木) 23:12:49.49:k+IaCMCPM ガイジかな? w ⇒ ID:y280e6J90 : デフォルトの名無しさん (ワッチョイ f34f-rp3U) [sage] 2018/12/13(木) 23:49:06.95:y280e6J90 まずお前がガイジじゃないことを示せよ ゆとりなら死ね : デフォルトの名無しさん (ワッチョイ 1e81-UKyl) [sage] 2018/12/13(木) 23:54:03.07:Gz5l93Ou0 踏まないように気をつけて歩こう : デフォルトの名無しさん (ワッチョイ 8ab3-skpA) [sage] 2018/12/14(金) 05:40:44.32:yDEitqc60 うわっ、ガイジと言うよりマジキチやん ⇒ ID:y280e6J90 が意味深になってて笑うわ : デフォルトの名無しさん (ワッチョイ 1e61-6aDR) [sage] 2018/12/14(金) 06:20:30.12:lAbDnTGa0 どうやったらそんなコードされるの? なにをやっても全部比較しかでないのだが : デフォルトの名無しさん (ワッチョイ 1e61-6aDR) [sage] 2018/12/14(金) 06:26:32.39:lAbDnTGa0 いまやったら引き算と比較一回になった。 別の関数の中に比較を入れないと駄目みたいだった。 一個ずつ比較させたいときはvolatileを使えばいいんだな。 : デフォルトの名無しさん (ワッチョイ 1e61-6aDR) [sage] 2018/12/14(金) 06:30:05.99:lAbDnTGa0 最適化をいれるとaが定数だとaが消されるからaを別の関数の引数にすることで 消されないようにできる。 volatileで消さないようにするとなぜか比較が最適されない。 : デフォルトの名無しさん (ワッチョイ f34f-rp3U) [sage] 2018/12/14(金) 06:46:52.77:gWmPrUHE0 それはvolatileの間違った使い方だから止めとけ。 最近そういう投稿も多いが。 : デフォルトの名無しさん (バットンキン MM33-JU2d) [sage] 2018/12/14(金) 06:52:31.89:TYVfP/dyM 最適化は処理の最中に使う変数が外部(別スレッドや割り込みハンドラ)から変更されないということを前提としてるから、volatileつけるとaの比較途中でaそのものが変更されるかもしれないので逐一比較になる。 まぁスタック上のローカル変数aが外部から変更されるってのは通常は単なるスタック破壊のバグだけどね。 : デフォルトの名無しさん (ワッチョイ 6acb-UKyl) [sage] 2018/12/14(金) 06:53:45.77:8u55nHdC0 おまえ4.3BSDのccとかまだ使ってるのか? : 464 (ワッチョイ 2b93-eQ7e) [sage] 2018/12/14(金) 07:50:49.15:FIv/Q2MJ0 素直なコードで出るはずだけどなぁ。 サンプル abcdef.c 第1引数の最初の文字が [a-f] なら yes, それ以外なら no と表示 (引数が与えられなかった場合は no を表示) $ cat abcdef.c #include <stdio.h> int main(int argc, char *argv[]) { int a; a = (argc>1) ? argv[1][0] : 'z'; if (a=='a'||a=='b'||a=='c'||a=='d'||a=='e'||a=='f') printf("yes\n"); else printf("no\n"); return 0; } $ gcc -S abcdef.c 最適化なし 比較6回 $ gcc -O -S abcdef.c 最適化 97引いて5と比較 : デフォルトの名無しさん (ワッチョイ 0a12-rp3U) [sage] 2018/12/14(金) 09:57:08.83:v3sklYn80 volatileは磁気コアメモリ時代の命令じゃねえのか : デフォルトの名無しさん (ワッチョイ 1e61-6aDR) [sage] 2018/12/14(金) 10:14:56.92:lAbDnTGa0 mainで未定の値を作るのがむずかしいんだよ aを初期化しなければ未定の値になると普通おもうんだけど 何故か何かの値に決められて最適化でaが消えちゃうのよね : デフォルトの名無しさん (ワッチョイ 3b8a-8Y2+) [sage] 2018/12/14(金) 10:15:15.85:QZB89f550 現在でも組み込み開発でSFRを弄るにはvolatile宣言は必須 : デフォルトの名無しさん (ワッチョイ 1e61-6aDR) [sage] 2018/12/14(金) 10:28:42.01:lAbDnTGa0 結論を言うとvolatile で最適化を調べるために最適化を抑制したのが間違いの原因だっと ということだな。 : デフォルトの名無しさん (ワッチョイ 3fe3-3flP) [sage] 2018/12/14(金) 12:14:57.88:E1rpoA/W0 volatileは変数がI/Oポートにマッピングされてることを想定した仕様 コンパイラによる省略とかを許さず書いてある通りにアクセスする : デフォルトの名無しさん (アークセー Sxa3-JU2d) [sage] 2018/12/14(金) 12:47:24.45:TZB/LQMkx I/Oだけじゃないよ。 別スレッドなど異なる実行コンテキスト間で共有する領域へのアクセスはvolatileをつけないといけない。 SFRへのアクセスもソフトとハードという実行コンテキストが異なる。 : デフォルトの名無しさん (アウアウウー Sa4f-8Py6) [sage] 2018/12/14(金) 14:14:04.61:7OLXAkOEa 静的変数は全部つけないといかんのだろうね。 利用の趣旨としては。 : デフォルトの名無しさん (ワッチョイ 8a9f-+gtp) [sage] 2018/12/14(金) 15:46:34.42:FWw1nr6R0 ID:y280e6J90はvoid君だろ : デフォルトの名無しさん (アウアウウー Sa4f-mTCp) [] 2018/12/14(金) 16:07:06.94:cCP3RgWTa volatile の使い所 1. マルチスレッドで他スレッドと共有される変数(ただし、別途ロックも掛けた方が良い)。 2. シグナルハンドラとその他の処理で共有する変数。 3. longjmp() 使う時。 : デフォルトの名無しさん (アウアウウー Sa4f-mTCp) [] 2018/12/14(金) 16:08:45.11:cCP3RgWTa これ書き忘れてた。 4. 指している先の内容が本当に揮発性の場合(I/Oポート等) : デフォルトの名無しさん (ワッチョイ 2bea-GDnO) [sage] 2018/12/14(金) 16:22:16.94:lsnrrwE80 記述された手続き以外の要素によって変数値が変わるなら : デフォルトの名無しさん (ワッチョイ 8a7f-Xq6B) [sage] 2018/12/14(金) 19:01:54.99:RfUJ40dd0 volatile変数をマルチスレッドに使うとかいう誤った知識を流布しないでくれ volatileに指定してもマルチスレッド共有変数に求められる * メモリフェンス * 演算の原子性 は確保できない ttps://stackoverflow.com/questions/4557979/when-to-use-volatile-with-multi-threading : デフォルトの名無しさん (アウアウウー Sa4f-8Py6) [sage] 2018/12/14(金) 19:20:00.03:td3PjTJAa 原子性って全然直交した概念ちゃうか。 確保できるとかできないとかいう話になるのがおかしい。 : デフォルトの名無しさん (ワッチョイ f34f-rp3U) [sage] 2018/12/14(金) 19:41:07.95:gWmPrUHE0 ×××○ 知らない人が見たらマジ議論と勘違いするのも無理はないが、 2chでのlongjmpなんてネタだから無視でいい。 全くだ。 というかマジな話、何をどこに使うべきかイマイチ分かってないのなら、 とりあえずいわゆる「正しいプログラミング」を目指した方がいい。 ここでの与太話は、ネタをネタと(ry、でしかない。 : デフォルトの名無しさん (ワッチョイ 6acb-UKyl) [sage] 2018/12/14(金) 20:47:21.99:8u55nHdC0 マルチスレッドは断じて関係ない アフォwヴァカwww : ◆QZaw55cn4c (ワッチョイ aa60-D8NS) [sage] 2018/12/14(金) 21:07:51.74:+oZBuxlP0 volatile なんか忘れて素直に pthread とか C++11 とか使っていればいいと思うのです… : 497 (ワッチョイ 0a21-8Bx+) [sage] 2018/12/14(金) 21:15:41.90:6hfmhPbO0 そのはずなのに使えるなんて言う妄言痴言が飛び交っていたんだから重症だよ シグナルハンドラに関してはvolatileが必要じゃない?もちろんその変数に対するatomicityも要求されるけど : デフォルトの名無しさん (ワッチョイ f34f-rp3U) [sage] 2018/12/14(金) 22:13:48.43:gWmPrUHE0 知らんよ、俺はLinuxのsignalなんて使って無いし。 そのページには必要だと書いてあるし、そうなんだろうさ。 が、そもそも、俺に言わせれば ・volataileで実装出来る=ポーリングループ&せいぜいハンドシェーク=糞 ・プロセス間通信する意味がない スレッド間通信でsleep/wakeupで何も問題ないし、その方が自然だ。 この場合に自前でvolatileなんて書くことはない。 ハードウェアを直接叩かないのにvolatileとか、設計を見直した方がいいと思うぜ。 : デフォルトの名無しさん (ワッチョイ 8abd-yieq) [] 2018/12/15(土) 00:19:10.79:MJLVMCBK0 Cのコンパイラは環境依存になるため、コンパイラの出来、不出来がある。 : デフォルトの名無しさん (ワッチョイ d3b3-JU2d) [sage] 2018/12/15(土) 01:44:33.10:USiGJg2x0 必要条件と十分条件の違いが分かってないやつがいるな。 : デフォルトの名無しさん (ワッチョイ 6acb-UKyl) [sage] 2018/12/15(土) 09:51:27.56:hAY8T09E0 フェンスがないのにハンドシェークとは、これいかに : デフォルトの名無しさん (ワッチョイ f34f-rp3U) [sage] 2018/12/15(土) 11:50:06.13:nIs3KSLY0 > 標準シグナルの場合、そのシグナルがブロックされている間に 同じシグナルの複数のインスタンスが配送されても、 1 つだけがキューに入れられる。 > ttp://https://linuxjm.osdn.jp/html/LDP_man-pages/man7/signal.7.html しかし実際ハンドシェークだと思うぜこれは。 意識高い系()ゆとり()がCをやるとfenceという『CPU命令』が必要だと思っちゃうのか? まあ無理も無いとも思えるが。 : デフォルトの名無しさん (ワッチョイ 1e81-UKyl) [sage] 2018/12/15(土) 11:53:03.04:qrRqm5Rq0 それはC言語の話なのか、OSの話なのか、CPUの話なのか : デフォルトの名無しさん (ワッチョイ f34f-rp3U) [sage] 2018/12/15(土) 12:22:47.52:nIs3KSLY0 フェンスが必要になったのはコンパイラ側の都合だから、C言語の話だね。 これが理解出来ないのはお前がゆとりの馬鹿だからだ。 マジな話、馬鹿の癖に煽るゆとりは死んで欲しいね。 お互いに何も得る物がない。 : デフォルトの名無しさん (バットンキン MM33-JU2d) [sage] 2018/12/15(土) 16:08:16.17:uiukVmhyM : デフォルトの名無しさん (ブーイモ MM6f-DFdf) [sage] 2018/12/15(土) 16:24:43.93:tkQQweukM フェンスが必要なのはCPUとコンパイラ双方のためだ。やっぱvoid君は馬鹿だね。 : デフォルトの名無しさん (ワッチョイ 6acb-UKyl) [sage] 2018/12/15(土) 17:21:35.13:hAY8T09E0 ほうほう、fenceはCPU命令ではないんだな それでそれで? volatileとどういう関係があるんだw : デフォルトの名無しさん (ワッチョイ f34f-rp3U) [sage] 2018/12/15(土) 18:37:35.51:nIs3KSLY0 ゆとりは死ななきゃ直らないと再認識した。 ゆとりが馬鹿であり続ける権利を尊重し、教えてやらないことにする。 つっても、ググればいくらでも出てくるし、ゆとり以外には実害はないはず。 マジな話、上達したい奴は、ググっても疑問が解消しないときのみ、掲示板等に頼るようにした方がいい。 自力で勝手に進んでいけるか、いちいち構ってちゃん状態になるかでは、上達速度に雲泥の差が出る。 こんなところで下らない煽り合いに興じてるから、ゆとりはゆとりのままなのだと思うし。 StackOverflow(英語版)はかなりオススメだ。迷ったらそこを頼れ。 : デフォルトの名無しさん (ブーイモ MM6f-DFdf) [sage] 2018/12/15(土) 19:04:30.55:/O2tQ50qM void君は謎の捨て台詞好きだよね。かっこ悪いよ。 : デフォルトの名無しさん (ワッチョイ 1e81-UKyl) [sage] 2018/12/15(土) 19:15:51.64:qrRqm5Rq0 ここにはお前に用がある人はいないそうだ : デフォルトの名無しさん (アメ MM47-KgdI) [sage] 2018/12/15(土) 19:17:41.02:CVS0UY4MM 霊界は存在するよね。ググればいくらでも出てくるしww : デフォルトの名無しさん (ワッチョイ f34f-rp3U) [sage] 2018/12/15(土) 19:40:59.06:nIs3KSLY0 以下、C言語について詳しいつもりの、格好いいつもりの粘着君が教えてくれます。ご安心を。 (レベルはあのコードを糞コードと認識出来ないようなので推して知るべし) マジな話、volatileをスレッド同期に使え、なんてのは世界中の誰も言ってないだろ。 勿論longjmpもgotoもその類だ。 ここはそれを分かってるロートル連中が与太話をするところであって、 マジの初心者が来るのは危険だと思うがな。ネタをネタと(ry 初心者なら、まずは正しいプログラミングを目指すべきだと思うぜ。 本来はリアルで先輩/上司/先生に教えを請えるのが一番いいが、 駄目ならStackOverflow(英語版)を俺はオススメするが。 最近は知恵遅れも知恵袋と化してきていて、例えば以下(PHPのスレより、ただし削除済み) ttp://https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10199147355 そこで焼け出された知恵遅れゆとりがこちらに押し寄せてきているのだと推測しているが、 お互いにとって不幸なことになってる。 ただし知恵袋が機能するなら、本来はIDがある分向こうの方がましだから、向こうを使った方がいいと思うが。 知恵遅れゆとりがスクラム組んで押し寄せることに対して、2chは防御手段がない。 実際、こいつらが役に立つことを一回も言ったことがないのも事実でさ。 こいつらは死ぬまでイナゴし続けるんだろうな、って思う。 : デフォルトの名無しさん (ワッチョイ 6acb-UKyl) [sage] 2018/12/15(土) 21:18:31.36:hAY8T09E0 ニヤニヤ : デフォルトの名無しさん (アウアウウー Sa4f-mTCp) [] 2018/12/15(土) 21:37:43.77:VC87camXa C言語について詳しいつもりの、格好いいつもりの粘着君ってこんな名言残した人の事ですか? >なんだこれ?引数 void って初めて見たぞ。文法的にありなのかこれ? : デフォルトの名無しさん (ワッチョイ f34f-rp3U) [sage] 2018/12/15(土) 22:00:05.11:nIs3KSLY0 お前らがその30年前に解決した話に異常に固執するのも意味不明だがな。 それはお前らのレベルではそれが全てだ、と言っているに等しいわけだが、それについては恥ずかしくないのか? : デフォルトの名無しさん (ワッチョイ 6acb-UKyl) [sage] 2018/12/15(土) 22:03:06.74:hAY8T09E0 ぐうの音も出ねえって こいつのためにあるような言葉だなw : デフォルトの名無しさん (ワッチョイ aaf9-fk3u) [sage] 2018/12/15(土) 22:33:19.53:3LFJSGA60 void君て、半角カナ君とかなり似た匂いがするけど、亜種か別設定キャラだったりするのだろうか? : デフォルトの名無しさん (ワッチョイ 8abd-yieq) [] 2018/12/15(土) 22:35:12.80:MJLVMCBK0 C言語はあとから標準化されたのと、コンパイラの実装はUNIXを想定しているため、OSが異なるとコードの意味まで変わる。 : デフォルトの名無しさん (ワッチョイ 1e80-2dqZ) [] 2018/12/15(土) 22:44:04.38:8aRCy95z0 オレは要点を簡潔明瞭にレスしてるからな あったま悪い低学歴底辺のキミラの生きうつしになるvoid君と一緒にされたら困るワケ キミラにとってvoid君はただの同族嫌悪 : デフォルトの名無しさん (ワッチョイ cad4-UKyl) [sage] 2018/12/15(土) 23:22:08.85:BLCVn7NJ0 初心者です。 ソートとコンパイラの最適化について教えて頂きたいのですが、 挿入ソートを書いてその実行時間を計測しました。 動的に確保した10000の要素数を持つ配列に、rand()関数でランダムな値を入れて、 clock()関数でソート時間を計測しています。 コンパイラはMinGWから入れたGCC6.3.0で、-O1と-O無しで実行時間にかなりの差が出ます。 バブルソートや選択ソートでは極端に大きな差が出ないのですが、挿入ソートだけはかなり差が出ます。 -O無しだと7秒前後、-O1だと1.7秒ほどで完了します。 自分が書いた挿入ソートが正しい内容になっているかと、 このプログラムでの最適化でどのようなことが行われているのかおおまかに教えて頂きたいです。 挿入ソートは以下の様に書きました。 void insersion_sort(unsigned array[], unsigned length) { register unsigned *start = &array[0]; register unsigned *sorted = start; register unsigned *end = &array[length - 1]; while (sorted < end) { register unsigned *crnt = sorted + 1; while (crnt > start && *crnt < *(crnt - 1)) { swap(crnt, crnt - 1); crnt--; } sorted++; } } : デフォルトの名無しさん (ワッチョイ f34f-rp3U) [sage] 2018/12/15(土) 23:41:43.90:nIs3KSLY0 > コンパイラはMinGWから入れたGCC6.3.0で そのレベルならVS使えってマジで。 GUIでグレークポイント貼って追跡出来るだけで全然違うから。 > 自分が書いた挿入ソートが正しい内容になっているかと、 自分でデバッグしろドアホ。 自前でチェックすれば済むんだから、簡単に出来るだろ。 for (int i=0;i<10000-1;i++) if (array[i]>array[i+1]) printf("BUG: %d, %d, %d, %d\n",i,i+1,array[i],array[i+1]); とか。 > register 使うな。 ってかおまえ、何を参考にして学んでる? > void insersion_sort(unsigned array[], unsigned length) > unsigned array[] これもあんまりやらないと思うけど。 > 最適化でどのようなことが行われているのかおおまかに教えて頂きたい それをマジで聞きたいならオブジェクトコード(逆アセンブルコード)を貼る必要があるわけだが。 : デフォルトの名無しさん (ワッチョイ cad4-UKyl) [sage] 2018/12/15(土) 23:50:10.65:BLCVn7NJ0 レスありがとうございます。 VSなら使っています。VSCodeですがw ちなみにGUIでデバッグも出来ますね。 バグは出ていないのにデバッグする意味ってあるんですか? 質問の意図としては、「ちゃんと正しいアルゴリズムで実装できているか」という質問をしているのです。 「動かないからおかしいところ教えてください」という意味ではありません。 register指定子を付けるだけで、付けていないときに比べて2倍ほど変わるのですが、 付けないほうが良い理由を教えて頂けますでしょうか。 unsignedもあまりやらない意味を教えてください。 今はrand()から帰ってくる値が入っているだけですので意味ないのは確かですが。 : デフォルトの名無しさん (ワッチョイ cad4-UKyl) [sage] 2018/12/15(土) 23:53:27.39:BLCVn7NJ0 × 2倍ほど変わる 〇 ソート時間が2倍ほど変わる 連レス失礼 : デフォルトの名無しさん (アウアウウー Sa4f-8Py6) [sage] 2018/12/16(日) 00:07:00.48:w2yggEy4a 引数voidにすると魔除けになるかもな : デフォルトの名無しさん (ワッチョイ cad4-UKyl) [sage] 2018/12/16(日) 00:10:07.53:GOuL0+IB0 度々ごめんなさい。配列の桁数を間違えていました。 ×10000 〇100000 です。 : デフォルトの名無しさん (ワッチョイ 8abd-yieq) [] 2018/12/16(日) 00:11:33.51:nrAiyUBx0 C言語に詳しくない俺でもわかるが、CPUは正と負の数を扱っているから、正の数と指定されると余計な処理が挟まる。 : デフォルトの名無しさん (ワッチョイ f34f-rp3U) [sage] 2018/12/16(日) 00:13:46.60:+TcxNu6P0 > ちなみにGUIでデバッグも出来ますね。 それならいい。 > ちゃんと正しいアルゴリズムで実装できているか ならwikiでもどうぞ。いちいち聞くんじゃなくてさ。 ttp://https://ja.wikipedia.org/wiki/%E6%8C%BF%E5%85%A5%E3%82%BD%E3%83%BC%E3%83%88 > register指定子を付けるだけで、付けていないときに比べて2倍ほど変わるのですが、 マジで? > 付けないほうが良い理由を教えて頂けますでしょうか。 ttp://https://cpprefjp.github.io/lang/cpp11/deprecation_of_the_register_keyword.html つかマジで、お前が参考にしている本なりサイトはかなりヤバいと思うぜ。 (Cでも同じはずだが、実際効いているのであれば違うのか?) > unsignedもあまりやらない意味を教えてください。 いや、書き方が曖昧だったが、[]をやらない。大概は、 unsigned *array だと思う。 つか、全般的にコードが妙な書き方になってるから、直した方がいい。 初心者なら、単に教科書かその類に問題があるだけだと思うし。 この文脈でそこを誤解することはあり得ないから大丈夫。 (なのはリアルだけで、2chでは信じられないレベルのコミュ障がいるのもまた事実だが) : デフォルトの名無しさん (ワッチョイ cad4-UKyl) [sage] 2018/12/16(日) 00:15:38.43:GOuL0+IB0 なるほど、ありがとうございます。 書き始めたときは何も考えていなくて、とりあえず大きい値が入れられるようにunsignedにしていましたw 今後正負で大きい値も扱える型の配列に直そうと思います。 : デフォルトの名無しさん (ワッチョイ cad4-UKyl) [sage] 2018/12/16(日) 00:24:06.30:GOuL0+IB0 レスありがとうございます。 ちなみにそのwikiの説明文を見て挿入ソートを書いています。 ソースの部分は読んでいませんが。 GCCは最適化を有効にしなければregisterが効くなんてのは結構有名だと思っていたんですがそうでもないんですかね。 配列引数に[]を書かないというのは、別に個人の趣味みたいなもんだと思うので良いんじゃないでしょうか。 他の人とコーディングするなら規約などに従いますが、今は自分一人で書いているだけなので。 []が書いてあれば配列を渡すというのが一目瞭然であるから付けているだけです。(arrayという名前や、lengthが必要な時点で分かりますが) *start = &array[0];としているのも同じ理由です。 *start = arrayと書くより分かりやすいと思うからそうしているだけです。 別にコーディング規約の話をしているわけではないのでこの辺でよろしいでしょうか? : デフォルトの名無しさん (ワッチョイ f34f-rp3U) [sage] 2018/12/16(日) 00:25:21.59:+TcxNu6P0 まあそれはあるが、細かすぎるからいいかな、って思ってた。 あとな、多分、 unsigned ではなくて、 unsigned int の方が主流のような気がするが。 まあそれ以前に531の指摘通り、intでやれ、ということではあるが。 : デフォルトの名無しさん (ワッチョイ cad4-UKyl) [sage] 2018/12/16(日) 00:28:37.95:GOuL0+IB0 あとちなみに、registerが非推奨になっているのはC++の話ではないんですかね? その辺も詳しい方いましたら教えてください。 : デフォルトの名無しさん (ワッチョイ cad4-UKyl) [sage] 2018/12/16(日) 00:29:37.27:GOuL0+IB0 unsigned intの省略型がunsignedだと思っていたのですが違うのでしょうか? : デフォルトの名無しさん (ワッチョイ f34f-rp3U) [sage] 2018/12/16(日) 00:33:29.78:+TcxNu6P0 > GCCは最適化を有効にしなければregisterが効くなんてのは結構有名だと思っていたんですが 知らん。 というかそのそも最適化無効で使うことがほぼあり得ない。 さらに言えば、-O1ってのも奇妙で、普通は-O2か最近は-O3。 マジで君、全般的に色々おかしいんだよ。 > 別にコーディング規約の話をしているわけではないのでこの辺でよろしいでしょうか? 好きなように書けばいいんだが、上達速度を上げたいなら、『他人と同じコーディングルール』で書いとけ。 それで損はしない。 慣れてる書き方の方が速く読めるから、 他人のコードを読むときに同じ時間でより沢山のコードを読めるようになり、上達しやすくなる。 : デフォルトの名無しさん (ワッチョイ cad4-UKyl) [sage] 2018/12/16(日) 00:40:59.45:GOuL0+IB0 ちなみにO2とO3も試しましたが、O1と変わらないですね。 -O無しだとこの速度で、一体どこから速くなるんだろうと-O1を試したら速くなっていた、というだけの話です。 最適化無効で使うことがあり得ない、というのも今初めて知りました。ありがとうございます。 私から逆に言わせてもらうと、あなたも全般的におかしいと思います。 まず、質問に対する回答に全くなっていないという点。 あと、「上達速度を上げたい」などと一言も書いていないのですが、 一体どこからそう読み取って、「他人と同じコーディングルールで書け」などと余計なお世話を押し付けてきているのでしょうか。 先にも書きましたが、「今は自分一人で書いているだけ」なので勝手にさせていただきます。 あと万人に共通しうる「他人と同じコーディングルール」とやらのご教授もできたらお願いします。 できたらで結構ですが。 : デフォルトの名無しさん (ワッチョイ f34f-rp3U) [sage] 2018/12/16(日) 00:41:28.75:+TcxNu6P0 > 通常は、unsignedの後にintやlongなどと記述して用いるが、これを省略しunsignedとだけ記述した場合はunsigned intであるとして処理される。 > ttp://https://www.wdic.org/w/TECH/unsigned そのようだが、ほぼ見ないと思うぞ。 まあ俺は仕様に詳しいわけではないし、俺の揚げ足取りをしたがっている粘着君に期待しよう。 彼は喜々としてヒャッハーしてくれるだろうし。 ただ何度も言ってるが、全般的に色々標準的ではないので、教科書なり参考サイトを見直した方がいい。 そこで意固地になられる理由も俺には分からないが。 : デフォルトの名無しさん (ワッチョイ 1e80-2dqZ) [] 2018/12/16(日) 00:46:03.68:Q57qqdXG0 > 自分が書いた挿入ソートが正しい内容になっているかと、 じゃあまずチェックプログラムを作りなさい @入力の列の値がすべて出力の列の値に含まれているかチェックする関数 A出力の列の大小関係が適切になっているかチェックする関数 @、Aが面倒だったら、同じ入力の列の値を使って qsort()の結果と出力の列の結果が同一になっているかチェックする関数 いろんな大量の乱数列使って問題がおきなかったらとりあえず誤りは検出されなかったことにすればいい で、その前に こういった試験するためのテストドライバをまず作ってみなさい 試験するためにはこういった機能があるテストドライバ用の関数が必要になると考えられるからな @擬似乱数を生成する An個の乱数列を生成する Bn個の列を複製する Cn個の列をダンプする というわけで作業に戻りなさい : デフォルトの名無しさん (ワッチョイ f34f-rp3U) [sage] 2018/12/16(日) 00:46:05.25:+TcxNu6P0 前後したががそのまま当てはまる。 とはいえ、まあ分かった、俺は君には今後回答しないことにする。 それがお互いの為のようだし。 : デフォルトの名無しさん (ワッチョイ 1e80-2dqZ) [] 2018/12/16(日) 00:47:26.92:Q57qqdXG0 低学歴底辺ドカタのアドバイスなんか 聞く必要ないからな : デフォルトの名無しさん (ワッチョイ a77b-KgdI) [sage] 2018/12/16(日) 00:50:09.46:JR5j914d0 半角まで出てきたwww : デフォルトの名無しさん (ワッチョイ 1e80-2dqZ) [] 2018/12/16(日) 00:50:43.18:Q57qqdXG0 低学歴底辺ドカタ内部のオキテの話なんか どうでもいいワケ どうみても質問ではそんなどうでもいい話なんか書かれてないからな : デフォルトの名無しさん (ワッチョイ cad4-UKyl) [sage] 2018/12/16(日) 00:54:38.84:GOuL0+IB0 「unsigned int」と書くか「unsigned」と書くか、や、 「あなたがどう書いているかを見かけるか」なんて正直、本当にどうでも良い話です。本当にありがとうございました。 「あなたが思う『標準的』」とかも本当にどうでも良い話です。 揚げ足取りを従っている粘着君に期待するのは勝手なんですが、私を出しに使うのはご遠慮願いたいです。 もっというと他所でやってほしいです。どうでも良いので。 : デフォルトの名無しさん (ワッチョイ cad4-UKyl) [sage] 2018/12/16(日) 01:00:00.06:GOuL0+IB0 レスありがとうございます。 @入力の列の値がすべて出力の列の値に含まれているかチェックする関数 少ない要素数の配列では目でチェックしましたが、 100000の要素数の場合、これは行っていないので作ってみようと思います。 : デフォルトの名無しさん (ワッチョイ f34f-rp3U) [sage] 2018/12/16(日) 01:12:48.33:+TcxNu6P0 なるほど君も別の方向にコミュ障だから、な訳か。 俺は別に君をダシにしたわけではなくて、 君の質問のに関しては粘着君が喜々として答えてくれ、それが君の為にもなるだろう、と言っているだけ。 ちなみに君が欲しがっている回答は、現時点では情報不足で誰も正確には答えられないんだよ。 それも最初に言ったろ。 なんつーか、ゆとりはマジでこのパターン多過ぎ。 表面だけ丁寧で、中身がものすごく無礼、というか。 お前はお姫様/王子様ではないんだぜ。 逆に半角君も俺にはよく分からんが。 表面だけやたら人を罵倒しているが、実際はいちいちシコシコ回答してるから、手間はかかっている。 コンプレックスの固まりで他人を馬鹿にしたいだけなら粘着君みたいになるはずだし、 (馬鹿にするだけで一切自分の意見を言わない =意見を言うとそこに反論される可能性が発生するから怖くて出来ない) 何がどうなると半角君になるのかよく分からん。 : デフォルトの名無しさん (ワッチョイ cad4-UKyl) [sage] 2018/12/16(日) 01:20:36.44:GOuL0+IB0 あとあなたも大概「無礼」ですよ。人を侮辱する前にご自身の発言を読み直したらいかがですか? いきなり「ドアホ」言う人は中々私の周りにはいないです。 きっと「コミュ障」だからかもしれませんねw : デフォルトの名無しさん (ワッチョイ f34f-rp3U) [sage] 2018/12/16(日) 01:26:00.46:+TcxNu6P0 そのレス自体が俺の方が数段上手なことを示しているわけだが、それも理解出来ないのだろ? だから君はコミュ障なんだよ。まあいいが。 ま、きみは2chには向いて無いと思うぜ。 : デフォルトの名無しさん (ワッチョイ cad4-UKyl) [sage] 2018/12/16(日) 01:32:48.16:GOuL0+IB0 「どちらが上手か」や「コミュ障かどうか」や「2chに向いているか」を議論するスレでは無いのは理解できておられますか? なんにせよ私にとってあなたは、全く理解の足しにならない人間だということは、低能コミュ障な私にもよく理解できましたので、更に数段上を目指してご邁進くださいませ。 かしこ。 : デフォルトの名無しさん (ワッチョイ 8abd-yieq) [] 2018/12/16(日) 01:35:58.25:nrAiyUBx0 C言語というよりコンピュータの基本を勉強した方がいい。CPUのレジストリは限られているから、本当にレジストリを使うマシン語がはかれたらOS、他のソフトウェアを阻害しかねない。 マルチプロセスではない昔のコンピュータならまだわかるが、CPUを占拠するようなコードを書くのは尋常ではない。 : デフォルトの名無しさん (ワッチョイ 8abd-yieq) [] 2018/12/16(日) 01:37:47.75:nrAiyUBx0 省略してはならない。これ基本。 可読性も落ちる。 ふざけているのか? : デフォルトの名無しさん (ワッチョイ 8abd-yieq) [] 2018/12/16(日) 01:44:53.73:nrAiyUBx0 ネット上に転がっているサンプルはデタラメ、悪い例のオンパレードだったりする。 ちゃんと信用できるところを見ろ。 だいたいint型が何バイトで、CPUのレジスタ長が何ビットかわかってる? : デフォルトの名無しさん (ワッチョイ 8abd-yieq) [] 2018/12/16(日) 01:53:47.94:nrAiyUBx0 コーディングスタイルは個人の好みで、できればよい、動けばよいなどと言う人間がこのようなソート処理を作るはずがない。 速い遅いのこだわりもどこから出てくるのかわからない。 : デフォルトの名無しさん (ワッチョイ cad4-UKyl) [sage] 2018/12/16(日) 01:57:29.82:GOuL0+IB0 メモリ周りの理解が深まると思い、C言語を学習してます。 レジストリ、というのはレジスタのことでしょうか? register指定子ついてですが、 それをそのまま適用するどうかはコンパイラ依存だと認識しているのですが違うのでしょうか。 これら以外にレジスタを必要とする値や演算があったならば、それを采配するのはこのソートを行うプログラムではなくてOSではないでしょうか。 そもそも、たった3個のポインタ変数がCPUのレジスタを占拠してしまうほどのサイズを持っている変数とは思えません。 ふざけていませんし、そもそもここで質問する前提にコーディングしていませんでしたので、 「自分の分かりやすいように」記述していました。 つまり「可読性」は「自分にとって可読」であるものです。読みにくければ申し訳ないですね。 まぁこの数行程度のソースで読みにくいと騒ぐ上級者様がいるとは思えませんが。 あとさっきも書きましたが「コーディング規約」について質問しているのではありません。 この数行が読みにくくてしょうがない!というのであれば読んでいただかなくて結構です。 読んでくださる方に聞いているので。 確かに省略しすぎるのは自分もどうかと思っていますよ。 初めて「printf」なんて見たときは「なんのfやねん」って思いましたから。 : デフォルトの名無しさん (ワッチョイ a705-DFdf) [sage] 2018/12/16(日) 02:02:53.44:zisHaYIc0 voidはまた質問者の気分を害して悦に浸ってるのか。こいつマジでスレの害悪だわ。 : デフォルトの名無しさん (ワッチョイ cad4-UKyl) [sage] 2018/12/16(日) 02:04:29.37:GOuL0+IB0 良いも悪いも、そもそもサンプルなんて読んでいませんし、挿入ソートがどういうモノか、というのだけを読んで書いていますので。 そもそも、ここもそのネット上なわけで。私が書いている関数の内容が正しく動くかや、あなたが今書いていることも信用していいんですかね? 疑い始めたらきりがありませんよ。 くだらない議論なので無価値ですね。 作るはずがない、と言われても作りました。何の根拠が?w 速い遅いのこだわり、とか書いていますが、そもそもこだわっていません。 「なんで自分の書いた挿入ソートのコンパイルが、最適化の有無でこんなに速度が変わるんだろう」というふとした疑問を書いているだけです。 私が、「速い挿入ソートが書きたい」なんて一言でも書いたでしょうか? : デフォルトの名無しさん (ワッチョイ a77b-KgdI) [sage] 2018/12/16(日) 02:11:16.40:JR5j914d0 レジストリwwwww : デフォルトの名無しさん (ワッチョイ cad4-UKyl) [sage] 2018/12/16(日) 02:14:08.51:GOuL0+IB0 さて、夜はふけてきましたが、 一部やかましいだけで有用な情報も得られなさそうなので、そろそろ休みます。 私が原因でスレをお騒がせしてしまって申し訳ございませんでした。 もし、挿入ソートが速くなる理由等分かるかたいましたら、また別の日にご教授頂けると嬉しいです。 ひとまずはテスト用のドライバ関数を作ってみたいと思います。 さんありがとうございました。 みなさまおやすみなさい。 : デフォルトの名無しさん (アメ MM47-KgdI) [sage] 2018/12/16(日) 02:26:17.39:cTh7msTfM 自演お疲れさまでした : デフォルトの名無しさん (アウアウカー Sa6b-8Py6) [sage] 2018/12/16(日) 02:31:39.01:GdI2y+/Wa おやすみなさい : デフォルトの名無しさん (アウアウカー Sa6b-8Py6) [sage] 2018/12/16(日) 02:44:07.72:GdI2y+/Wa 経験としては、O3にするとバクが顕在化するんであんまり使わないですね。 自分だけなら対応できるけど100人で作ってるプログラムはなかなか難しい。 : デフォルトの名無しさん (ワッチョイ 6acb-UKyl) [sage] 2018/12/16(日) 04:45:04.91:lv3vm4Nk0 逆だろ バグを顕在化させやすい条件を故意に作るんだよ ストレステストとかそういうのだし : デフォルトの名無しさん (ワッチョイ 9f2a-UKyl) [sage] 2018/12/16(日) 08:41:25.08:+JTyra3G0 一般に最適化は、常に同じ結果を出力する最短の計算に変換される。 ソートと書いてあるが、コードに特に比較条件がないので、これは単に 例えば(1 2 3 4 5)->(5 4 3 2 1)と入れ替えている。 元のコードは4+3+2+1=10の入れ替えが発生するが、単に入れ替えるだけなら、 5を1と4を2と、・・・と入れ替えればいい。計算数は2となる。 大小関係の確認を正しく入れれば、他のソートと同様なるかもしれない。 と、以上のように、俺が思っているだけなので、確認した方がいい。 : デフォルトの名無しさん (ワッチョイ f34f-rp3U) [sage] 2018/12/16(日) 09:54:31.21:+TcxNu6P0 おーい粘着!生きてるか! 折角俺様が「registerなんて見ねえ!」なノリなんだから、 一生懸命仕様を調べて突っ込みに来いよ! お前の存在価値なんてそれくらいしかないんだし。 ゆとりなお前らはそれが駄目なんだよ。話が全く進まないだろ。 俺が間違っていることを言っていると思うのなら、ズバッと突っ込みに来るべきなのさ。 お前らはそれをする度胸もないまま、文句しか言えないわけでさ。 ゆとりが何万人いても何も作れなかったのはそれが根本的原因だよ。 少なくとも半角君は前に進むレスをしてるだろ。 彼が10人いれば確実に事態は進展する。 纏まることはないと思うが、それでも烏合の衆でしかないお前らより数段マシだ。 その言い方だと、お前ものコードのやばさが分かってないだろ。 その他ゆとりも大概そんな感じだが。 それで粘着するのはお前らが全員馬鹿だと自身で証明しているようなものなのだが、 それも理解出来ないのだろ? 導くつもりなら、本当に見てやらないといけないのは「根本的に方向性を間違ってないか」であって、 完全にずれていると分かっている初心者の質問にも優しく答えてあげることではないんだよ。 それは逆に迷惑だと俺は思うがな。本人の為にならない。 とはいえ、どういうレスをするかは本人の自由だし、お前らなりのポリシーがあればやればいい。 それで「ゆとり専用:ぼくにやさしいすれ」が成立するのならそれもありだろう。 問題は、お前らゆとりは何もしない/出来ない癖に文句ばかり言ってるわけでさ。 それが本当にいけない。 : デフォルトの名無しさん (アウアウウー Sa4f-8Py6) [sage] 2018/12/16(日) 10:01:21.28:aG56rBWDa シェルソートとかコムソートじゃねえかなそれは : デフォルトの名無しさん (ワッチョイ 6acb-UKyl) [sage] 2018/12/16(日) 10:11:10.20:lv3vm4Nk0 525のコードのやばさが一番わかってないのはおまえだ registerだあ? 全然関係ねえよ、おまえ上っ面しか見てねえ証拠だ : デフォルトの名無しさん (ワッチョイ f34f-rp3U) [sage] 2018/12/16(日) 10:18:48.77:+TcxNu6P0 それで、お前は525のコードに ・問題がない、のか、 ・俺が指摘してないもっと大きな問題がある、のか を言えない/意図的に言ってないだろ。 それがお前らの最悪なところだよ。 突っ込まれるのが怖くて言えないのだとは思うが、 だからゆとりは死ななければ直らない、と言ってるわけでさ。 で?どっちなんだ? 後者なら堂々とマウント取りに来いよ。 : デフォルトの名無しさん (ワッチョイ 6acb-UKyl) [sage] 2018/12/16(日) 11:10:40.38:lv3vm4Nk0 ほらな、何がやばいのか他人に聞かなきゃわからないだろ 煽れば教えて貰えると思っている甘ったれ野郎 : デフォルトの名無しさん (ワッチョイ 1e80-2dqZ) [] 2018/12/16(日) 11:39:09.26:Q57qqdXG0 というワケで評価用のテストドライバをテキトーにさくっとオレが書いてやったぞ ttp://https://ideone.com/FwRQ0E あとはテキトーにやりなさい オレのエレガントなテストドライバ関数群を使えば いろんな整列アルゴリズムをバカでもチョンでも簡単に評価できる @乱数列生成 :aho_malloc_random_data() A列複製 :aho_malloc_clone_data() B大小関係チェック:aho_check_seq1() C要素存在チェック:aho_check_seq2() リファレンス評価用に標準ライブラリqsort()もあわせて評価した 100,000件辺りの秒数で件数増加に伴うゴミっぷりの程度も評価している このスレの低学歴知恵遅れたちが騒いでるようなコードについての問題は一切ない vs2017でも適切に期待通りに動作することは確認した 評価する前から予見できてたことだが 挿入ソートがゴミすぎて困ることだけは改めて分かる それ以外一切問題ない 低学歴知恵遅れが騒ぐコトはいつも的外れなワケ : デフォルトの名無しさん (ワッチョイ f34f-rp3U) [sage] 2018/12/16(日) 11:49:03.98:+TcxNu6P0 それはお前のことだよゆとり。 そしてだからこそお前らは全く進歩せず、今でも池沼ゆとりのままな訳だ。 お前らは本当にワンパターンで、コミュ障も酷い。 それをパターン暗記で誤魔化そうとしているわけだが、そりゃ無理だ。 実際、それはお前にとって何ももたらさないし、その積み重ねが今な訳でさ。 少なくとも俺は何ヶ所も訂正すべき点を具体的に指摘している。 それに対してマウントを取るつもりなら、もっと重大なことを具体的に指摘せねばならない。 それをお前は出来ないから、どこかで見たフレーズで誤魔化そうとしているわけでさ。 ゆとりはマジでこれが酷い。 非ゆとりは、基本的には、自分で調べて理論武装し、挑んでくる。 この過程で成長する。だから、その後で紛糾しても、少なくとも当人には利益があるし、 当然勘違いしてたらぶっ叩かれるので修正もされる。つまり確実に本人は前進する。 お前らはこの過程をやろうとしないから、全く成長しないし、実際、してない。 だから今のお前が具体的に何も言えないわけでさ。 それを認めるのならまだしも、それをコピペフレーズで誤魔化そうとしているのだから重傷だよ。 聞くは一時の恥、聞かぬは一生の恥、って奴だよ。 リアルやID制のサイトならまだしも、 匿名掲示板ですら『恥』と思って聞けないその虚栄心では、リアルでは全く聞けてないだろ。 だからお前らは相変わらず池沼な訳でさ。 : デフォルトの名無しさん (ワッチョイ 1e80-2dqZ) [] 2018/12/16(日) 11:54:04.82:Q57qqdXG0 コレで挿入ソートがゴミ同然なのが 一目瞭然で分かる sort(のコード) ttps://i.imgur.com/I3aSs5K.png qsort ttps://i.imgur.com/gdiXaoz.png つまりもともとこんなゴミみたいなシロモノを 時間かけて最適化するのはムダ : デフォルトの名無しさん (ワッチョイ d3b3-JU2d) [sage] 2018/12/16(日) 11:54:37.67:W0MJyJGm0 お前、口が悪くて思い込みは激しいがここまでちゃんとフォローしてやるってのは偉いな。 下手に外野から評論ばっかりしてる奴らよりよほどこのスレでは役に立ってるわ。 : デフォルトの名無しさん (アウアウウー Sa4f-8Py6) [sage] 2018/12/16(日) 12:07:06.08:fTV/MXSFa ソートの性能は机上でわかるから、最適化について教えてくれや。 あとスーパースカラーの効き方とか絡めて語ってくれると助かるわ。 : デフォルトの名無しさん (ワッチョイ f34f-rp3U) [sage] 2018/12/16(日) 12:24:14.24:+TcxNu6P0 × 教えてくれや × 助かるわ お前らゆとりが駄目なのはそこなんだよ。他力本願過ぎ。 そして指摘しても糞女と同様開き直るし、救いようがない。 お前がどういう風に分かってないかなんて誰も知らないのだから、 お前自身がいろいろ調べて、 ○ 俺的にはこう思うんだが、どうかな? とやらないと駄目なんだよ。 具体的に上手くやったのは497で、497-499-502-503とならざるを得ない。 そのサイトには「シグナルでは使う」と書いていたから、それを否定する俺の見解を質してきたわけだ。 このやりとりは少なくとも彼には利益があっただろう。 そしてこの積み重ねが差になっていく。 お前も含めて、粘着共は何一つ意見を言えない。言う知能すらないからだ。 その差がどうして生じたのか、いちいち教えてやってんだからよく考えろよマジで。 : デフォルトの名無しさん (ワッチョイ 06f3-3flP) [sage] 2018/12/16(日) 12:25:29.13:XNrlNwMM0 挿入ソートの場合は、挿入すべき場所に直接挿入すればよいので、 swapで何度も入れ替えないようにして、必要なところに直接挿入するのがいいかもしれません。 一瞬バブルソートのように見えて、挿入ソートってこんなのだっけ?と思いました。 最適化についてはこのコードだけではなんともいえませんが、 大まかでよいのであれば、全体をclock関数で時間計測したように この関数の中で経過時間を計測してみるのもよいと思います。 効果のある場所が限定できると推測もしやすくなりますので。 : デフォルトの名無しさん (ワッチョイ cad4-UKyl) [sage] 2018/12/16(日) 12:47:37.29:GOuL0+IB0 おおお、私の挿入ソートの為にありがとうござます。お手数おかけしました。 ちゃんと内容を読めていないので、時間を取ってテストドライバのソースを読んでみたいと思います。 一旦ひとまとめすると、 一応私の書いたソートは動いていて、ちゃんと「挿入ソート」になっているという感じでしょうか。 やはり、さんもおっしゃる通り、なぜ-O無しと-O1の最適化の有無で、ソート時間が大幅に変わるのかが気になります。 コンパイラって不思議ですね。 さん、ありがとうございます。 挿入ソート内での時間計測もやってみたいと思います。 この挿入ソートを作る前にバブルソートも作ったのですが、 以下の様に書きました。 void bubble_sort(unsigned array[], unsigned length) { register unsigned *l = &array[0]; register unsigned *r = &array[length - 1]; while (r > l) { while (l < r) { if (*l > *r) { swap(l, r); } l++; } l = &array[0]; r--; } } これに関しては、最適化の有無で極端にソート時間が変わる、というのはありませんでした。 と言っても最適化有効の方が速くはなっていましたが。 : デフォルトの名無しさん (ワッチョイ a77f-3flP) [sage] 2018/12/16(日) 13:49:55.21:1E8BbQgX0 乱数で特定のデータを作って、それがソートされてるっぽいから アルゴリズムは正しい・・・って正しいのか? : デフォルトの名無しさん (ワッチョイ da80-Da8q) [sage] 2018/12/16(日) 14:02:59.03:YrIrW4/W0 ほぼ整列済みのにデータに対してだけ速い挿入ソートがランダムなデータにはクッソ弱いのなんて当たり前じゃん : デフォルトの名無しさん (ワッチョイ 1e80-2dqZ) [] 2018/12/16(日) 14:11:58.83:Q57qqdXG0 ttp://https://ideone.com/g3SF36 ttps://i.imgur.com/DCnfjLD.png 忠実に書いてみて試してみたが そういうほど効果はなかった void insersion_sort2(aho_type_t* au_A, size_t n_A_length) { const aho_type_t const* cu_end_of_data = au_A + n_A_length; aho_type_t* au_j; for (aho_type_t* au_i = au_A + 1; au_i < cu_end_of_data; ++au_i) { // @ aho_type_t u_x = *au_i; // A au_j = au_i - 1; // B for ( ; au_j >= au_A && *au_j >= u_x; --au_j) { // C *(au_j + 1) = *(au_j); // D } // E *(au_j + 1) = u_x; // F } } : デフォルトの名無しさん (ワッチョイ 1e80-2dqZ) [] 2018/12/16(日) 14:12:26.99:Q57qqdXG0 /* @ i ← 1 @ while i < length(A) A x ← A[i] B j ← i - 1 C while j >= 0 and A[j] > x D A[j+1] ← A[j] C j ← j - 1 E end while F A[j+1] ← x @ i ← i + 1 @ end while */ : デフォルトの名無しさん (ワッチョイ 8a9f-5grR) [sage] 2018/12/16(日) 14:19:33.35:MKia07Gc0 またvoid君が暴れてたのかw : デフォルトの名無しさん (ワッチョイ 1e80-2dqZ) [] 2018/12/16(日) 14:21:40.72:Q57qqdXG0 ちなみに乱数シードを変更して自動的に1000パターンのセルフチェックもやってみたが のコードの誤りは一度も検出されてない 種類を減らして重複を増やして試してみたりもしてる コレでものコードの誤りは一度も検出されてない 出力された要素に入力された要素が含まれること 出力された要素の大小関係が適切であること コレがひたすらプログラムでセルフチェックされてる : デフォルトの名無しさん (ワッチョイ 6acb-UKyl) [sage] 2018/12/16(日) 14:23:51.69:lv3vm4Nk0 さっきからマウントマウントって 盛りのついたサルみたいなのはおまえだけだ registerと書いてあったら何がやばいのか 仮引数に[]と書いてあったら何がやばいのか やばいといった張本人=おまえが説明することだ こればかりはググれで逃げることはできないぜ 失言でマウント取り損なって真っ赤になってるサルめ : デフォルトの名無しさん (ワッチョイ f34f-rp3U) [sage] 2018/12/16(日) 17:18:28.63:+TcxNu6P0 じつはぼく、やばさがわかりません、まで読んだ : デフォルトの名無しさん (ワッチョイ 6acb-UKyl) [sage] 2018/12/16(日) 17:23:33.91:lv3vm4Nk0 うん、おまえが言ったことがどうやばいのかは全然わかんねえ 525のコードに限らずとも registerと書いたらどうやばいのか 仮引数に[]と書いたらどうやばいのか 早く言えよ脂ハゲ それとも撤回か? : デフォルトの名無しさん (ワッチョイ 1e80-2dqZ) [] 2018/12/16(日) 17:56:55.46:Q57qqdXG0 今回の最終コード(メモリ解放を忘れてた箇所を修正した) ttp://https://ideone.com/sylJTW 実行結果(挿入ソートの修正前後) ideone ttps://i.imgur.com/OkRrvlm.png オレのPC ttps://i.imgur.com/7oy0aQS.png proc elms cts cts/100000elms sort(修正前) 524288 34.736 6.625366 sort(修正後) 524288 21.109 4.026222 qsort 524288 0.074 0.014114 結論:挿入ソートを使うのは徒労 のコード自体は一切問題ない そして、コードの誤りは一切なかった ⇒ つまり、この板には低学歴知恵遅れしかいないことがまた実証された つまり、低学歴知恵遅れがテキトーなことばっかりいってることがまた実証された : デフォルトの名無しさん (ワッチョイ 6acb-UKyl) [sage] 2018/12/16(日) 18:41:12.85:lv3vm4Nk0 撤回でいいんだな? おい脂ハゲ : デフォルトの名無しさん (ワッチョイ f34f-rp3U) [sage] 2018/12/16(日) 19:16:02.98:+TcxNu6P0 まずはお前自身の論理に一貫性を持たせようか。 なんて全く今のお前自身だろ。 ゆとりは本当にこれが酷い。 お前らが『失敗作』扱いされるのも当たり前。 : デフォルトの名無しさん (ワッチョイ 8a9f-+gtp) [sage] 2018/12/16(日) 19:55:13.86:MKia07Gc0 void君と半角君がいるw : デフォルトの名無しさん (ワッチョイ f34f-rp3U) [sage] 2018/12/16(日) 20:22:05.70:+TcxNu6P0 お前も味方のに何か教えてやったらどうだ? お前も自分の意見すら表明出来ないヘタレだし、そもそも問題を理解出来ないから無理か? まあこれがゆとりが『失敗作』扱いされる理由だ。 本当によく考えろ。 : デフォルトの名無しさん (スフッ Sdaa-5grR) [sage] 2018/12/16(日) 21:11:35.54:78j4CJdmd んで引数voidの件にはダンマリかよ Cの基礎も知らずによく上から目線でゆとりをバカに出来るよな 上司や部下から陰で笑われてるだろお前 : デフォルトの名無しさん (ワッチョイ f34f-rp3U) [sage] 2018/12/16(日) 21:47:08.64:+TcxNu6P0 このスレ&過去スレ読んでそれ言ってるのか? なら重傷だな ゆとりって、本当に連呼リアンと知能もモラルも同程度だな どうもお前らは連呼すれば既成事実が出来上がると本気で思っているようだが、そんなことはないから : デフォルトの名無しさん (ワッチョイ cad4-UKyl) [sage] 2018/12/16(日) 21:55:54.72:GOuL0+IB0 本当に検証ありがとうございました。 今テストドライバのソースを眺め始めたところで、まだ読み終わっていないのですが、 10行目のマクロが do {} while (0) で囲ってあるのには何か理由や慣例のようなものがあるのでしょうか。 合わせて教えて頂けると嬉しいです。 : デフォルトの名無しさん (ワッチョイ 8a9f-+gtp) [sage] 2018/12/16(日) 22:00:32.41:MKia07Gc0 void君絶好調だなw ゆとりを馬鹿にしているみたいだけどまだ若い分潰しが効く それに引き換えvoid君は老害の一言に尽きる 引数voidって何だ?と書き込んだ時点でお前のレスの信憑性はお前の頭と一緒で限りなく薄いんだよ禿w : デフォルトの名無しさん (ブーイモ MMb6-LjuL) [sage] 2018/12/16(日) 22:04:09.68:hxwpEJ+zM 引数void君の日曜日 : デフォルトの名無しさん (ワッチョイ f34f-rp3U) [sage] 2018/12/16(日) 22:14:09.84:+TcxNu6P0 ゆとりは知恵遅れすぎて整合性という概念がない。 王道と王道と(ryだ。 俺を信用しないのは自由だが、世界中の誰もそれをしないのには理由がある。 ゆとりはこのことすら認識出来ない。 だからゆとりは『失敗作』なんだよ。 なんつーか、普通に考えれば分かるだろ、が通じない。 そして無駄に議論が紛糾する。 お前らの足もお前らが引っ張ってるんだと思うぜ。 : デフォルトの名無しさん (アウアウカー Sa6b-8Py6) [sage] 2018/12/16(日) 22:17:44.41:A7Qua2Dpa 1文での表現で、かつ、セミコロンない場合のエラーを実現するためだね。 : ◆QZaw55cn4c (ワッチョイ aa60-D8NS) [sage] 2018/12/16(日) 22:39:13.74:IjCemHtZ0 >10行目のマクロが do {} while (0) で囲ってあるのには何か理由や慣例のようなものがあるのでしょうか。 もう覚えなくともよい古代の小技でしかありません、気にしたら負け : デフォルトの名無しさん (ワッチョイ cad4-UKyl) [sage] 2018/12/16(日) 22:40:10.46:GOuL0+IB0 なるほど、 if (a > b) swap(a, b); などを置き換えられたときにエラーが発生しなくなるのですね。 勉強になりました。ありがとうございます。 : デフォルトの名無しさん (ワッチョイ cad4-UKyl) [sage] 2018/12/16(日) 22:41:05.38:GOuL0+IB0 ×などを 〇などが : デフォルトの名無しさん (ワッチョイ 069f-UKyl) [] 2018/12/17(月) 03:25:30.31:SLvNUvmN0 引数に void を知らないのはかなりの初心者だと思うよ。 まあ、大昔のC言語にはなかったんだけど、その大昔からずっと使っているなら引数に void を入れておけば 引数なしを表すという規格になって、そしてあらゆる標準的なヘッダファイルの中で使われ始めて man getchar なんてやって man ページ出すと int getchar(void); なんてのが出て来て、試しに引数に何か セットして呼ぶように書いたらエラーが出たりして、ああこりゃ便利になったなあなんてことを体験したりして、 まず忘れる事はないだろうから。 : デフォルトの名無しさん (ワッチョイ 6acb-UKyl) [sage] 2018/12/17(月) 06:30:07.34:QzDaCAv50 voidを知らないのは、K&R Cのまま更新が止まったボケ老人だ 若かった頃から不勉強の傾向が強かったやつね : デフォルトの名無しさん (ワッチョイ 8e23-UKyl) [sage] 2018/12/17(月) 09:37:10.86:nW56DxVi0 それは別のところで確保すべき話ではないの? : デフォルトの名無しさん (ワッチョイ 0a61-3flP) [sage] 2018/12/17(月) 12:43:01.45:FuitD2SD0 VOIDと書いてスタークルーザーを思い出す。 : デフォルトの名無しさん (ラクッペ MMb3-ppkv) [] 2018/12/17(月) 12:47:32.91:I/0A0iGaM 今Cやってる人はなに作ってるんですか? : デフォルトの名無しさん (ワッチョイ 0a12-rp3U) [sage] 2018/12/17(月) 16:55:11.83:CFStKxet0 Javaのスキルが低すぎて干された人物でしょう すると引数voidを初めて見たというセリフの整合性がつく C言語ならマウンティングできると思ったんでしょ : デフォルトの名無しさん (ワッチョイ 1e81-UKyl) [sage] 2018/12/17(月) 17:08:16.23:epqh6mY00 オレは単なるジョークだと思ってたんだが、本気だったとは : ◆QZaw55cn4c (ワッチョイ aa60-D8NS) [sage] 2018/12/17(月) 20:55:39.65:TMWWsAye0 K&R2 には、すでにして void は存在しましたけれども、K&R1 にはなかったのでしょうか? 個人的には void よりも void * の方が好きです、今でも何にでも使える最強アイテムだと思ってバンバン使っています… : デフォルトの名無しさん (ワッチョイ ebf2-2dqZ) [sage] 2018/12/17(月) 21:11:40.45:WCs/11MM0 void*は一旦char*なりにキャストしてやらないと演算できないのが惜しい。 : デフォルトの名無しさん (ワッチョイ 3b61-IP3Y) [sage] 2018/12/17(月) 21:18:03.63:ddAMIqrq0 演算だって??? : デフォルトの名無しさん (ワッチョイ ebf2-2dqZ) [sage] 2018/12/17(月) 21:26:23.72:WCs/11MM0 ? ポインタ演算知らない人? : デフォルトの名無しさん (ワッチョイ 1e81-UKyl) [sage] 2018/12/17(月) 21:51:10.09:epqh6mY00 分かるけど、省略はしない方が良い : デフォルトの名無しさん (アウアウカー Sa6b-8Py6) [sage] 2018/12/17(月) 21:57:32.13:tIzZYkqxa mallocの戻り値がchar *みたいな : デフォルトの名無しさん (ワッチョイ 1e80-2dqZ) [] 2018/12/17(月) 21:58:37.52:4lEE+Jgc0 惜しいもくそもない キャストで演算結果がかわるから当たり前 ↓もしかしてpとqは同じ結果になるとか思ってんの void* p_aho; void* p = (char*)aho+1; void* q = (short*)aho+1; まずポインタがなんなのか分かってない 頭わるう : デフォルトの名無しさん (ワッチョイ 1e80-2dqZ) [] 2018/12/17(月) 22:06:29.28:4lEE+Jgc0 ジェネリックポインターがどういうもんかすら分かってない低学歴知恵遅れが 低学歴知恵遅れのvoid君をバカにしてんのか コレは滑稽 : デフォルトの名無しさん (ワッチョイ 1e81-UKyl) [sage] 2018/12/17(月) 22:08:35.85:epqh6mY00 void君かな? : デフォルトの名無しさん (ワッチョイ 1e80-2dqZ) [] 2018/12/17(月) 22:09:18.40:4lEE+Jgc0 顔真っ赤にしてるし : デフォルトの名無しさん (ワッチョイ 1e80-2dqZ) [] 2018/12/17(月) 22:10:03.38:4lEE+Jgc0 省略可能()だって コレは面白いことをおっしゃる : デフォルトの名無しさん (ワッチョイ cad4-UKyl) [sage] 2018/12/17(月) 22:40:03.34:kePHxvF20 初心者です。 voidが存在しない時代のC言語では、関数の戻り値などはどのように記述していたのでしょうか。 良かったら教えてください。 : デフォルトの名無しさん (アウアウウー Sa4f-8Py6) [sage] 2018/12/17(月) 22:44:15.58:P/jTcJUAa 最初は戻り値はintのみのはず。 : デフォルトの名無しさん (JP 0H8b-O0Yg) [sage] 2018/12/17(月) 22:45:59.53:5htGqSBWH 何も書かないとint : デフォルトの名無しさん (ブーイモ MM47-LjuL) [sage] 2018/12/17(月) 22:46:17.04:YSKVu3hZM Linuxのデバイスドライバ : デフォルトの名無しさん (ワッチョイ cad4-UKyl) [sage] 2018/12/17(月) 22:53:04.98:kePHxvF20 ,623 なるほど何も書かずにいきなり関数名とかだったんですね。 そうすると自然に戻り値はint型として扱われる感じなんですね。 ありがとうございます。 : デフォルトの名無しさん (ワッチョイ f34f-rp3U) [sage] 2018/12/17(月) 23:10:51.39:m222wRI70 結局連呼しか出来ないのか。 そしてそれがお前自身初心者で老害な証明であることにも気づけないんだろ。 お前ら本当に終わってる。 が、まあ、それはさておき、他人を追い落としたいのなら、 ネガティブキャンペーンではなく、ポジティブな競争を仕掛けろ。 つまり、俺よりもっと的確なアドバイスが出来れば、当然俺より上だというわけだ。 半角君がいいとは思わないが、少なくとも彼はこれをやってるだけマシだ。 東亜板の連中なんて馬鹿が大半で、本質が見えてない。 だから非韓三原則や法則 韓国人は、助けない、教えない、関わらない 韓国人と関わると不幸になる なんてのを「韓国人」属性に結びつけているが、実際はそうじゃない。 (理由は他にもあるが、一つには)連中はネガティブキャンペーン『しか』やらないから、 結果的にそれに巻き込まれ、不幸になるだけだ。 そしてそれは今のお前ら池沼ゆとりにも当てはまる。 ゆとりなんて叩きたがっている奴はいくらでもいる。 馬鹿共がそれに気づいたら、お前らもっと終わるぞ。 その癖はマジでさっさと直せ。 ウンコを投げ合っていたとしても、それがポジティブ方向への競争なら、 だんだんマシにはなるんだよ。 お前らもちゃんとそれに参加しろ。 : デフォルトの名無しさん (ワッチョイ 1e80-2dqZ) [] 2018/12/17(月) 23:38:18.98:4lEE+Jgc0 void君の場合、キミラみたいにとてつもなく頭悪いワケでない void君は、頭おかしい 頭おかしいから無罪 責任能力がない : ◆QZaw55cn4c (ワッチョイ aa60-D8NS) [sage] 2018/12/17(月) 23:58:26.51:TMWWsAye0 私とおんなじ刑法39条適用組ですね! : デフォルトの名無しさん (アウアウウー Sa4f-8Py6) [sage] 2018/12/18(火) 00:26:04.62:qkRcBu1Pa みんな仲間さ : デフォルトの名無しさん (ワッチョイ aaf9-fk3u) [sage] 2018/12/18(火) 00:28:28.60:RutBA2Qm0 そもそもウンコだって分かってるのに投げるなよ : デフォルトの名無しさん (ワッチョイ f34f-rp3U) [sage] 2018/12/18(火) 00:54:59.12:GicIxRpF0 > ワッチョイ aaf9-fk3u 死ね つーか、お前みたいな奴しかいないからゆとりは駄目なんだよ。 文句言う前に何でもいいから知ってる範囲で何か言え。 そしてそれが有効打かどうかを競うんだよ。 それすらしない奴には文句を言う権利すらないんだよ。 お前らは分かってないんだろうが、マジな話、 「ゆとり★ちゃんねる(仮称)」が未だに存在しないのもおかしな話なんだよ。 お前らゆとりはゆとり内で確実に内ゲバしてる。(自覚症状はないのだと思うが) 原因はお前らのその態度だと思うぞ。足を引っ張り合ってる。 : デフォルトの名無しさん (ワッチョイ 069f-ez/E) [] 2018/12/18(火) 01:29:36.53:HuP+yDtL0 おだいじに : デフォルトの名無しさん (ワッチョイ 8bb3-GDnO) [sage] 2018/12/18(火) 01:42:38.54:AChTjxH60 void* を大きさ1として演算できちゃう gcc 拡張がキモイ : デフォルトの名無しさん (ワッチョイ 6acb-UKyl) [sage] 2018/12/18(火) 06:36:55.66:xgHv4hiI0 > f34f-rp3U 効いてる効いてるw : デフォルトの名無しさん (アウアウウー Sa4f-mTCp) [] 2018/12/18(火) 09:31:46.74:92SsvGE7a 俺も最初知った時は驚いた。 : デフォルトの名無しさん (ブーイモ MMaa-DFdf) [sage] 2018/12/18(火) 09:36:54.35:6efkgyQbM 的確なアドバイスとかどこの口が言ってんだよwww voidもunsignedも知らないレベルなのに初心者をとっちめて追い返してるだけじゃん。ホント屑 : デフォルトの名無しさん (ワッチョイ 6acb-UKyl) [sage] 2018/12/18(火) 09:40:18.56:xgHv4hiI0 registerと書いたら何がまずいのか説明マダー?(tntn : デフォルトの名無しさん (JP 0Hd7-GyNv) [] 2018/12/18(火) 17:11:09.05:272sPWG0H #include<stdio.h> #define N 5 int sum(int *p){ int wa=*p,i,a[N],k; for(i=1;i<N;++i){ wa=wa+*(p+i); } return(wa); } main(){ int a[N]; int i; for(i=0;i<N;++i){ scanf("%d",&a[i]); } printf("%d\n",sum(a)); } : デフォルトの名無しさん (JP 0Hd7-GyNv) [] 2018/12/18(火) 17:11:45.38:272sPWG0H #include<stdio.h> #define N 5 int sum(int p[]){ int wa=p[0],i,a[N],k; for(i=1;i<N;++i){ wa=wa+p[i]; } return(wa); } main(){ int a[N]; int i; for(i=0;i<N;++i){ scanf("%d",&a[i]); } printf("%d\n",sum(a)); } : デフォルトの名無しさん (JP 0Hd7-GyNv) [] 2018/12/18(火) 17:12:09.11:272sPWG0H #include<stdio.h> #define N 5 #include<math.h> float vecNorm(int *p){ int wa=*p**p,i; float ans=0; wa=0; for(i=1;i<N;++i){ wa=wa+*(p+i)**(p+i); } ans=sqrt(wa); return(ans); } main(){ int a[N]; int i; printf("enter vec:"); for(i=0;i<N;++i){ scanf("%d",&a[i]); } printf("norm=%f\n",vecNorm(a)); } : デフォルトの名無しさん (ワッチョイ 6d61-u3CH) [] 2018/12/20(木) 01:12:02.01:PGlfyh8s0 PARI/GPでの多項式の割り算について 例えば Mod(x^5,x^2-x-1) と入力すると Mod(5*x+3,x^2-x-1) と出力されます。 この剰余類 5*x+3 を多項式として次に使いたいのですが 一度コピペして貼りつける以外の方法はありますか? : デフォルトの名無しさん (JP 0H4b-stut) [] 2018/12/20(木) 14:46:32.32:dwI07DhgH うちの大学の線形リストのノードの削除方法が異端なんだけど、本当にあってるのか教えて コードはコレ ttp://http://www.cc.kyoto-su.ac.jp/~yamada/ap/list.html#delete 次ノードの繋ぎ変えしてないしワケわからん : デフォルトの名無しさん (JP 0H4b-stut) [] 2018/12/20(木) 14:49:53.65:dwI07DhgH if文の中でやってるところが意味不明で : デフォルトの名無しさん (アークセー Sx61-o/Td) [sage] 2018/12/20(木) 15:23:58.12:HJafH88zx ヒント ndPtrPtrは次のノードを示すアドレスが格納されている変数のアドレス、言い換えるとnextメンバのアドレス。 : デフォルトの名無しさん (ブーイモ MMeb-SnKH) [sage] 2018/12/20(木) 15:23:59.11:pLjZUA4qM あってる。異端でもなんでもない : デフォルトの名無しさん (アウアウカー Sa51-4Q7E) [sage] 2018/12/20(木) 15:33:59.42:mvSJol6Sa それ以外の方法あるか? まあ変数の使い方はいろいろあると思うけど : デフォルトの名無しさん (ワッチョイ 2361-pJxC) [sage] 2018/12/20(木) 15:56:04.93:7Qt44qX50 >free(*ndPtrPtr); これを free(ndPtrPtr); と誤読してちょっと頭抱えた。 : デフォルトの名無しさん (ワッチョイ 4593-AeXI) [sage] 2018/12/20(木) 16:20:36.96:HdfUNn3W0 int nodeDelete(node_t **ndPtrPtr, int n) 内の if (*ndPtrPtr != NULL) ... が分からんとすれば、その前のwhileブロックから抜ける条件・ 抜けたときの状態を把握できてないんだと思うぞ。 whileブロックの動作を再考する方が早いかも知れん。 n == 0 の場合 0 < n, n < リストのノード数 の場合 n >= リストのノード数 の場合 : デフォルトの名無しさん (スプッッ Sd03-stut) [] 2018/12/20(木) 16:27:02.34:ebMind6hd 理解したわ ポインタがなに指してるか理解不足だったわ : デフォルトの名無しさん (アメ MM59-lxyq) [sage] 2018/12/20(木) 16:50:21.12:+Bqr0ubdM 自分の理解不足を棚に上げて人様の正統なコードを異端呼ばわりしたことについて一言。 : デフォルトの名無しさん (ドコグロ MM69-ls00) [sage] 2018/12/20(木) 18:53:47.26:As7dWUw1M まあ初心者にはありがちだし正直に理解不足認めてるんだからくだらんことで話引っ張るなよ : デフォルトの名無しさん (ブーイモ MM43-6EUo) [sage] 2018/12/20(木) 20:34:36.71:RsFs7LFZM 異端じゃないがセンスはない 線形リストなんてlist_headが決定版なんだからそれだけ覚えておけばいい : デフォルトの名無しさん (ワッチョイ d54f-OVaG) [sage] 2018/12/20(木) 23:55:08.25:y9sbY0Ic0 異端っちゃ異端。普通は以下。 typedef struct nodetag { struct nodetag *next; // 走査を速める為に先頭、と言うか本質部分は前側に data_t data; // dataが最後、と言うかオマケ類は全部最後、そうじゃないと継承出来ないし }; int nodeDelete(node_t **ndPtrPtr, node_t *ndPtr); // n番目を指定とかありえん、リストはそういう使い方はしない int nodeDelete(node_t **ndPtrPtr, data_t data); // またはこれ コンテナ類なんてOOPがドフィットするんだから、OOP的に書かないと駄目なんだよ。 こいつはそれが出来ていない。 リストを使ったこと無い奴がとりあえず書いてみました、というコードであり、良いコードではない。 池沼ゆとりが多いようなので明記しておくが、 お前らは『老害』に『年齢条項』を入れてゆとり≒20代は該当しない、ということにしたがるが、それは間違いだ。 老害の定義は、公平には、 ・その問題に、より効率的に対処できる新しい方法があるにも関わらず、 古い方法しか使わない/使えない馬鹿 の事だ。 OOPなんて30年前にC++により再定義され、大変素晴らしかったからほぼ全部の言語に採用されてる。 今時OOPを理解してないのも、またコンテナ等OOPに最適なものにOOPを適用しないのも老害だ。 そしてこの老害コードで学ぶもまた、最初から「老害」となる。 (642が悪いわけではないが、教科書のコードに問題があり、「老害」からのスタートになる) 分かるか? 老害の十分条件には「知っているけど使わない」のみならず、単に「知らない」も入るんだよ。 このコードに問題を検出出来ないのなら、その時点で老害だ。 それはOOPを知らない、ということだから。 重ねて言うが、老害に年齢は関係ない。実際、池沼ゆとりの大半が既に老害になってるだろ。 : デフォルトの名無しさん (ワッチョイ bd7b-wUZI) [sage] 2018/12/21(金) 00:27:52.80:pse73zvs0 「そうじゃないと継承できないし」 見事に手段が目的化してるな。 OOPがクソ宗教ってはっきり分かんだね。 : デフォルトの名無しさん (ワッチョイ d54f-OVaG) [sage] 2018/12/21(金) 00:46:55.39:e7/cJrp90 絵に描いたような老害乙 Javaみたいに全部無理矢理OOPは問題があるとして、 C++の範囲で普通に使う分には問題ないし、今更OOPに文句言うのも老害だろ。 第一世代はCが制覇したが、第二世代はOOPが制覇してる。 その理由を考えろ。 : デフォルトの名無しさん (アウアウカー Sa51-TLad) [sage] 2018/12/21(金) 01:00:18.07:hN5N0o1Ma リストは順序あるでしょ。 : デフォルトの名無しさん (ワッチョイ cb80-5YD5) [] 2018/12/21(金) 01:08:54.29:j37Ohb1y0 普通にほとんどのOSはCで書かれてる いまでもCが天下 : デフォルトの名無しさん (ワッチョイ cb80-5YD5) [] 2018/12/21(金) 01:11:08.64:j37Ohb1y0 OSのアプリケーションインターフェースは ほぼすべてC Cのインターフェースをそのまま使えないウンコ言語なんか 使い物にならない : デフォルトの名無しさん (ワッチョイ bd05-aZCD) [sage] 2018/12/21(金) 01:27:10.71:+b5aVjIs0 痛いなー。もういろいろ悔しくて仕方ないってことは伝わったよ : デフォルトの名無しさん (ワッチョイ d54f-OVaG) [sage] 2018/12/21(金) 01:52:35.34:e7/cJrp90 お前もリスト使った事無いのに、何故文句だけ言うの? それがゆとりが駄目なところだ。死ね。 ていうかマジな話、ゆとりが未だにゆとりなのはこれが原因だと思うぜ。 お前ら自身がおかしな方向に誘導しまくってる結果、 ゆとり『だけ』のコミュニティでは収拾がつかず、コミュニティを保てない。 だからお前らは年齢層が高くて居心地が悪いと分かり切っているここ2chに出張ってくるしかないわけでさ。 これは俺らにとっても迷惑だし、お前らにとっても不幸な話だぞ。 インタフェース自体は、実際使えば「これは間違いだ」とすぐ分かる。 n番目、でリストを管理するなんてあり得ないから。 ただ、使ったことが無くとも、C++等参考にすれば、正しい方向には進めるだろ。 それもせず、とりあえず文句を言うその癖はマジで早く直せ。 お前ら自身がそれで被害を被っている。(自覚出来ていないようだが) ttp://https://ja.cppreference.com/w/cpp/container/list/erase ttp://https://docs.microsoft.com/ja-jp/dotnet/api/system.collections.generic.linkedlist-1.remove?view=netframework-4.7.2 C++は「イテレータ()」とかアホなことやってるから余計に分かりにくくなってるが、この場合は「ポインタ」だと思っていい。 (というか、OOPのイテレータは糞だ。これは認める。あれはおそらくJavaが元凶だが) .NETはまんまだが、Node<T>は参照渡しになるからこれも「ポインタ」だと思っていい。 ここら辺も調べればすぐ分かる話でさ、この意味ではその京産大の先公は「老害」だと断定出来る。 過去スレで東工大のリストが出てたろ。あっち見た方がいいと思うぜ。 お前がな。 だだこねれば受け入れられるのはゆとりコミュニティ内だけの話であって、マジで迷惑だから止めろ。 上記の通り、そのコードは一般的に見て「かなり間違った」事をやってる。 それを見分ける能力もないのに文句だけ言うなゴミゆとり。 : デフォルトの名無しさん (アウアウウー Sac9-TLad) [sage] 2018/12/21(金) 02:19:18.24:lfxw1L5ka リストは順序あるよ : デフォルトの名無しさん (ワッチョイ 9b9f-t5R+) [] 2018/12/21(金) 02:30:30.08:UIMsFVlQ0 あるある。 : デフォルトの名無しさん (ワッチョイ a3d4-q1e7) [sage] 2018/12/21(金) 05:32:19.37:lsetsG4i0 C言語で継承とか意識しなくちゃいけないんですか? : デフォルトの名無しさん (ワッチョイ 236e-q1e7) [sage] 2018/12/21(金) 05:50:21.94:FGbnqlsP0 1つの方法が絶対と思い込んでるおまえこそ老害の典型だ 頭固すぎ : デフォルトの名無しさん (ワッチョイ 236e-q1e7) [sage] 2018/12/21(金) 05:51:36.03:FGbnqlsP0 そもそもだよな : デフォルトの名無しさん (ワッチョイ 23b3-ckn8) [sage] 2018/12/21(金) 06:29:14.35:PkTs+Gix0 最近継承とか覚えたから誰かに話したくてしょうがないんだろ w まあ気持ちはわかるが : デフォルトの名無しさん (ワッチョイ 9b9f-t5R+) [] 2018/12/21(金) 08:37:47.92:UIMsFVlQ0 そう言えばそうじゃないと継承できないって、もしやC++特有の決まりなのかな? クラスが作れる言語でクラス変数の宣言の順序が関係する言語を知らんのだけど。 : デフォルトの名無しさん (アメ MM59-wUZI) [sage] 2018/12/21(金) 08:51:45.23:9Mj5/4cfM 継承って、OOP三本柱、継承・多態・カプセル化のうち最も早く信用を失った要素じゃん。 今じゃ当のOOP界隈自身が継承より委譲とか言っちゃってる。 : デフォルトの名無しさん (ワッチョイ ab23-q1e7) [sage] 2018/12/21(金) 09:43:00.98:C5YB7rUV0 多態こそがOOPの本質だと思っているので それ以外はオマケ程度にしか見てないです : デフォルトの名無しさん (ワッチョイ 236e-q1e7) [sage] 2018/12/21(金) 12:03:47.45:FGbnqlsP0 スレチ C++スレでやれ : デフォルトの名無しさん (アウアウカー Sa51-TLad) [sage] 2018/12/21(金) 12:08:33.02:coLyQ5Vra メッセージングです : デフォルトの名無しさん (ワッチョイ 4b30-q1e7) [sage] 2018/12/21(金) 12:14:41.72:PRxQR0TH0 664 名前:デフォルトの名無しさん (ワッチョイ 236e-q1e7)[sage] 投稿日:2018/12/21(金) 05:50:21.94 ID:FGbnqlsP0 [1/3] 1つの方法が絶対と思い込んでるおまえこそ老害の典型だ 頭固すぎ 665 名前:デフォルトの名無しさん (ワッチョイ 236e-q1e7)[sage] 投稿日:2018/12/21(金) 05:51:36.03 ID:FGbnqlsP0 [2/3] そもそもだよな 670 名前:デフォルトの名無しさん (ワッチョイ 236e-q1e7)[sage] 投稿日:2018/12/21(金) 12:03:47.45 ID:FGbnqlsP0 [3/3] スレチ C++スレでやれ : デフォルトの名無しさん (ドコグロ MM41-ckn8) [sage] 2018/12/21(金) 12:30:50.77:choQhZIjM > そう言えばそうじゃないと継承できないって、もしやC++特有の決まりなのかな? そんなわけあるか w そもそもの奴を継承って言うこと自体がちょっとおかしい : デフォルトの名無しさん (ワッチョイ 236e-q1e7) [sage] 2018/12/21(金) 12:39:24.63:FGbnqlsP0 何か用か? : デフォルトの名無しさん (アウアウウー Sac9-TLad) [sage] 2018/12/21(金) 12:52:04.69:lfxw1L5ka 継承を頑張ったプログラムって、疎結合・高凝集からどんどん外れていく運命にあるんだよね。 : デフォルトの名無しさん (ドコグロ MM41-ckn8) [sage] 2018/12/21(金) 12:56:17.53:choQhZIjM そりゃ継承ごときで頑張らないといけないならそうなるだろうよ w : デフォルトの名無しさん (アークセー Sx61-o5ET) [sage] 2018/12/21(金) 12:56:53.99:eqYC63Aux 継承はそのうち親子関係に矛盾が生じ、親クラスのメソッドやブロパティを隠したくなる。 : デフォルトの名無しさん (ワッチョイ 236e-q1e7) [sage] 2018/12/21(金) 13:48:48.03:FGbnqlsP0 下手な継承休むに似たりというだけ 継承そのものの是非とは無関係 その昔、多重継承をまず否定ありきで喚いていた連中とお前ら同じだ : デフォルトの名無しさん (ワッチョイ 7d8a-1vVt) [sage] 2018/12/21(金) 13:52:55.77:Vi7rbNdd0 C++亡者はなんでCのスレで延々と雑談するんだろう : デフォルトの名無しさん (アメ MM59-wUZI) [sage] 2018/12/21(金) 14:11:28.71:PiZ4lBZmM 継承より委譲。継承は間違いだったby OOPコミュニティ一同 ttp://https://refactoring.guru/replace-inheritance-with-delegation : デフォルトの名無しさん (アウアウウー Sac9-0FqV) [] 2018/12/21(金) 15:27:16.62:mfb3XB1ua そうだよな。普通のオブジェクト指向言語は順序に関わらず継承できるよな。 とすると普通でない言語での話かまたは彼が何かを誤解しているということかな。 : デフォルトの名無しさん (アウアウウー Sac9-TLad) [sage] 2018/12/21(金) 15:50:13.39:lfxw1L5ka 継承とはキャストと見つけたり : デフォルトの名無しさん (ワッチョイ 236e-q1e7) [sage] 2018/12/21(金) 16:19:17.16:FGbnqlsP0 継承より委譲を使うべき事例を挙げているにすぎない : デフォルトの名無しさん (アメ MM59-wUZI) [sage] 2018/12/21(金) 16:31:46.47:PiZ4lBZmM 継承より委譲を使うべきかは「あとで」発覚する。 犬クラスや猫クラスを哺乳類クラスから継承させて喜んでいるところに、問題(カモノハシ)は突然やって来るのだ。 そうなってからあわてるよりも、常に委譲を使い、継承のことなど忘れさるべきだ。 : デフォルトの名無しさん (ワッチョイ 95b3-5YD5) [sage] 2018/12/21(金) 17:02:28.85:vKEYTKwK0 そういやgolangは継承捨てちゃったんだよな : デフォルトの名無しさん (ワッチョイ 236e-q1e7) [sage] 2018/12/21(金) 17:07:16.46:FGbnqlsP0 1行目と2行目以後、言ってることが矛盾してるぞ 「あとで」か「常に」か、どっちなんだ : デフォルトの名無しさん (バッミングク MM2b-o5ET) [sage] 2018/12/21(金) 17:16:20.54:QpLg2mIsM 横からだけど、全く矛盾してないぞ? どこが矛盾してるんだ? : デフォルトの名無しさん (アウアウウー Sac9-0FqV) [] 2018/12/21(金) 17:31:07.39:mfb3XB1ua うん。矛盾してない。 日本語よくわからない人かな? : デフォルトの名無しさん (ワッチョイ a3d4-q1e7) [sage] 2018/12/21(金) 20:19:10.57:lsetsG4i0 初心者です。 カモノハシは哺乳類ですが、哺乳類クラスを継承することでどのような問題が発生するのでしょうか? よろしければ教えてください。 : デフォルトの名無しさん (ワッチョイ 3564-Xnhl) [sage] 2018/12/21(金) 20:44:04.05:QZspeJhP0 妊娠メソッドが規約に違反してしまいます。 : デフォルトの名無しさん (ドコグロ MM41-ckn8) [sage] 2018/12/21(金) 20:45:30.64:choQhZIjM だから継承でもなんでもなくて構造体の最後の要素の長さを可変長にしてるだけ 99.9%問題ないけど厳密には規格違反だったと思う : デフォルトの名無しさん (アウアウカー Sa51-TLad) [sage] 2018/12/21(金) 20:47:05.89:b6qAhl4Oa いつ哺乳類と分類できたんだという話だよな。 その分類もいろんな切り口があるわけだし。 : デフォルトの名無しさん (ワッチョイ a3d4-ygkw) [] 2018/12/21(金) 20:57:17.23:lsetsG4i0 なるほど、カモノハシは胎生ではなくて産卵するので問題になりうる、ということですね。 ありがとうございます。 : デフォルトの名無しさん (ワッチョイ f54e-Wbbf) [sage] 2018/12/21(金) 21:37:11.59:81A29Thc0 オライリーのアルゴリズムクイックリファレンス持ってる人居ませんか? アルゴリズムを勉強したいんですけど、結構ソースコードがあって分からないです : デフォルトの名無しさん (ワッチョイ 9b7f-pJxC) [sage] 2018/12/21(金) 22:40:36.57:HoIQMu/H0 あれ肝心なところは「ここでC++のテンプレートを使って・・」とか 「○○ライブラリを使って・・」となってて、結局よく分からんかった。 : デフォルトの名無しさん (ワッチョイ d54f-OVaG) [sage] 2018/12/21(金) 22:46:23.26:e7/cJrp90 本当にゆとりはどうしようもないな。 初心者は絶対的な知識量が足りてないから、やってることは結果的に「老害」と一致する。 C言語なんて20年ほぼ変更無し=ここ20年の進歩を「文法的には」取り込めてないのだから、 文法から入るお前らみたいな奴は必ず「老害」からのスタートになってしまうし、実際そうなってるだろ。 この点、やはり初心者は新しい言語からやるべきなのさ。 そうすれば、少なくともお前らのような「古くて非効率な手法しか使えない馬鹿=『老害』」にはならずに、 「新しくて効率的な方法しか使えない新人」になるが、こっちの方がずいぶんマシだ。 とはいえ、新しすぎて評価が固まってない言語も危険ではあるが。(具体的にはGoがゴミ) 「継承」に粘着している馬鹿は継承の実装を考えてみるといい。 C++は当初はトランスパイラ=C++文法をC言語に変換してCコンパイラを通すもの、だったと聞く。 同様に、C++でのOOPをC言語で実装する際、どう変換するか考えてみるといい。 正解は、他言語のOOPの実装をググれば得られるだろう。 継承については色々議論があるが、今回のようにコンテナの場合は、 ListBaseクラスを継承しテンプレートでデータ構造に幅を持たせるのがとりあえずの正解だよ。 おそらくstd::list<T>もそうなってると思うぜ。(ただし速度重視で全テンプレート展開もあり得るが) そしてC言語においても同等のオブジェクトコードが得られるソースコードを記述しろ、という話であってさ。 (それ以前にコンテナが欲しければ素直にC++使った方がいいと思うが) というか、C++は改良版Cなんだから、C++を食わず嫌いするのも典型的な老害なんだよ。 当然だがC言語が抱えていた問題点は修正されてる。 コンテナ等も完全に整備されてる。 スマポ()とかやってるC++erは馬鹿だから無視でいいが、 Cの問題点に直面してるのにC++を試してない奴は定義通りの老害だよ。 Cが出現した頃とはずいぶん状況が変わっているわけでさ。 ttp://https://cpplover.blogspot.com/2016/05/mitsicp.html : デフォルトの名無しさん (ワッチョイ bd7b-wUZI) [sage] 2018/12/21(金) 23:15:48.04:pse73zvs0 だったらC++スレ行けば? PythonやJSのスレでRubyのウンコード貼り付けて宣伝する糞キチガイと同じ臭いすんだわお前。クサい。 : デフォルトの名無しさん (ワッチョイ d54f-OVaG) [sage] 2018/12/21(金) 23:43:53.69:e7/cJrp90 文句言う前にOOPを理解しろよ。お前は完全に「老害」だぞ。 そしてCでもOOPに準じてコードを書け、という話であってさ。 ゆとりは幼稚すぎる。 もうちょっとましな反論は出来ないのか? ○○と同じ臭いがする、というのもまたお前らのパターンのようだが、 結局の所、当たってる奴がいないだろ。 それは、ゆとりの脳は1bitの容量しかなく、 「ぼくのすきなひと」「ぼくのきらいなひと」しか解像度がないからだ。 そんなことやり続けてるからお前らは幼稚園児のままなんだよ。 が、マジな話、C言語でもOOPを理解してコーディングするのとデタラメにやるのではずいぶん違うから、 OOPはマジで理解しとけ。 むしろC言語(というか各言語)は方言でしかなく、 プログラミングパラダイムとしてのOOPの方がつぶしが利くし、有用だ。 : デフォルトの名無しさん (ワッチョイ cb80-5YD5) [] 2018/12/21(金) 23:46:17.30:j37Ohb1y0 ttp://https://ideone.com/WQ3pQP animal ┣platypus ┗bird━penguin 普通にCでも継承はできる 低学歴知恵遅れだとCではできない もともと継承なんか使ってもいいことなんかないからな 低学歴知恵遅れほど嬉しがって継承使う : デフォルトの名無しさん (ワッチョイ cb80-5YD5) [] 2018/12/21(金) 23:58:01.00:j37Ohb1y0 何度もいうが オレレベルぐらいでないとオブジェクト指向はムリ 何度もいうが 低学歴知恵遅れにオブジェクト指向は キチガイに刃物 何度もいうが この板にいるような低学歴知恵遅れに オブジェクト指向はムリ : デフォルトの名無しさん (ワッチョイ d54f-OVaG) [sage] 2018/12/22(土) 00:14:40.06:ruBkeT7Z0 毎回お前のその無駄な情熱はどこから来るのか謎だが。 一応言っておくと、parentを持つその方法は「包含」であって、「継承」ではないぞ。 この際大した問題ではないが。 : デフォルトの名無しさん (ワッチョイ cb80-5YD5) [] 2018/12/22(土) 00:18:09.34:b6CiPLFa0 低学歴知恵遅れは vtableも知らないのか レスから頭の悪さがにじみ出てtる : デフォルトの名無しさん (ワッチョイ cb80-5YD5) [] 2018/12/22(土) 00:20:00.60:b6CiPLFa0 仮想関数でないメンバ関数は はっきりいって普通のCの関数と同じだからな まず低学歴知恵遅れは基本的なことがわかってない こんなのがC++つかうとかムリ : デフォルトの名無しさん (ワッチョイ d54f-OVaG) [sage] 2018/12/22(土) 00:22:20.24:ruBkeT7Z0 あとついでに言っておくと、リストについては、 ・おそらくポインタに不慣れだから無駄に引っかかってるだけ ・どうせリストなんて使わない (=事実としてその京産大の先生は使ったことがないから間抜けなインタフェースになってる) ・そもそもコンテナが必要ならC言語以外では普通に標準orフレームワークで整備されてる (=ただ単に再開発してるだけ) だから、引っかかった場合はとりあえず無視でいいと思うが。 : デフォルトの名無しさん (ワッチョイ cb80-5YD5) [] 2018/12/22(土) 00:23:04.93:b6CiPLFa0 もうな低学歴知恵遅れはレスすればするほど 低学歴知恵遅れなのを自白することになるからな レスしないほうがいい : デフォルトの名無しさん (ワッチョイ d54f-OVaG) [sage] 2018/12/22(土) 00:34:25.01:ruBkeT7Z0 vtableはフラットに構成されてるものなんだよ。 お前のは階層構成になってるし、実際、直接呼び出せてないだろ。(無駄にオーバーヘッドがある) それは「継承」ではない。 まあ正直そこら辺は割とどうでもいいのも確かだが。 : デフォルトの名無しさん (ワッチョイ 2312-OVaG) [sage] 2018/12/22(土) 00:35:32.56:mRtO7h8x0 C言語なら俺に聞け 148 ttps://mevius.5ch.net/test/read.cgi/tech/1537347410/37 >なんだこれ?引数 void って初めて見たぞ。文法的にありなのかこれ? : デフォルトの名無しさん (ワッチョイ cb80-5YD5) [] 2018/12/22(土) 00:36:02.90:b6CiPLFa0 また低学歴知恵遅れが もっと頭悪いこといいだしてるわ : デフォルトの名無しさん (ワッチョイ cb80-5YD5) [] 2018/12/22(土) 00:38:18.48:b6CiPLFa0 もうね 支離滅裂すぎて コメントしようがない それぐらいめちゃくなこと書いてる自覚が 低学歴知恵遅れにはない : デフォルトの名無しさん (ワッチョイ cb80-5YD5) [] 2018/12/22(土) 00:41:48.52:b6CiPLFa0 頭悪すぎると 自己防衛本能が働くのかもしれないが 脳みそが空想の世界にいくらしいな どうやったらそんな頭悪いええ加減なレスを 自信満々に淡々と書けるのか不思議でならないわ : デフォルトの名無しさん (ワッチョイ 236e-q1e7) [sage] 2018/12/22(土) 01:48:01.62:ghZDfTzQ0 20年て、どこから出てきたマジックナンバーだ? それを言うなら29年なんだが : デフォルトの名無しさん (ブーイモ MM43-6EUo) [sage] 2018/12/22(土) 07:52:56.06:gJp1vt+rM Linusがcppを排したのは正解だったんだな : デフォルトの名無しさん (ワッチョイ 03eb-549A) [sage] 2018/12/22(土) 08:27:41.36:LEZtop+80 低学歴知恵遅れ&お前ら連呼の人が、引数 void って初めて見たぞ の人と同一人物だったとは : デフォルトの名無しさん (ワッチョイ cb81-q1e7) [sage] 2018/12/22(土) 10:05:42.90:Ym27DU080 C言語のスレだから、そろそろ話をC言語に戻そうよ C++の話は専用スレでも立ててそこで継続してくれ : デフォルトの名無しさん (ワッチョイ 9be7-omPw) [sage] 2018/12/22(土) 10:15:17.63:j02wAUXX0 iZ-Cは魅力的なAPIがいっぱいだよ。 : デフォルトの名無しさん (ワッチョイ 4593-AeXI) [sage] 2018/12/22(土) 11:12:54.97:BR4LVxYj0 新設するまでもなくC++のスレッドも複数あるからなぁ。 濃いネタばっかりで「C++はいいぞ、早くCから移行しろ」程度じゃ 相手にしてもらえないレベルだと思うけど。 …いや、俺も理解できてるわけじゃないがな。 : デフォルトの名無しさん (アウアウカー Sa51-TLad) [sage] 2018/12/22(土) 11:51:34.32:aSH6WKCWa Cでオブジェクト指向っぽく書くと継承しなくていいのがいいよね。 冗長にはなるけど。 : デフォルトの名無しさん (ワッチョイ bd7b-wUZI) [sage] 2018/12/22(土) 12:11:28.34:q6a6sTJo0 OOP自体が間違い。OOP書きたいのにC使うのは間違い中の間違い。 : デフォルトの名無しさん (アウアウカー Sa51-TLad) [sage] 2018/12/22(土) 12:26:28.69:1IcOSx0Ja じゃあどう書くわけ? デザインパターンを常に排除すんの? : デフォルトの名無しさん (ワッチョイ 2361-9KOk) [sage] 2018/12/22(土) 12:55:54.08:FB4FQRnX0 関数の第一引数を構造体にするならファイルポインターもオブジェクト指向に なっちゃうからな。 仮想関数テーブルとかつくっちゃってるのかな? : デフォルトの名無しさん (ワッチョイ c5f2-5YD5) [sage] 2018/12/22(土) 13:17:52.98:GdiBSH+o0 昔CでのOOPが流行った頃は「オブジェクト指向=継承」みたいな捉え方が主流だったから 構造体にvtable持ってピギーバックで継承して、って感じだったな。 : デフォルトの名無しさん (ワッチョイ d54f-OVaG) [sage] 2018/12/22(土) 13:20:28.89:ruBkeT7Z0 それは一理ある。 俺自身はCもclass構文を取り入れるべきだと思っているが、実際そうならないのは、 ・分かっている奴が書けば何とかなる からなのも事実だ。 そして「継承」が無駄に嫌われているのは、Javaでは関数ポインタを提供しなかった為、 継承を使うべきでない局面で使われまくり、余計に意味不明になる事が多かったからだ。 デザインパターン自体がバッドプラクティス集なのもそのせいだ。 あれも本来は「第一級関数」を持つ言語で書き直し、 既存のJavaで書かれたデザインパターンは老害ゴミとして捨て去られるべきなのさ。 ただ、本来「継承」を用いるべき局面については当然「継承」の方がフィットするわけで、 Goみたいに × 継承に代わる便利なものを用意したから継承が不要となった ○ ただ単に継承/仮想関数を排除しただけ の言語は完全に乗り遅れてる。あれならCで書いても同じだし。 (Goは元から80年代の言語だと揶揄されていたが、全くその通りだった) とはいえ、Goを作った連中は君と同じ感覚なのだろうとは思う。 君はGoを気に入るかもね。 : デフォルトの名無しさん (アメ MM59-wUZI) [sage] 2018/12/22(土) 13:27:38.05:nwnvhQAlM > 本来「継承」を用いるべき局面については当然「継承」の方がフィットする 設計時どれだけそう思い込んでいても、のちに覆され得る。それは設計時には知り得ない。 単純に継承のことは完全に忘れ去ってしまうべきである。 そんなものは無かった。 : デフォルトの名無しさん (ブーイモ MM89-Lq2G) [sage] 2018/12/22(土) 13:50:48.44:Hmvw7Yp+M 老害ゆとりのvoid君 相変わらず言ってる事が支離滅裂で草 : デフォルトの名無しさん (ワイモマー MM43-ESEE) [sage] 2018/12/22(土) 13:56:16.04:BEf9L/k+M void君がよく「ゆとり」連呼してるけど 彼本人はどうなん? 発言内容からはキャリアを感じさせないし そもそも年齢もせいぜい35くらいじゃないの? : デフォルトの名無しさん (ワッチョイ cb81-q1e7) [sage] 2018/12/22(土) 13:59:01.93:Ym27DU080 カサブランカの世界だな : デフォルトの名無しさん (アウアウカー Sa51-TLad) [sage] 2018/12/22(土) 14:00:34.13:IG9dO8ZOa そうね。便利なマクロ用意したら結局それC++じゃんみたいな。 無遅刻無欠勤がとりえでコピペの手間を厭わないsubversion大好きかつ注意深い人達が作った、再利用を全く考えないワンオフ物の超巨大クラス構造みたいなの見ると、継承は初めから無い方がいいなと思うよ。ほんとつらい。 : デフォルトの名無しさん (ワッチョイ d54f-OVaG) [sage] 2018/12/22(土) 14:03:16.29:ruBkeT7Z0 まあ実際それをやったのがGoな訳で。そう思う人がいるのも事実だろうさ。 (俺はGoはポシャると思っているけど) : デフォルトの名無しさん (ワッチョイ bd05-n0lc) [sage] 2018/12/22(土) 14:26:09.40:9V9oS+990 書き方次第だよ。linuxで最も有名なライブラリの一つであるglibは継承してるし : デフォルトの名無しさん (ワッチョイ 236e-q1e7) [sage] 2018/12/22(土) 15:34:01.41:ghZDfTzQ0 空想論の域を出てないなあ : デフォルトの名無しさん (ワッチョイ 35d2-7Qhd) [sage] 2018/12/22(土) 21:50:01.34:H4+WRP2A0 死にたい : さまよえる蟻人間 ◆T6xkBnTXz7B0 (スフッ Sd43-NaUf) [sage] 2018/12/22(土) 21:56:40.29:Op/4E6E/d 死にたいのは何かが足りないから。 その何かを探しに旅行へ行こう。 旅人は旅に旅立つ。 : デフォルトの名無しさん (ワッチョイ cb81-q1e7) [sage] 2018/12/22(土) 22:42:35.80:Ym27DU080 片道切符に誘うのやめろ! : デフォルトの名無しさん (ブーイモ MMeb-6EUo) [sage] 2018/12/23(日) 01:05:41.98:vlmCWjWkM Cの世界へ逝こう : デフォルトの名無しさん (ワッチョイ 9b9f-t5R+) [] 2018/12/23(日) 11:39:57.84:nNQ759QC0 Cぬな : デフォルトの名無しさん (ワッチョイ 9b7f-pJxC) [sage] 2018/12/23(日) 12:16:27.31:qYRfL2gu0 全てがCになる : デフォルトの名無しさん (ワッチョイ 9b9f-q1e7) [sage] 2018/12/23(日) 12:39:52.20:nNQ759QC0 С : デフォルトの名無しさん (ワッチョイ 95b3-4fyn) [sage] 2018/12/27(木) 23:00:48.46:1iKhYige0 全てがFになる : デフォルトの名無しさん (ワッチョイ 7681-SF4R) [sage] 2018/12/27(木) 23:16:13.58:fn4IYFyt0 そして、全てはぬるぽ : ◆QZaw55cn4c (ワッチョイ 3a60-I/qK) [sage] 2018/12/27(木) 23:48:52.00:59YrudQc0 冷密=「冷たい密室と博士たち」の方が好きです他は雰囲気ワードを散りばめただけのどちらかというと駄作に見えてしまうのですが、唯一これは極上のロジックだと思うのです : デフォルトの名無しさん (ワッチョイ b6d7-SF4R) [sage] 2018/12/28(金) 06:05:14.46:4iocbykD0 このスレで全てがFつーたら、-1のことだろ : デフォルトの名無しさん (アウアウウー Sa39-Z33a) [] 2018/12/28(金) 09:26:28.29:Bx5qAOnaa 255もよろしく : デフォルトの名無しさん (ワッチョイ 5a68-5EXd) [sage] 2018/12/28(金) 17:38:41.28:SNiJRt+t0 #defineを使って関数を定義するテクニックがあります #define kansuu() (ここに関数の内容を書く) 一時的にその関数を無効にしたいときはどうしたらいいでしょうか? #dfine kansuu() こんな感じにkansuu()以降を空白にしておくのがいいですか? : デフォルトの名無しさん (ワッチョイ 75b3-ezLB) [sage] 2018/12/28(金) 17:40:24.93:FW6v28vq0 #define kansuu() (いっぱい書いてる) #undef kansuu #define kansuu() : デフォルトの名無しさん (ワッチョイ b6d7-SF4R) [sage] 2018/12/28(金) 17:54:33.91:4iocbykD0 void kansuu(void) { ここに関数の内容を書く } #define kansuu() (ここに関数の内容を書く) int main(void) { kansuu(); //マクロ (kansuu)(); //関数 } : デフォルトの名無しさん (ワッチョイ 5a12-V34k) [sage] 2018/12/28(金) 23:36:56.58:le4HGTEI0 よくあるdebug printfのアレじゃね : デフォルトの名無しさん (ワッチョイ 5a68-5EXd) [sage] 2018/12/29(土) 00:42:29.78:bhEXf4Rq0 > #define kansuu() kansuu()の後には何も記述しないのが正しいスタイルってことですね 関数とマクロ、そういう使い分けができたんですか・・・ : デフォルトの名無しさん (アウアウウー Sa39-sSsZ) [sage] 2018/12/29(土) 10:25:00.95:PBX00OFRa -Dじゃあかんのか? : デフォルトの名無しさん (アウアウウー Sa39-Z33a) [] 2018/12/30(日) 17:16:13.69:i7KTb38La いいんじゃないか? コンパイラのコマンドがどう解釈するかに掛かってはいるが。 : デフォルトの名無しさん (ワッチョイ 0d01-03bl) [sage] 2018/12/31(月) 21:39:38.58:MpZmteVw0 よくやるのは #ifdef HOGE #define func() ここに処理 #else #define func() #endif で、-DオプションでHOGEの定義を切り替える。 好みや宗教により#ifdefを#if definedにしたり、HOGEの値により分けたり、プリプロセッサを使わず処理のifで分岐したり。 : デフォルトの名無しさん (ワッチョイ 9af1-SF4R) [sage] 2019/01/01(火) 01:03:53.24:JA4reBf90 初心者です。 あけましておめでとうございます。 本年もよろしくお願いいたします。 : デフォルトの名無しさん (ワッチョイ ee8c-+vhK) [sage] 2019/01/02(水) 20:01:12.90:RordgnsG0 かっぱらいプログラム言語と言うのが出来そうな予感がした。 : デフォルトの名無しさん (ワッチョイ a97c-88M8) [sage] 2019/01/03(木) 09:41:01.80:MUpMksOg0 Linux環境のデバドラと組み込みの違いって何ですか? : デフォルトの名無しさん (ワッチョイ 49e9-khkO) [sage] 2019/01/03(木) 10:32:23.68:H9RYMXki0 デバイスドライバというのはデバイスをドライブするプログラムである。 組み込みというのはまあ特定の製品を制御するための専用のシステムである。専用というのはつまり汎用ではないということで、要はPC向けではないということである。 : デフォルトの名無しさん (ワッチョイ a97c-88M8) [sage] 2019/01/03(木) 10:38:18.81:MUpMksOg0 ありがとうございます! : デフォルトの名無しさん (アウアウウー Sa9d-KJeM) [] 2019/01/03(木) 16:57:06.44:38Nc8DQPa LinuxならLinuxに合わせた形でデバイスとのやりとりを作る必要があるが、そうでないならその辺は自由になる。 : デフォルトの名無しさん (ワッチョイ a97c-88M8) [sage] 2019/01/03(木) 17:09:14.18:MUpMksOg0 なるほど 自分はLinuxに合わせて作ろうと思ってます : デフォルトの名無しさん (ワッチョイ 1301-4rLr) [sage] 2019/01/03(木) 19:27:30.38:Gl0+wAUb0 そもそも組込み機器でLinux使うこともあるからの質問自体がイミフなんだが : デフォルトの名無しさん (ワッチョイ fb02-xhm2) [] 2019/01/03(木) 23:20:49.06:x5GCx+Ws0 まあ、組み込みとだけ言ってしまうとなんでもありになってしまうな。 Windows Embedded なんてのもあるし。組み込みだからといってOSがないとは限らない。 というか今となっては何も入ってない方が珍しいかな? : デフォルトの名無しさん (ワッチョイ 81ff-xhm2) [sage] 2019/01/04(金) 07:14:05.80:w3lkHMGF0 わざわざ「組み込み」と言う意味があるかどうかだな ノートPCをロボットの脳として搭載することもできるが OSがWindows10 Homeじゃ組み込みとは言えないのか : デフォルトの名無しさん (アウアウウー Sa9d-KJeM) [] 2019/01/05(土) 18:26:16.82:pJbMq/2ja 今じゃ小さいの幾らでもあるからなんでも組み込みにできるな。 コストと耐久性の問題はあるが。 : デフォルトの名無しさん (ワッチョイ 8901-ahzL) [sage] 2019/01/06(日) 21:17:49.87:LPav389N0 一時はECUなど特定の分野を除いて組み込みもLinuxに席巻されそうになっていたけど、最近のIoTブームのせいか超小型超低消費電力のマイコンのニーズが高くなり昔ながらの職人芸的組み込みソフトが復権してきてるイメージあるわ。 : デフォルトの名無しさん (アウアウウー Sa9d-khkO) [sage] 2019/01/06(日) 21:36:48.83:rMmabB99a まあプログラムはむしろ楽だね。 貧弱なプラットフォームの方が。 : デフォルトの名無しさん (ワッチョイ 997b-2hSR) [sage] 2019/01/07(月) 06:58:10.64:k1Vvc+OE0 PICなんかを使った、電子工作の延長みたいな 「Cでもプログラムできるワンチップ」ていうジャンルも 盛んになってるみたいだし。 あそこまで小さくなると、直接マシン語で考える方が 手っ取り早いような気がするわ。 : デフォルトの名無しさん (ワッチョイ 81ff-xhm2) [sage] 2019/01/07(月) 17:11:01.86:Cio2TleD0 気がするんではなく実際そうだ あれはアセンブラで使うもの : デフォルトの名無しさん (ワッチョイ 0beb-xhm2) [sage] 2019/01/07(月) 17:19:52.92:YLZmdTQx0 アセンブラで出来てC言語で出来ないことがイマイチわからないです。 なんか具体的な例などあれば・・・ : デフォルトの名無しさん (ワッチョイ 8b63-xhm2) [sage] 2019/01/07(月) 17:22:48.61:ArcgbVcT0 C言語使う為には最低限コンパイラが動く環境を 用意しないと行けないが アセンブラは比較的簡単に実装できる いざとなったら16進で入力すれば良いし : デフォルトの名無しさん (ワッチョイ 0beb-xhm2) [sage] 2019/01/07(月) 18:58:49.76:YLZmdTQx0 なーるほど!コンパイラがいらずでCPUやメモリ使えるってことですね! それは確かに便利だありがとうございます。初めてアセンブラの利用価値に合点がいきました。アセンブラわからないですが(´・ω・`) : ◆QZaw55cn4c (ワッチョイ d347-5am+) [sage] 2019/01/07(月) 19:01:38.90:c5u8F3uW0 自己書き換えプログラム、とかはどうですか? : デフォルトの名無しさん (ワッチョイ 8b63-xhm2) [sage] 2019/01/07(月) 19:06:52.70:ArcgbVcT0 8ビットCPUの頃はやった事あるけど 今のCPUだと難しいのではないかな : デフォルトの名無しさん (ワッチョイ 81ff-xhm2) [sage] 2019/01/07(月) 19:13:29.39:Cio2TleD0 真のハーバードアーキテクチャだとな : デフォルトの名無しさん (ワッチョイ 93f1-xhm2) [sage] 2019/01/07(月) 19:20:28.86:aW5a0RDY0 コンパイラが要らなくてもアセンブラは必要なものじゃないの? : デフォルトの名無しさん (ワッチョイ 2b7c-xhm2) [sage] 2019/01/07(月) 19:34:19.06:VIu/Fipc0 8bit時代、サブルーチン程度ならニーモニックどころかダンプ直打ちしてた基地外もいた : デフォルトの名無しさん (ワッチョイ 8901-ahzL) [sage] 2019/01/07(月) 19:41:40.02:0y/PgDfv0 おっさん世代はZ80ぐらいなら主要なニーモニックは未だにヘキサで覚えてる。 : デフォルトの名無しさん (ワッチョイ 81ff-xhm2) [sage] 2019/01/07(月) 21:33:52.93:Cio2TleD0 ごめんな コーディング用紙つかってた I/Oの鬼ダンプとか今でも思い出すよ : デフォルトの名無しさん (ワッチョイ 6900-DsDM) [sage] 2019/01/07(月) 21:46:22.29:E11lC+b50 このスレの平均年齢いくつなの……w : デフォルトの名無しさん (アウアウウー Sa9d-KJeM) [] 2019/01/07(月) 21:58:59.48:fnTlHl64a それだけでなく本当にCだけではできない事があるのが普通だ。CPUにもよるけどね。 何か特定のレジスタに値をセットしないと何かの機能が使えないみたいな場合はCではレジスタの指定をして値をセットすることができないので最低でもその部分だけインラインアセンブラにしたり全部アセンブラで書いたりする(またはそれ用に拡張がされたCコンパイラを使う)。 その他、80系やx86系ってI/Oポートあるが、あれはCからはアクセスできないのでその部分はアセンブラにする。 まあしかしそういうのはほとんどデバイスドライバの中で必要になる事なので普通は一般ユーザは考えなくてもよくなっている。 : デフォルトの名無しさん (アウアウウー Sa9d-KJeM) [] 2019/01/07(月) 22:02:17.91:fnTlHl64a それ昔は普通に居た。何せアセンブラなかったりあっても高かったりで使えないことが多かったからな。 3E 00 LD A,0 のような。 : デフォルトの名無しさん (ワッチョイ 2b7c-xhm2) [sage] 2019/01/07(月) 22:31:49.44:VIu/Fipc0 XOR使おうぜ : ◆QZaw55cn4c (ワッチョイ d347-5am+) [sage] 2019/01/07(月) 22:37:49.75:c5u8F3uW0 思い出した!たしか 386 にて real mode から protected mode に移る命令は C では書けませんね… 他にもなにか面白い話があったような気がしましたが、もう思い出せない…実は 286 はリアルモードに戻れるとか… HALT を言ってみよ : デフォルトの名無しさん (ワッチョイ d901-b7+Q) [sage] 2019/01/07(月) 23:02:03.29:HO7xoVU80 LD は ゼロやキャリーフラグ変化するんだっけ? : デフォルトの名無しさん (ワッチョイ 6992-4tJW) [] 2019/01/07(月) 23:06:04.57:JlpUfKel0 オムニバースを解析するソフトウェアを開発するにはどうすれば良いですか? : デフォルトの名無しさん (ワッチョイ 8b63-xhm2) [sage] 2019/01/07(月) 23:11:49.25:ArcgbVcT0 逆じゃないか? 286では戻れずに、不便だったけど 386では戻れるようにしたとか : デフォルトの名無しさん (ワッチョイ 8bf2-NR1r) [sage] 2019/01/07(月) 23:51:44.52:4vLmnBNE0 76 : ◆QZaw55cn4c (ワッチョイ d347-5am+) [sage] 2019/01/07(月) 23:54:17.89:c5u8F3uW0 >286では戻れずに、不便だったけど 通説ではそうなんですが、「実は…」という話があった気がします、そのため「だけ」に 286機を確保していたつもりだったのですが、うっかり捨ててしまった、やりたかったことを今思い出してしまった… : デフォルトの名無しさん (ワッチョイ 8b63-xhm2) [sage] 2019/01/08(火) 00:17:51.75:oEiIhl5B0 NECのPC98での話ですが、プロテクトモードとリアルモードを行き来するのに リセットで実装していたと聞きました(死中に活ありみたいな感じ)。 「実は・・・」って話は知らないw : デフォルトの名無しさん (ワッチョイ 81ff-xhm2) [sage] 2019/01/08(火) 07:38:36.71:iKVSkTiF0 0F 05 LOADALL : デフォルトの名無しさん (ワッチョイ 13d2-mHCk) [sage] 2019/01/08(火) 07:56:15.99:hvlZBAYo0 なんか286はPC用じゃなく工業製品用を想定して設計されてたって記事読んだ記憶が。 : デフォルトの名無しさん (ワッチョイ d352-JBiS) [sage] 2019/01/08(火) 08:00:10.01:3ZWgvjCS0 さあ、C言語の話をしようか。 : デフォルトの名無しさん (アークセー Sxc5-mE+R) [sage] 2019/01/08(火) 10:13:36.31:qFTAFG9Fx 昔から疑問なんだけど、マップドIO制御を除いてC言語だけでRTOSのカーネルは書けるのだろうか? タスク同士のシステムコール発行によるプリエンプトはsetjmp/longjmpで何とかなりそうだけど、割り込みハンドラからのシステムコールによるタスクディスパッチは何をどうあがいてもスタックポインタの直接書き換えが必要な気がしてならない。 : デフォルトの名無しさん (JP 0H95-OLjn) [sage] 2019/01/08(火) 10:40:29.19:qjoMs7mdH ハンドラ内でsetjmpしたらどうなるんだろう : デフォルトの名無しさん (ワッチョイ 81ff-xhm2) [sage] 2019/01/08(火) 11:39:30.49:iKVSkTiF0 CだけでOSなんて、Cは元々そういう使い方を想定していない 実際UNIXは5%がアセンブラだった 特権命令は誰か言っていたとおりだし PCとSPのようなCが前提にしているものの初期化をCでは絶対に書けない : デフォルトの名無しさん (ワッチョイ 6900-DsDM) [sage] 2019/01/08(火) 13:48:48.48:we27gJDs0 でも最近のUEFIとかなら全部Cで書かれたOSでも起動できそうだけどね。 : デフォルトの名無しさん (オイコラミネオ MM95-hx//) [] 2019/01/08(火) 16:18:38.83:rMmlRXYeM C言語を一番最初に学んで、C++、ほかスクリプト言語と使っているが、C言語で文字列処理ライブラリーってみんなどうしてる? C++ だとboost C++ とかいろいろなライブラリがあって、オープンソースだったり商用利用できたり、物によってはGPLだったりするけど、そういうのに相当するC言語の文字列処理ライブラリってある? 各自で作りためたオレオレライブラリをみんな使ってるの?? : 0794 (オイコラミネオ MM95-hx//) [] 2019/01/08(火) 16:22:15.64:rMmlRXYeM つまり今から俺が自分用に文字列処理ライブラリ(独りよがりのオレオレライブラリ)を作る意味があるのか、俺が知らないだけでboostみたいに出来合いの洗練されたライブラリがあるのか…な…? Pythonとかは言語仕様で十分複雑なことが出来るし、ホントC言語だけなんでこんな毎回面倒な目に合うのだろう。 : デフォルトの名無しさん (ワッチョイ 81ff-xhm2) [sage] 2019/01/08(火) 16:37:12.54:iKVSkTiF0 Cを修行中ならオレオレライブラリを作ることにも充分に意味がある 既製品を使うことしかできないくせに天狗になってるやつが時々いる 使っているライブラリがオレオレか既製品かといった手段ではなく 知的な旅でどこへ行けたかが問題であることを見失うな : デフォルトの名無しさん (アウアウウー Sa9d-KJeM) [] 2019/01/08(火) 16:56:52.52:LJT6VvGba 俺はboostを知らない。 Cではあまり複雑な文字列処理を書かないしな。 複雑なのはPerl使ったりする。 : デフォルトの名無しさん (オイコラミネオ MM95-hx//) [] 2019/01/08(火) 18:11:31.32:rMmlRXYeM みんなありがとう Cは全然修行中なわけではなく、別に必要にも迫られてない(C++もPythonも使える恵まれた環境) ただ必要になったとき、みんなどーしてんだろうと。 C言語で文字列処理なんてするシチュエーションが少ない、とかかな。 初めてPython使ったときは感動した。簡単すぎて。C++では修行中に文字列処理ライブラリとかオレオレライブラリ作成やってみたけど、できあがった物がどう見てもboostの下位互換で悲しかった。 だからC言語で良いライブラリがあったら知っておきたいと思ったんだ。 : デフォルトの名無しさん (ワッチョイ 2b7c-xhm2) [sage] 2019/01/08(火) 18:41:54.19:MwaFnBBQ0 頑張れば書けるよ! Cというよりは Cの文法を使った何か になったけどな・・・ : デフォルトの名無しさん (JP 0H95-OLjn) [sage] 2019/01/08(火) 19:47:06.06:qjoMs7mdH glibとか? : デフォルトの名無しさん (ワッチョイ 7be9-uFMA) [sage] 2019/01/08(火) 22:16:50.19:BZbwJw/70 ちょっとすみません gccの最適化オプションの-O2を使った場合に動作がおかしくなったりすることはありますか? : デフォルトの名無しさん (ワッチョイ 8b63-xhm2) [sage] 2019/01/08(火) 22:19:56.62:oEiIhl5B0 あるかもしれないし、ないかも知れない そういうソースがあるなら、晒して皆に確かめてもらえ : デフォルトの名無しさん (アウアウカー Sa55-khkO) [sage] 2019/01/08(火) 23:00:38.10:E9NMc6wba ある。 多分これからvolatileに関するやりとりが始まる。 : デフォルトの名無しさん (ワッチョイ 7be9-uFMA) [sage] 2019/01/08(火) 23:28:52.41:BZbwJw/70 最適化したことでおかしくなったと言うわけではないんですが どうなのかなと気になったもので 具体的にはO2の中のどの最適化でバグが出ることがありますか? あとgccではなくg++でした : デフォルトの名無しさん (ワッチョイ 7be9-uFMA) [sage] 2019/01/08(火) 23:31:24.43:BZbwJw/70 volatileというものに気を付けないといけないわけですか : デフォルトの名無しさん (ワッチョイ d352-JBiS) [sage] 2019/01/08(火) 23:45:28.12:3ZWgvjCS0 仕様上規定されていない部分は最適化によって挙動が変わることがある。だから不確定な処理や誤った処理を書いていた場合に、これまでたまたま上手く動くコードが生成されていただけで、最適化によって挙動が変わってバグが顕在化することがある。 例えば、評価順序が不確定な処理を書いていたのがたまたま期待通りの順序で実行するコードになっていただけとか、不正なアドレスのメモリを参照や更新してしまっていたがたまたま問題がなかっただけだったとか。 : ◆QZaw55cn4c (ワッチョイ d347-5am+) [sage] 2019/01/09(水) 00:17:56.61:BRCoi/pn0 volatile は一切使わないことにしました… : デフォルトの名無しさん (ブーイモ MMdd-OLjn) [sage] 2019/01/09(水) 00:28:20.37:QEOONCVCM volatileにすべきところでしないから最適化でバグるんだよ : ◆QZaw55cn4c (ワッチョイ d347-5am+) [sage] 2019/01/09(水) 00:40:32.88:BRCoi/pn0 volatile すべきところ、って具体的にどういうところですか?それは本当に volatile にする必要があるのですか? : デフォルトの名無しさん (ブーイモ MMdd-OLjn) [sage] 2019/01/09(水) 01:08:46.29:QEOONCVCM メモリマップドIOと 共有メモリマルチプログラミングで 最適化時のアクセス省略防止。 : デフォルトの名無しさん (ワッチョイ 7be9-uFMA) [sage] 2019/01/09(水) 02:45:48.52:cump+mlU0 ありがとうございます そうであれば不確定な部分がなければバグはでないということですね 最適化用にプログラムの書き方も変える必要があるのかと思っていました volatileはライブラリの中で使っていそうですがきっと大丈夫でしょう : ◆QZaw55cn4c (ワッチョイ d347-5am+) [sage] 2019/01/09(水) 03:15:23.18:BRCoi/pn0 個人的には、memory-maped な世界はよくしらない(インテル系しかしらない…). shared memory って、特別なことはありましたっけ?マルチスレッドなら排他処理用のオブジェクト(pthread-mutex/cond)を使っておれば問題ないし、fork() の中と外で同じ変数をつつくときは…はて、どうしてたっけ? : デフォルトの名無しさん (ワッチョイ fb02-cuFO) [] 2019/01/09(水) 03:28:53.85:T8HUoC+c0 そういやvolatileってC言語の場合CPUによってはうまく行かない事がありうるのな。 例えば4バイトの整数にアクセスするとして、そのCPUが2バイトづつしか読み書きできなかったら必ず2回のアクセスになる。 すると上位バイトと下位バイトで取得した時間が違っていたり一度に4バイト全体の内容を書き換えられない。 : ◆QZaw55cn4c (ワッチョイ d347-5am+) [sage] 2019/01/09(水) 04:25:49.36:BRCoi/pn0 そういうのは のとおり、そのためのカラクリ(pthread等)を使用してアクセスするべきだと思います、裸で触ること自体が発想としてイカレているのではないでしょうか? : デフォルトの名無しさん (ワッチョイ 8b2c-otaJ) [sage] 2019/01/09(水) 04:49:03.78:/QFmT4Vc0 マイコンなどのIO アドレスを、PC 側のメモリのアドレスに関連付けているのだろう(Memory-mapped I/O)。 これで、PC側のアプリでは、PCのメモリを読み書きするだけで、マイコンの操作ができる PC側のメモリを読むと、マイコン側のメモリから読み込む。 読み込むと、マイコンの電圧が変わって、値が不定か逆などになる 通常は、pull up, pull down 抵抗などで、5V・0V にしているけど、 閾(しきい)値(Threshold)があって、 例えば、1V以下なら0V、4V以上なら5Vと判定される場合、1〜4Vは、不定になる まあとにかく、読み込むだけで電圧が変わる・リセットされるから、 読み込むだけでも、電圧の状態が変わる だから、IOアドレスを読むだけでも意味がある・状態を変えているので、 コンパイラで最適化・省略してほしくない! : デフォルトの名無しさん (ワッチョイ 81ff-xhm2) [sage] 2019/01/09(水) 05:40:56.66:4Rn8lGBj0 volatileと一切何の関係もねえし : デフォルトの名無しさん (ワッチョイ 997b-2hSR) [sage] 2019/01/09(水) 07:03:03.74:nmJLIVr10 いや、「Cのプログラムで変数(あるアドレス)を読むことが、 ハードウェア的には状態リセットの操作になっているから、 読めと指示した場所で必ず読み取り動作を行って欲しい」だから、 volatileの使い方のひとつとして正当でしょ。 ハードウェア的な内幕の説明が少々ぎごちない気がするけどね。 : デフォルトの名無しさん (アークセー Sxc5-mE+R) [sage] 2019/01/09(水) 07:55:50.33:YaNn8N94x 多バイトアクセスがatomicに行われないのはvolatileの守備範囲ではなくinterlockの守備範囲。 なのでCPUによってはvolatileがうまく行われないってのはvolatileに対する名誉毀損になる。 : 815 (ワッチョイ 8b2c-otaJ) [sage] 2019/01/09(水) 08:02:53.56:/QFmT4Vc0 マイコンなどのIO アドレス(port)を読み書きするには、その装置の手順が決まっている まず、制御ポートに、読み込むポート番号を教える。 そこで装置を制御できるようにするために、例えば、50μ秒待つ 次に、ポートから読み込む。 読み込まれたポートは、電圧の状態を変える 電気電子的動作の要件・時間が、厳密に決まっている。 ある回路を動作させるときに、回路を切り替えないといけない 電圧の高低で、ある回路の部分を止めて、異なる部分を動作させる(電流を流す)。 そのため、規定の時間よりも、速くアクセスできない : デフォルトの名無しさん (ワッチョイ 81ff-xhm2) [sage] 2019/01/09(水) 11:29:26.49:4Rn8lGBj0 電流を流すってのはバイポーラの場合だね 今ほとんどのコンピュータがCMOSで電流はゼロアンペアだ 寄生容量で交流成分が漏れたり貫通電流の問題はあるが それは信号が電流表現ということではない : デフォルトの名無しさん (ササクッテロレ Spc5-W220) [sage] 2019/01/09(水) 18:32:34.88:ur1geU61p 最適化でおかしくなる場合の例としては潜在的バクがある。そしてよく見るのは組み込み系。volatileもそうだがprintfいれたり-O0にすると動作が正常化するってのがある。 volatileの例だと int* fifo=0x0001; int data=*fifo; のようなコードはvolatileつけないと順番入れ替えられたりコードそのものがなくなったりする。 -O0やprintf入れると直る系はキャッシュ周りのこともある。キャッシュを積極的に使うかどうかで、キャッシュを使わない場合に安定する。キャッシュをたくさん使うprintfのような関数を入れると再度積み直しになって安定する。 後者は潜在的なバグで発見が難しいことが多い。プログラミングはわかるけど組み込みを知らない人がやらかすバグの一つ。 : デフォルトの名無しさん (ワッチョイ 8901-ahzL) [sage] 2019/01/09(水) 19:37:23.10:pHvZAha70 キャッシュ絡みの潜在的なソフトのバグってのは経験ないなぁ。キャッシュが化けるハードのバグなら経験あるけど。 キャッシュ絡みってシノニム問題のこと? : デフォルトの名無しさん (ワッチョイ 8b63-xhm2) [sage] 2019/01/09(水) 19:41:27.69:G9k7j+QI0 キャシュの話はC言語にかぎらずどの言語でも起こりそう : デフォルトの名無しさん (ワッチョイ 8901-ahzL) [sage] 2019/01/09(水) 20:19:35.23:pHvZAha70 ああ、キャッシュ絡みのソフトバグ思い出した。 動的にプログラム入れ替えるソフト作ったときにIキャッシュをクリアし忘れてて誤動作したことあるわ。 Dキャッシュと分離されてる拡張ハーバードアーキテクチャの良い勉強になった思い出。 : デフォルトの名無しさん (ワッチョイ 4d00-XG35) [sage] 2019/01/13(日) 00:46:58.72:Yl3ShYz90 IMCCOやTecConfのエントリー作品を見る限り、 Cのコードゴルフって10年くらい前と短かさとかが変っていないように思えるんだけど これはCが成熟しきった(所謂「枯れた」)言語である程度の成長限界があるからなのかな。 それとも凄腕プログラマの興味がPythonやらRubyなんかに移っちゃったのかな。 : デフォルトの名無しさん (ワッチョイ 3d7b-rp4P) [sage] 2019/01/13(日) 01:10:46.51:/M42Y9uV0 > コードゴルフ 意味無いから誰も参加しないだけでは : デフォルトの名無しさん (ワッチョイ 715f-tbRK) [] 2019/01/13(日) 01:20:23.99:zp78LtJW0 アセンブラとC言語はまったく違うのに何を言っているのか? : デフォルトの名無しさん (ワッチョイ 715f-tbRK) [] 2019/01/13(日) 01:23:29.53:zp78LtJW0 あのな、コンピータには文字列という概念がないのだよ。 : デフォルトの名無しさん (ワッチョイ f94e-45a3) [sage] 2019/01/13(日) 01:50:41.81:IM9k4xNE0 > それとも凄腕プログラマの興味がPythonやらRubyなんかに移っちゃったのかな。 ハハッ、ナイスジョーク : デフォルトの名無しさん (ワッチョイ a67c-VK1S) [sage] 2019/01/13(日) 10:13:49.80:yABfrIyE0 それを言ったら数値という概念もないよね 人間から見たら数値として扱えるように演算しているだけで コンピュータにはビットのオンオフしかないよ : デフォルトの名無しさん (ワッチョイ da52-I3rR) [sage] 2019/01/13(日) 10:20:29.78:7BHWGbvy0 CPUがビット演算しか備えていないならそうかも知れないけど、整数や浮動小数点数の演算を備えているのだから数値の概念はあるだろう。 : デフォルトの名無しさん (アウアウウー Sa89-/Mri) [sage] 2019/01/13(日) 10:59:24.10:EaFLGn72a それいったらあるのはせいぜい、アルファベットとか… : デフォルトの名無しさん (アウアウクー MM45-tbRK) [] 2019/01/13(日) 11:17:20.34:IIjq691iM むしろ数値しかない : デフォルトの名無しさん (アウアウウー Sa89-/Mri) [sage] 2019/01/13(日) 11:26:53.62:EaFLGn72a チューリングマシンの説明に数値なんて出てこないでしょ : デフォルトの名無しさん (アウアウウー Sa89-I3rR) [sage] 2019/01/13(日) 11:49:52.93:Mw9Ec3URa チューリングマシンは計算機のひとつの仮想モデルだけど、いつからそれに限定した話になったの? そもそもスレ違いだからこれ以上議論する必要はないけど。 : デフォルトの名無しさん (アウアウウー Sa89-/Mri) [sage] 2019/01/13(日) 11:56:05.87:EaFLGn72a チューリングマシンでもコンピュータでもなんでもいいけど、記号操作をやってるんです。 数値なんてのはかなり抽象化した話です。 : デフォルトの名無しさん (ブーイモ MM9a-7G8+) [sage] 2019/01/13(日) 12:02:55.92:QSfXhXiJM CPU の数値演算はビット列をAND、OR、 NOTの組み合わせで変換してるだけだしね : デフォルトの名無しさん (ワッチョイ 3af1-goYb) [] 2019/01/13(日) 12:27:42.01:Ov2pIYHC0 まぁ根本的に機械にはビットも数値も文字も文字列も無いわな。電気的にHiかLowかって話だから。 そういう話するスレではないと思うが。 : デフォルトの名無しさん (ワッチョイ e5f2-Fjw0) [sage] 2019/01/13(日) 12:51:37.79:gz3n+4+q0 演算器を構成するゲートレベルなら話は別だが、CPUレベルなら整数の加算てのは ひとつのプリミティブな操作だろう。 : デフォルトの名無しさん (ワッチョイ d663-VK1S) [sage] 2019/01/13(日) 12:52:03.33:+ibs1ZYS0 C言語以外の話題になると、俄然盛況になるスレ : ◆QZaw55cn4c (ワッチョイ da47-jEXV) [sage] 2019/01/13(日) 13:19:44.44:QvV+lMh50 3種類もあるのかなあ… NAND または NOR どちらか一方だけじゃない? : デフォルトの名無しさん (ワッチョイ dd01-oec2) [sage] 2019/01/13(日) 13:37:24.61:Gq5QlaCR0 今どきはHDLで書いてLUTベースになってるんじゃないのん? : デフォルトの名無しさん (ワッチョイ fad2-kZrb) [sage] 2019/01/13(日) 13:53:19.28:mc4jTf550 原子/分子に文字の概(ry : デフォルトの名無しさん (ワッチョイ 7a01-CymP) [sage] 2019/01/13(日) 17:00:14.26:T8nAK+of0 NAND だけで全ての論理回路を構成できるけど NAND だけで構成されてるかどうかはわからん : デフォルトの名無しさん (ワッチョイ f9ff-VK1S) [sage] 2019/01/13(日) 17:43:49.41:kE5YqrGT0 基本回路はNOTで、その出力で駆動する スイッチング素子を直列に置くか並列に置くかでAND/ORにしてるだけ 出力を負論理にするのはIOL>IOHだったTTL時代の名残 : デフォルトの名無しさん (ワッチョイ ce8c-5iom) [sage] 2019/01/15(火) 07:09:12.36:nk6JBEGL0 根本は電子とホールの移動度の差 : デフォルトの名無しさん (アウアウウー Sa89-/Mri) [sage] 2019/01/15(火) 07:18:28.73:P3RuPPdOa たとえば水流で動作するコンピュータがあったらと考えると電子とホールは全然本質じゃない : デフォルトの名無しさん (ワッチョイ a57b-dZ8/) [sage] 2019/01/15(火) 08:01:36.67:c3MJrubW0 そういや、スマートボール(まぁパチンコ台みたいなものと思ってくれ)式に 上の投入口からボールを落とすと、台に仕組まれたシーソーの傾きが変わって 後から入れるボールの流れも変わる、ていう「機械式計算機」の モデルもあったな。 シーソーにラッチがついてて「メモリ機能」を持たせたり、 ボールを何個か積み上げるとラッチが解除される仕掛けで変更したり。 は半導体素子の原理説明だったかな。 P型、N型それぞれの中でも、電子と正孔の両方があったはず、だよね。 : デフォルトの名無しさん (ワッチョイ f9ff-VK1S) [sage] 2019/01/15(火) 08:06:38.17:O800IQzp0 正孔なんてものは存在しない あるはずの電子がない状態というだけ 電流の向きと電子の移動方向が逆ということを どうしても受け入れられない石頭のための説明だ : デフォルトの名無しさん (アークセー Sx85-rXi3) [sage] 2019/01/15(火) 09:33:53.56:biAsBETNx あるはずの電子がない状態を「正孔」と定義してるのでは? 正孔が存在しないってのは定義を否定することになる。 : デフォルトの名無しさん (ワッチョイ f9ff-VK1S) [sage] 2019/01/15(火) 10:10:49.40:O800IQzp0 ならない おまえ個人のオレ様ルールで否定ということにしたいだけだ : デフォルトの名無しさん (ワッチョイ ce78-OQTP) [sage] 2019/01/15(火) 10:24:18.70:ymCyYm1q0 つまり電子が無くなることなんて無かった…? : デフォルトの名無しさん (ワッチョイ a67c-VK1S) [sage] 2019/01/15(火) 10:36:11.91:xc4OhZdf0 「あるはずの電子が無い状態」のことを性行っていうんよ : デフォルトの名無しさん (ワッチョイ f9ff-VK1S) [sage] 2019/01/15(火) 11:02:13.55:O800IQzp0 846みたいに陽電子と勘違するやつがいるから指摘しといたんだ : デフォルトの名無しさん (ブーイモ MM71-1nak) [sage] 2019/01/15(火) 11:06:00.20:TmM1XKX0M 誤「あるはずの電子がない」 正「電子がある方が結合が安定する(けど陽子数と合わない)」 : デフォルトの名無しさん (ワッチョイ f9ff-VK1S) [sage] 2019/01/15(火) 11:19:45.08:O800IQzp0 ほほう それでそれで? ____ /:::::::ヽ f::/" ̄ ̄ヾi |:リ _ _| |r==( o)( o) ( ヽ _) i __/ヽ ー== イ /ヽ ヽ \__ノ `/ i \_/、 / r-、 ハ レ⌒ヾi / / | i  ̄`ー―-ヘ | ヽ_____ノーイ | \ ノ  ̄ ̄ ̄ ̄ : デフォルトの名無しさん (アウアウウー Sa89-/Mri) [sage] 2019/01/15(火) 12:02:58.73:P3RuPPdOa ホールはあるぞ。 電子も実はないんだとか言うならまだわかるが。 : デフォルトの名無しさん (バットンキン MM99-rXi3) [sage] 2019/01/15(火) 12:03:00.19:+hPQnyk+M じゃあ、逆に聞くが正孔って何? : デフォルトの名無しさん (ワッチョイ f9ff-VK1S) [sage] 2019/01/15(火) 12:12:57.27:O800IQzp0 ブツではなく状態ということだ : デフォルトの名無しさん (アークセー Sx85-rXi3) [sage] 2019/01/15(火) 12:46:21.45:biAsBETNx なんだ、やっぱりその状態があるって認めてるじゃん。正孔(という状態)は存在する、と。 てか誰も「正孔というモノ」の話なんかしてなくて一人だけ勘違いしてるw : デフォルトの名無しさん (アメ MM71-45a3) [sage] 2019/01/15(火) 12:53:56.34:XHhYs/N9M いや俺も勘違いしてるから二人にしとけ。 : デフォルトの名無しさん (ワッチョイ 3af1-VK1S) [sage] 2019/01/15(火) 12:59:09.57:adxfbmcy0 じゃあ俺も俺も : デフォルトの名無しさん (アウアウウー Sa89-JzEj) [] 2019/01/15(火) 12:59:28.21:uoTEW6ZSa ところで何の話をしているのかね? : デフォルトの名無しさん (ワッチョイ 3af1-VK1S) [sage] 2019/01/15(火) 13:10:35.80:adxfbmcy0 過去レス読めばいい : デフォルトの名無しさん (ワッチョイ f9ff-VK1S) [sage] 2019/01/15(火) 15:48:52.44:O800IQzp0 絡んできたくせに結局849の日本語が通じてないだけかよ 相手して損した : デフォルトの名無しさん (ワッチョイ 16eb-Fjw0) [sage] 2019/01/15(火) 16:17:51.71:Q775hXRk0 トムとジェリー 仲良くけんかしな トムトムトムにゃーご ジェリージェリージェリーちゅう : デフォルトの名無しさん (アークセー Sx85-rXi3) [sage] 2019/01/15(火) 17:18:14.06:biAsBETNx もうこの話題も飽きたので相手しないだけ。 : デフォルトの名無しさん (ワッチョイ d663-VK1S) [sage] 2019/01/15(火) 17:23:42.61:TYEZC8N+0 昭和の香り : デフォルトの名無しさん (アウアウウー Sa89-JzEj) [] 2019/01/15(火) 20:58:52.03:uoTEW6ZSa 昭和は遠くなりにけり : デフォルトの名無しさん (ワッチョイ f9ff-VK1S) [sage] 2019/01/15(火) 21:44:31.19:O800IQzp0 バイバイ、イソップのキツネ君w : ◆QZaw55cn4c (JP 0H62-jEXV) [sage] 2019/01/15(火) 22:02:49.14:niK8DUcQH 猫にねずみが噛み付いた あべこべだ猫たたき ねずみっていきものさ! 猫だっていきものさ! : デフォルトの名無しさん (ワッチョイ ce02-H432) [] 2019/01/16(水) 17:45:04.86:ECRqnYoc0 そういやトムジェリって一作目が作られたのが1940年なのな。戦前だ。 それで延々と続いて2017年にもOVAのDVDが出ている。恐ろしく長寿だ。 まあディズニー関係が一番長寿なんだろうけどね。 : デフォルトの名無しさん (アウアウウー Sa89-/Mri) [sage] 2019/01/16(水) 17:49:16.09:ryLt0Gqla スーパーマンの1941年のアニメなんてすごいレベル高いよ : デフォルトの名無しさん (ワッチョイ f9ff-VK1S) [sage] 2019/01/16(水) 22:19:46.42:+bYxL46c0 ENIACの頃か : デフォルトの名無しさん (ワッチョイ c101-DeFq) [] 2019/01/17(木) 23:04:44.74:KvO4PGbE0 フラッグの状態によって引数を変更する必要があるのですが どのやり方がベストでしょうか? //A:冗長だけど単純で解りやすいと思う if ( flag ) { func(PARAM1, PARAM2, 1, "hoge1", 2, "hoge2", 3, "hoge3"); } else { func(PARAM1, PARAM2, 2, "hoge2", 3, "hoge3", 1, "hoge1"); } //B:いったん変数に入れてから function call if ( flag ) { n[0] = 1; n[1] = 2; n[2] = 3; str[0] = "hoge1"; str[1] = "hoge2"; str[2] = "hoge3"; } else { n[0] = 2; n[1] = 3; n[2] = 1; str[0] = "hoge2"; str[1] = "hoge3"; str[2] = "hoge1"; } func(PARAM1, PARAM2, n[0], str[0], n[1], str[1], n[2], str[2]); : デフォルトの名無しさん (ワッチョイ c101-DeFq) [] 2019/01/17(木) 23:05:39.65:KvO4PGbE0 //続き //C:テーブルその1 const int table[2][3] = {{1,2,3},{2,3,1},}; const char *stbl[2][3] = {{"hoge1","hoge2","hoge3"},{"hoge2","hoge3","hoge1"}}; i = flag ? 0: 1; func(PARAM1, PARAM2, table[i][0], stbl[i][0],table[i][1], stbl[i][1],table[i][2], stbl[i][2]); //D:テーブルその2 順番が違うだけの場合だったらこれでもいける const int table[3] = {1,2,3}; const char *stbl[3] = {"hoge1","hoge2","hoge3"}; int order[2][3] = {{0,1,2},{1,2,0}}; i = flag ? 0: 1; func(PARAM1, PARAM2, table[order[i][0]], stbl[order[i][0]],table[order[i][1]], stbl[order[i][1]],table[order[i][2]], stbl[order[i][2]]); //E:三項演算子 これは無駄に比較が多くなるから無しかも func(PARAM1, PARAM2, flag?1:2, flag?"hoge1":"hoge2",flag?2:3, flag?"hoge2":"hoge3",flag?3:1, flag?"hoge3":"hoge1"); : デフォルトの名無しさん (ワッチョイ d352-nkt9) [sage] 2019/01/17(木) 23:16:19.13:lB4jgDBk0 ケースバイケース : デフォルトの名無しさん (アウアウカー Sa6d-qoFL) [sage] 2019/01/18(金) 00:27:39.99:mQ1FzYrGa 引数が5個あるのはすでにおかしいという気もあ : デフォルトの名無しさん (ワッチョイ c101-DeFq) [] 2019/01/18(金) 00:39:40.92:2Bf08m/t0 個人的にはAが好きだけど こういうの馬鹿にする人いそうなのが困る : デフォルトの名無しさん (ワッチョイ 2945-QFgl) [sage] 2019/01/18(金) 01:55:40.31:b8LPMN8g0 引数でやりとりせず大域変数に渡したくなる : デフォルトの名無しさん (ブーイモ MM33-YJMU) [sage] 2019/01/18(金) 01:59:06.15:9Rl7pqwkM 配列に入れてnとstr丸ごと渡せよ : デフォルトの名無しさん (ブーイモ MMeb-yzLG) [sage] 2019/01/18(金) 02:04:58.72:4oORRjeGM 構造体に入れてポインタ渡さない? : デフォルトの名無しさん (ワッチョイ 117b-g8bx) [sage] 2019/01/18(金) 05:44:13.01:APqq2jRu0 この範囲だけで言えば A が見通しが良くて分かりやすいんじゃないかな。 1, 2, 3 の並び方が(順列で)6通り存在するとか、 1 と "hoge1"... だけでなく、1 と "hoge2" の組み合わせも発生しうるとか、 func()の呼び出しパターンがもっと複雑だったら、 「flagの値に応じて適切な引数でfunc()を呼び出す関数」を作ると思う。 call_func(int flag, [func()に渡す引数]); みたいな感じ。 [func()に渡す引数] の部分を、カンマで区切った引数群にするか、 構造体にまとめるかは、別の要素が絡むので、強く主張できない。 : デフォルトの名無しさん (ワッチョイ 13d2-5Edq) [sage] 2019/01/18(金) 06:01:14.41:5rrYPQ5i0 俺なら次のようにする。 void *a[]={1,&"hoge1",2,&"hoge2",3,&"hoge3",2,&"hoge2",3,&"hoge3",1,&"hoge1"}; func(flag?a:a+6); : デフォルトの名無しさん (アウアウウー Sa15-4KIe) [] 2019/01/18(金) 15:49:59.44:dETdnGdxa その flag が 0 か 0 以外の値にしかならず 1 や 2 で違う動作になる事は未来永劫ない場合と、将来的になる可能性がある場合とでやり方は変えるかも知れない。 でも最初のやり方で良いんじゃないかな。あまり捻ると分かりづらくなるし。 flagの値によって何十通りもの違う呼び出しになるとかいうなら色々考えた方が後々良いのかも知れないが。 : デフォルトの名無しさん (ワッチョイ 19ff-fAiL) [sage] 2019/01/18(金) 16:33:30.33:qQDJcXFa0 flagに1も2もあるかよ Win32のGetMessageみたいなアホなケースはあるが : デフォルトの名無しさん (ワッチョイ 2100-b/bA) [sage] 2019/01/22(火) 14:42:25.83:Um5Ij+zI0 突然のステマ(OSSについてだけど) LuaTeXっていうTeXのLua拡張?(よく分からん)に付いてくる pplibっていうPDFライブラリおすすめ。 ドキュメント↓ ttp://https://serveur-svn.lri.fr/svn/modhel/luatex/trunk/source/texk/web2c/luatexdir/luapplib/html/ppapi.html#c-api C向けのAPIでかなり最近に開発されたおかげか挙動が素直 : デフォルトの名無しさん (ワッチョイ d347-hFsF) [sage] 2019/01/22(火) 15:04:03.04:zFHfz07h0 みえない : デフォルトの名無しさん (ワッチョイ 117b-g8bx) [sage] 2019/01/22(火) 15:24:29.26:rPWXpeN+0 Username for Subversion luatex repository とか入力を求められるけど、何やら登録が必要? : デフォルトの名無しさん (ワッチョイ 2100-b/bA) [sage] 2019/01/22(火) 15:34:39.22:Um5Ij+zI0 ユーザー名: anonsvn パスワード: anonsvn : デフォルトの名無しさん (ワッチョイ 2100-b/bA) [sage] 2019/01/22(火) 15:35:11.14:Um5Ij+zI0 ていうかごめん。普通に匿名SVNであることを書き忘れてたわw : デフォルトの名無しさん (ワッチョイ 117b-g8bx) [sage] 2019/01/22(火) 15:47:59.14:rPWXpeN+0 こちらも Subversion の公開レポジトリでは anonsvn が一般的と知らなかった。 案内ページも表示されないんで完全会員制の秘密クラブの扉でも ウッカリ開いてしまったのかと、少々慌ててしまった部分もある。 : デフォルトの名無しさん (アウアウウー Sa15-4KIe) [] 2019/01/22(火) 16:00:45.48:J1mDHp9Ya バカには見えないプログラムでございます。 : デフォルトの名無しさん (ワッチョイ 4900-MosH) [sage] 2019/01/24(木) 09:31:07.67:0uzJSPSp0 確かにAPIはスッキリしてるけど機能が少なすぎるね Poppler使うわ。 : デフォルトの名無しさん (ワッチョイ 06ad-5jav) [sage] 2019/01/27(日) 17:56:04.26:dmqtxJI00 てす : デフォルトの名無しさん (ワッチョイ 06ad-5jav) [sage] 2019/01/30(水) 19:18:19.67:lQux7EEV0 この板ってPCの書き込みは見れない仕様なの? : デフォルトの名無しさん (ワッチョイ 3152-FxQn) [] 2019/01/30(水) 20:09:31.10:5GzTmkIQ0 は? : デフォルトの名無しさん (ワッチョイ 06ad-5jav) [sage] 2019/01/30(水) 21:15:29.41:lQux7EEV0 この板をPCのクロームで見てみて レス数が903なのに、メイトでは897なんよね : デフォルトの名無しさん (ワッチョイ 4900-MosH) [sage] 2019/01/30(水) 21:22:29.10:yhwdEVRM0 なんかNGしてるワッチョイでもあるんでは? : デフォルトの名無しさん (ワッチョイ 4900-MosH) [sage] 2019/01/30(水) 21:25:54.58:yhwdEVRM0 あ,なんかしょーもないレスの仕様だけ書き込むのもアレだから ちょっとしたことだけど…… C99の仕様だとfor文の条件の中で新しい変数が宣言できるけど (新規のプロジェクトでは)積極的に使っていいと思う? for (int8_t __cnt_foo; __cnt_foo < 42; __cnt_foo++) { ... } ↑こういうの。 : デフォルトの名無しさん (ブーイモ MM6d-eqdx) [sage] 2019/01/30(水) 21:33:33.88:uDOSlsoAM 2cH.scか2ch.Netみてるんでしょ : デフォルトの名無しさん (ワッチョイ 06ad-5jav) [sage] 2019/01/30(水) 21:35:32.25:lQux7EEV0 LINEの入社試験でC選んだけど forの中などで宣言できる仕様になってた cppやjavaでも使えるし使っていってええんじゃ それにi,j,kってどうでもええ変数やから頭でも書く必要もないような : デフォルトの名無しさん (ワッチョイ 3152-FxQn) [] 2019/01/30(水) 21:43:46.06:5GzTmkIQ0 反復文のブロック外で使わない変数を、反復文の外で宣言しなければならない今までの仕様がむしろおかしい。 あと中で宣言すれば変数名ijklmn,,,なんて自体も避けれる。多重ループでなければ。 : デフォルトの名無しさん (ワッチョイ 417b-/DDN) [sage] 2019/01/30(水) 21:53:53.32:fRt/VtGE0 for での変数宣言は // の単一行コメントと同じ程度には使うかな。 むしろ変数名が __cnt_foo なのが気になる。2つの下線で始まってる部分。 __cnt_foo を宣言だけして、初期化してないのも怖いなぁ。 でも、今お手元のgccで試したところ、エラーも警告も出ないんだね。 あと、これは投稿番号904になるつもりだが、実際どうかな? : デフォルトの名無しさん (ワッチョイ 4900-MosH) [sage] 2019/01/30(水) 22:37:01.37:yhwdEVRM0 ブラウザで見てるが,レス番号は904だ。 あと初期化は単に書き忘れただけw 「2つの下線で始まる函数や変数は局所使用」 って結構いろんなプロジェクトで(OSSでもたまに) みかけるんだけど,変かしら。 : デフォルトの名無しさん (アウアウウー Saa5-6br4) [sage] 2019/01/30(水) 22:48:12.86:HCwEhiL7a 処理系で予約されてるんじゃなかったかな : デフォルトの名無しさん (ワッチョイ e95f-3XAZ) [sage] 2019/01/30(水) 23:09:19.54:TJoXpOJw0 _で始まる変数やマクロは原則予約語で使う表記になるから控えた方が良いって話だったような : デフォルトの名無しさん (ワッチョイ ff33-vS77) [sage] 2019/01/31(木) 04:33:42.98:9oWu7LhB0 うん、変だ 下線2つで始めるのは衝突を最高レベルに警戒する場合の不自然なスタイルで たいていはスコープが効かないマクロやビルトインで何かするときだ 何の変哲もない局所変数でそんなことするのはひねくれ者だ : デフォルトの名無しさん (ワッチョイ df01-vS77) [sage] 2019/01/31(木) 04:59:33.42:aHTkbrhz0 素直にこう書けばいいんだよ for (int i = 0; i < 42; i++) { : デフォルトの名無しさん (ワッチョイ ff33-vS77) [sage] 2019/01/31(木) 07:35:09.17:9oWu7LhB0 衝突を避けている識別子たちを、わざわざ追いかけていく、当たり屋みたいな奇行はよせ : デフォルトの名無しさん (ブーイモ MM03-4dUu) [sage] 2019/01/31(木) 08:34:51.69:ANKnOfTnM それはコンパイラやライブラリのソースコードだったか目が霞んでたんじゃないか? アンダースコア2つはどんな場所でも予約されている : デフォルトの名無しさん (ワッチョイ 7fa5-se+6) [sage] 2019/01/31(木) 10:01:39.25:2IY59Hh/0 わたしがスペシャル変数と呼んでる一連のアンダーバー付きの変数はプログラミング業界で取り返しのつかないほど広まってる : デフォルトの名無しさん (アメ MM03-5/sk) [sage] 2019/01/31(木) 13:13:58.47:JEItRzDdM Python「……」 : デフォルトの名無しさん (ワッチョイ ff8c-ZhXv) [sage] 2019/01/31(木) 16:20:12.34:2v9wwy3D0 世界統一変数名が必要なんだよね。でもあそこと、あそそこが悪さする。 : デフォルトの名無しさん (ワッチョイ df52-S1Ul) [sage] 2019/01/31(木) 16:52:59.91:hLsI8bIs0 スーパーグローバル変数「___________________GET!!!!!」 : デフォルトの名無しさん (ワッチョイ df52-S1Ul) [sage] 2019/01/31(木) 16:54:01.34:hLsI8bIs0 すまん$が抜けてた : デフォルトの名無しさん (ワッチョイ 5f45-Wpr0) [sage] 2019/02/02(土) 19:10:56.37:6Psw+wcJ0 汎用大域ループカウンタを宣言しておけばええんや : デフォルトの名無しさん (ワッチョイ 7f1e-3UzO) [sage] 2019/02/02(土) 22:15:48.72:5ka5WtNb0 CX : デフォルトの名無しさん (ワッチョイ df7b-Z3mi) [sage] 2019/02/03(日) 16:08:26.01:Z/smOlQY0 じゃぁ、変数名が I 〜 N で始まる場合は自動的に整数変数と見て、 宣言せずに使えるようにしよう。 : デフォルトの名無しさん (ワッチョイ ff28-/DTb) [sage] 2019/02/03(日) 17:48:04.65:JQdPtia00 もうちょっとボカしてくれれば面白いものを。 : デフォルトの名無しさん (ワッチョイ ff02-lvwX) [] 2019/02/03(日) 17:56:15.17:DVXBklBr0 昔そんな言語なかったっけ?言語と言うよりはそういう特殊仕様が実装された実行環境かな。なんとなくBASICとかであったような気がするんだが。 (もしかすると40年ぐらい前のマイコン用に作られた言語かも知れない。こういうのはバイト数減らすのに都合が良いから) : デフォルトの名無しさん (ワッチョイ df01-45Wg) [sage] 2019/02/03(日) 18:04:56.82:UmkqfD+A0 由緒正しきBASICはそもそも変数宣言なんていらん。 : デフォルトの名無しさん (ワッチョイ ff63-S1Ul) [sage] 2019/02/03(日) 18:09:15.27:RfDSwLa60 BasicだとDEFINTなんてあったな 宣言無しで型が決まるのはもう少し古い言語だな : ◆QZaw55cn4c (JP 0H7f-UFcY) [sage] 2019/02/03(日) 18:18:49.02:t4xt++QjH DIM : デフォルトの名無しさん (ワッチョイ df01-C3+4) [sage] 2019/02/03(日) 18:42:43.82:v3/qMBNz0 Fortran だね Cが教育課程に採用される前の言語 : デフォルトの名無しさん (ワッチョイ ff63-S1Ul) [sage] 2019/02/03(日) 18:56:42.51:RfDSwLa60 I、J、Kをループ変数に使うというのは その辺りからの伝統というかしきたりだったね : デフォルトの名無しさん (ワッチョイ 7f01-I5Ub) [sage] 2019/02/03(日) 18:58:36.52:Q6V8DKqV0 FORTRANだろ : デフォルトの名無しさん (ワッチョイ df52-S1Ul) [sage] 2019/02/03(日) 19:11:35.29:fibfEOKo0 ここの住民が言語作ったら良い言語できそうだな あ、グローバル変数とvarとletは無しでお願いしますね : デフォルトの名無しさん (ワッチョイ ff63-S1Ul) [sage] 2019/02/03(日) 19:17:13.15:RfDSwLa60 変数使わない言語がいいな : デフォルトの名無しさん (ワッチョイ ff02-lvwX) [] 2019/02/03(日) 19:22:06.40:DVXBklBr0 >>927 あ、そうか。そういやそうだったね。すっかり忘れてた。 : デフォルトの名無しさん (ワッチョイ ff63-S1Ul) [sage] 2019/02/03(日) 19:23:53.89:RfDSwLa60 「Fortran、再起動!」 「出撃!」 : デフォルトの名無しさん (アメ MM03-5/sk) [sage] 2019/02/03(日) 19:27:53.77:DdA3Wm74M forthとか? : デフォルトの名無しさん (ワッチョイ df52-S1Ul) [sage] 2019/02/03(日) 19:35:40.13:fibfEOKo0 じゃあ全部定数にしよう(暴論) : デフォルトの名無しさん (ワッチョイ df01-45Wg) [sage] 2019/02/03(日) 19:56:55.85:UmkqfD+A0 スタックも広義の変数なような? llvmでは一度代入した変数は書き換えない(全て準定数)って聞いたけど、ループ変数なんか値書き換えないとやってられないような? : デフォルトの名無しさん (ワッチョイ 7f01-I5Ub) [sage] 2019/02/03(日) 20:08:52.98:Q6V8DKqV0 流石にForthにも変数はあるよ : デフォルトの名無しさん (アメ MM03-5/sk) [sage] 2019/02/03(日) 20:59:31.07:DdA3Wm74M は変数使わない言語って言ってるんで。 forthに変数が無いとは言ってないよ。 でもちょっとしたことなら全部スタックで済ましちゃうでしょ?そういう言語だし。 : デフォルトの名無しさん (ワッチョイ 5ffe-vS77) [sage] 2019/02/03(日) 21:36:40.63:o+jOfHnE0 llvmにも書き換え可能なメモリを確保する命令はある。 それでループ変数を作っておいて、書き換え不可変数への置き換えは最適化におまかせする感じ。 : デフォルトの名無しさん (ワッチョイ 7f01-I5Ub) [sage] 2019/02/03(日) 22:05:11.19:Q6V8DKqV0 アスペ? : デフォルトの名無しさん (アメ MM03-5/sk) [sage] 2019/02/03(日) 22:10:21.16:DdA3Wm74M 突然の自己紹介?? : デフォルトの名無しさん (ワッチョイ df7d-qf6r) [sage] 2019/02/04(月) 02:10:59.10:0dEMPpXZ0 最近 「私たちのアポロ計画」 という映画みたら、黒人のBBAがFortran使っててドヤ顔してたわw Fortranごとき中高生でもできるのにね。 : デフォルトの名無しさん (ワッチョイ 7f01-I5Ub) [sage] 2019/02/04(月) 04:58:45.67:18M/gPzw0 ああ、単に煽りたいだけの人なのね : デフォルトの名無しさん (ワッチョイ ff28-/DTb) [sage] 2019/02/04(月) 06:55:51.99:eH/He5cH0 もっとボカせばいいのに(しつこい) : 919 (ワッチョイ df7b-Z3mi) [sage] 2019/02/04(月) 08:07:42.85:01AVniBC0 (== 942) こういうネタを投稿するときは どのくらいボカすか、ってさじ加減が難しいんだよ。 あからさま過ぎれば、知識の豊富な人には物足りないし、 おとなし過ぎると、何の話かサッパリ分からんって人が多くなる。 今回は間口を広げる方針、分かりやすさ優先だったと解釈してくれ。 : デフォルトの名無しさん (ワッチョイ ffab-vS77) [sage] 2019/02/04(月) 10:30:19.38:BGg5R2c70 じゃあCは中高生には使えんとでも言いたいのか? おめでたいやつだな : デフォルトの名無しさん (ワッチョイ 5f45-Wpr0) [sage] 2019/02/04(月) 10:51:20.21:958Z8DnZ0 #include <stdio.h> #include <stdlib.h> FILE *fp; int c; void main() { fp=fopen("HOGE.LOG", "w"); fputs("このプログラムは何かまずい?まずいとしたらどうなる?",fp); exit(c);} : デフォルトの名無しさん (ワッチョイ ffab-vS77) [sage] 2019/02/04(月) 11:05:37.79:BGg5R2c70 ばかでけえ釣り針だな クジラでも狙ってるのか? : デフォルトの名無しさん (ワッチョイ df52-S1Ul) [sage] 2019/02/04(月) 11:06:18.82:TOy5lCxb0 あーあ釣られちゃった スレめんどくさくしないでね : デフォルトの名無しさん (ワッチョイ df27-vS77) [sage] 2019/02/04(月) 12:51:43.30:i3TKqgTm0 速報 ワイ どこに釣り針が仕掛けられているのか分からず : デフォルトの名無しさん (アークセー Sxb3-DTSK) [sage] 2019/02/04(月) 13:17:46.57:7h07tci2x 釣り針にかかってみる。 main引数のvoidを省略するのは非標準なのでダメって話じゃないのん? : デフォルトの名無しさん (ワッチョイ ff28-/DTb) [sage] 2019/02/04(月) 13:17:49.13:eH/He5cH0 cが初期化されてないんでしょ(鼻ホジ) : デフォルトの名無しさん (ワッチョイ ff63-S1Ul) [sage] 2019/02/04(月) 13:23:03.13:h1bt6e1C0 明示しなくても0に初期化されない? : デフォルトの名無しさん (ワッチョイ ff28-/DTb) [sage] 2019/02/04(月) 13:44:12.81:eH/He5cH0 それはmain函数の戻り値の処理を省いても0が返る,みたいな危うさがない? ……知らんけど : デフォルトの名無しさん (ワッチョイ ff63-S1Ul) [sage] 2019/02/04(月) 13:46:18.98:h1bt6e1C0 気になる点 mainの引数指定がない fopenが成功したかチェックしていない fcloseしていない : デフォルトの名無しさん (ワッチョイ ffab-vS77) [sage] 2019/02/04(月) 16:13:18.04:BGg5R2c70 ♪授業中あくびしてたら口がでっかくなっちまった〜 : デフォルトの名無しさん (ワッチョイ 5f45-Wpr0) [sage] 2019/02/04(月) 17:53:18.29:958Z8DnZ0 大域変数は、仕様上、0で初期化される事が保証されてる。 mainが実質的にintを返しているのと同じ状態、void指定からexit()によって値を返す形式も許容範囲内。 exit()は閉じてないストリームを閉じる処理も含んでいる。 mainの引数指定していないのは、GCCでも警告すら出ないで通った。 void指定したのと同一のコード吐き出すけど、これ本当に何かまずいの? : デフォルトの名無しさん (ワッチョイ ff7c-S1Ul) [sage] 2019/02/04(月) 18:24:32.77:8k8r0y3l0 mainの引数なしはギリギリセーフ 戻り値なしはギリギリチョップ : デフォルトの名無しさん (ドコグロ MM9f-I5Ub) [sage] 2019/02/04(月) 18:49:29.84:jFZpHwREM > fopenが成功したかチェックしていない fputsもな : デフォルトの名無しさん (ワッチョイ ff63-S1Ul) [sage] 2019/02/04(月) 18:50:42.11:h1bt6e1C0 ううむ セーフとか言う意味じゃ無く、 気持ち的に落ち着かないと 言った方が良いかな : ◆QZaw55cn4c (ワッチョイ 7f47-UFcY) [sage] 2019/02/04(月) 19:00:36.55:CLpqTC7n0 個人的には int main() は許容範囲です、でも void main(int argc, char **argv) は許容できません 理由は、main() が接続(リンク)するスタートアップは、main() の内容がどんなものであれ変わらないから スタートアップ(呼び出し側)が固定であるのならば、呼び出され側のシグネチャーも固定であるべきと考えます スタートアップが仮定する引数と返り値を、main() が変えていい、とか考えられない暴挙だと思うのです 私がコンパイラを書くことが万が一あったとしたら、void main() はコンパイルエラーにします… : デフォルトの名無しさん (ワッチョイ df01-DTSK) [sage] 2019/02/04(月) 19:22:17.76:X0TXiuYZ0 前者はC99ぐらいから廃止予定だったけど後者は規格にちゃんとあるんじゃなかっただろうか? : デフォルトの名無しさん (アウアウウー Saa3-d53M) [] 2019/02/04(月) 20:04:17.97:zvEiFsrUa まずくないけど変な感じはする。 それと本当なら出力の最後に改行が必要なのではないか? fclose()がないが、exit()するならその中でやられている筈。しかし自分でやった方が良いとは思う。 : デフォルトの名無しさん (ワッチョイ df01-C3+4) [sage] 2019/02/04(月) 20:05:29.32:T5zgWCiB0 exit on free や exit on (f)close の臭いがする : ◆QZaw55cn4c (ワッチョイ 7f47-UFcY) [sage] 2019/02/04(月) 20:28:02.23:CLpqTC7n0 引数の指定なし、は今でもありえるでしょうね、廃止予定とはきいていません void main() は、ISO/IEC 9899/1999 5.1.2.2.1 にて陽に記述はありません (ただし、or in some other implementation-defined manner. という注記はありますけれども) : デフォルトの名無しさん (ワッチョイ 7fab-qf6r) [sage] 2019/02/04(月) 20:29:04.76:jUExJMkq0 AVRやPICといったマイコンでの話。 符号付整数型を文字列に変換しようと思ってるんだけど 定番のsprintfはこれら8bitマイコンにはややメモリを食いすぎて実装するのは厳しい。 代わりにメモリの消費量が少ないitoaという関数を使おうかと思ってるんだけど itoaよりさらにメモリを節約できる方法ってあったりする? : デフォルトの名無しさん (ワッチョイ ff7c-S1Ul) [sage] 2019/02/04(月) 20:40:33.65:8k8r0y3l0 7行printf があったので、それを改造して使ってたな 自分だけが使う分には便利だった : さまよえる蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ df01-Ysl1) [age] 2019/02/04(月) 20:50:44.05:MwdPLMKS0 3桁くらいなら、わり算と余りが使えるかも。 : デフォルトの名無しさん (ワッチョイ ffab-vS77) [sage] 2019/02/04(月) 20:55:36.25:BGg5R2c70 その論法では()と(int, char**)が共存しえないな : デフォルトの名無しさん (ワッチョイ df7b-Z3mi) [sage] 2019/02/04(月) 20:58:12.71:01AVniBC0 は「行儀が(とても)悪いけど、明確な規格違反も含んでいない」っていう 引っ掛け問題なんじゃないか? いくつか気になる点があって調べたけど、どれも規格違反とまでは言えなかった。 実際に不都合が発生するまではライブラリの関数を使うべし、 ってのがプログラミングの定石だけど、それは置いといて。 itoa() は標準関数じゃないみたいだから、独自ライブラリなら 関数のソースも付属してるんじゃないかな。 自分が使う数値の範囲が限定されるなら、付属ソースを参考に 専用の「数値→文字列」の変換関数を作るのも簡単かと。 (コードの著作権とかの方面は考慮してないので御注意) : デフォルトの名無しさん (ワッチョイ 7fab-qf6r) [sage] 2019/02/04(月) 22:30:53.53:jUExJMkq0 ありがとう、itoa関数よりもっとコンパクトな関数の自作に挑戦してみる(`・ω・´) : さまよえる蟻人間 ◆T6xkBnTXz7B0 (スフッ Sd9f-Ysl1) [age] 2019/02/04(月) 22:36:37.94:A8/6icsqd int n = 123; char a[4]; a[0] = '0' + (n / 100) % 10; a[1] = '0' + (n / 10) % 10; a[2] = '0' + (n / 1) % 10; a[3] = 0; : デフォルトの名無しさん (ワッチョイ 7fab-qf6r) [sage] 2019/02/04(月) 22:42:47.31:jUExJMkq0 おお、なんか軽そう! : デフォルトの名無しさん (ワッチョイ df01-DTSK) [sage] 2019/02/04(月) 23:30:45.04:X0TXiuYZ0 割り算や剰余は8ビットマイコンでは重いのでBCD変換後4ビット毎に文字列化する方法もある。 高速なBCD変換はググれば出てくる。 : デフォルトの名無しさん (アウアウウー Saa3-d53M) [] 2019/02/05(火) 09:26:29.85:NCwCR2JIa 桁数固定で良いなら自分で下の桁から10で割った余りに'0'足して10で割るってのを桁数分だけ繰り返せば良いのでは? : デフォルトの名無しさん (アウアウウー Saa3-d53M) [] 2019/02/05(火) 09:27:26.26:NCwCR2JIa うう。リロードしたら答えが全て書いてあるではないか。orz : デフォルトの名無しさん (ワッチョイ df27-vS77) [sage] 2019/02/05(火) 19:48:53.03:ksVxO8O00 ttps://mevius.5ch.net/test/read.cgi/gamedev/1028273462/ 1 名前:名前は開発中のものです。[] 投稿日:02/08/02(金) 16:31 ID:GWrer4oY C言語でゲームって作れるわけ? あんなの文章表示させられるだけでしょ? 255 名前:名前は開発中のものです。[] 投稿日:2017/02/05(日) 09:12:26.60 ID:AoXQwlvR [1/2] くっそ懐かしいスレまだあったのか建てたの高校生だった頃の俺やぞwww ちな今銀行のATMのシステム開発技術者。なんてアホなスレ建ててたんだ俺は・・・ ちょっとジーンとしたw
凡例:
レス番
100 (赤) → 2つ以上レスが付いている
100 (紫) → 1つ以上レスが付いている
名前
名無しさん (青) → sage のレス
名無しさん (緑) → age のレス
ID
ID:xxxxxxx (赤) → 発言が3つ以上のID
ID:xxxxxxx (青) → 発言が2つ以上のID
このページは2ch勢いランキング が作成したアーカイブです。削除についてはこちら 。