1 名前:デフォルトの名無しさん [2018/08/16(木) 23:36:02.22 ID:fOCSKLtw.net] C言語の話題のみ取り扱います C++の話題はC++スレへ 質問には最低限の情報(ソース/コンパイラ/OS)を付ける 数行で収まらないソースは以下を適当に使ってURLを晒す https://paiza.io/ https://ideone.com/ codepad.org/ C11 www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf C99 www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf kikakurui.com/x3/X3010-2003-01.html C FAQ 日本語訳 www.kouno.jp/home/c_faq/ JPCERT C コーディングスタンダード https://www.jpcert.or.jp/sc-rules/ 前 C言語なら俺に聞け 146 https://mevius.5ch.net/test/read.cgi/tech/1525031257/
598 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 20:09:52.14 ID:cD6Bz7+B.net] それマイクロ関係ないだろ
599 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 06:31:31.30 ID:QWemr4wG.net] すみません思い切り初心者の質問です。 printf("%s: abc", str); ↑こういう文が abcのみが変わる形で(str変数は変更されません) 沢山登場するプログラムを作っており コピペが面倒だしバグの温床になりそうなので #defineマクロなどを使って引数にabcを指定すると上記の文がまるごと出力されるようにしたいと思いました。 そこで #define PR_POS(_pos) printf("%s: _pos", str) という定義を作ったのですが恐らく引用符の中身は変更されることはないので #include <stdio.h> #include <stdlib.h> #define PR_POS(_pos) printf("%s: _pos\n", str) int main(void) { char str[256] = "text"; //printf("%s: abc\n", str); PR_POS(abc); exit(EXIT_SUCCESS); } というプログラムを作っても実際コンパイルしたものを実行すると text: _pos という望んでいない出力が返ってくるだけです これを text: abc という出力にするにはどうすればいいでしょうか……。
600 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 06:43:34.91 ID:jQ6ZKbRR.net] >>591 #define PR_POS(_pos) printf("%s: " #_pos "\n", str) でいけるはず 詳しくは プリプロセッサ 文字列化演算子 とかでぐぐれ
601 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 06:44:40.48 ID:Df6BGOL7.net] #define PR_POS(_pos) printf("%s: " #_pos, str)
602 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 06:45:58.45 ID:Df6BGOL7.net] かぶった しかもまちがった >>593 は無視して
603 名前:591 mailto:sage [2018/08/31(金) 07:04:03.05 ID:QWemr4wG.net] >>592 うわあああ! ありがとうございます。 正直 検索しても検索しても一向にそれらしき答えが見付からなかったんで もう方法がないのかなとか思ってました……。 文字列化演算子なるものがあるのですね。用語まで教えていただいてほんとうに感謝しています。 しかもC99でも定められてるっぽい? (gcc -std=c99 -Wall -Werror -pedanticで警告がなかった) 嬉しいです。これで随分すっきりしたソースコードになりそうです! >>593 さまもありがとうございます。
604 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 07:18:20.44 ID:4o8e5lPA.net] #include <stdio.h> #define DEBUG(fmt, ...) \ fprintf(stdout, "%s:%d #%s " fmt "\n", \ __FILE__, __LINE__, __func__, ##__VA_ARGS__); 初心者ならこのマクロを覚えておくと良いぞ。誰もが一度は使うはず。
605 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 07:26:18.95 ID:jQ6ZKbRR.net] >>595 > しかもC99でも定められてるっぽい? X 3010:2003 (ISO/IEC 9899:1999) 6.10.3.2 #演算子 制約 関数形式マクロの置換要素並びの中にある各#前処理字句の次の前処理字句は,仮引数でなければならない。 意味
606 名前:K則 置換要素並びの中で,仮引数の直前に#前処理字句がある場合,対応する実引数の前処理字句列のつづりを含んだ一つの単純文字列リテラル前処理字句によって,#前処理字句と仮引数を置き換える。(後略) http://kikakurui.com/x3/X3010-2003-01.html [] [ここ壊れてます]
607 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 07:48:00.90 ID:QWemr4wG.net] >>596 すいません。初心者なのにめちゃめちゃ上から目線みたいになってしまうんですが assert()を使わないのはなぜですかね。 POSIX C99でも定義されているので ほとんどどのコンパイラでも処理できると思うんです。
608 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 08:16:53.54 ID:4o8e5lPA.net] >>598 マクロの紹介だけだから。 デバッグ方法としてならassertを多用したほうが良いぞ。
609 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 08:23:18.46 ID:LcHwdHfr.net] フィールドのエラーログ用に>>596 みたいなコードをリリースバイナリにも埋めることがあるけど その場合はassertじゃ役に立たないんだよな。
610 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 08:31:20.23 ID:uM5wy4o0.net] 斜め読みだけど、abcが変わってstrが変更されないならabcの方を文字列変数にしてprintfすれば良いんじゃね?
611 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 08:33:49.15 ID:CKe+Ima+.net] >>596 可変長引数マクロはgccだけって記憶があったけどC99規格で使えるんだね。 「可変部の実引数が0個の場合に……」のgcc拡張とゴッチャになってた模様。 >>598 警告を表示しても動作を止めたくない場合には重宝するよ。 デバッグ中に「ここまでは処理が通過した」と確認する時とか。
612 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 08:40:41.19 ID:QWemr4wG.net] >>602 なるほど。 assert()関数だと引数の結果が0の場合問答無用で停止してしまいますもんね。
613 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 09:08:12.10 ID:9zTxkh/J.net] 本番のコードと差が出て邪魔なのでassertはあまり使いませんね。 どうせデバッガ使うというのもあるし。
614 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 09:17:03.63 ID:QWemr4wG.net] >>604 本業の方の意見はほんとありがたいです。 コンパイルエラーと違ってassert(3)は実行時にエラーを吐くので同じ「実行するときに診断する」プログラムでassert(3)より高機能なデバッガ(GDBとか)を使うということですか? --- >>591 の処理ですが以下のように書き直したところ望み通りに動きました。 みなさまありがとうございます。感謝します。 #include <stdio.h> #include <stdlib.h> #define PR_POS(_pos) printf("%s:" #_pos "\n", str) int main(void) { char str[256] = "text"; //printf("%s: abc\n", str); PR_POS(abc); exit(EXIT_SUCCESS); }
615 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 10:04:04.85 ID:Qsv+Vg4k.net] assertの使い道って「ここでは必ずhogeになる!」という意志をコードに残すという意味はあるかな。 言ってるとおりで動かすときはgdb使うし、開発中は単体テストで同等以上の確認するしで、実用性は今はあまり無いと思いますね。
616 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 11:00:23.86 ID:mNRFahys.net] assertはどっちかつーと単体テストでよく使う
617 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 12:32:32.62 ID:QMdn6GpG.net] 本番コードでもassert使うかな ハードエラーみたいなのはカバーしきれない
618 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 12:51:53.38 ID:jQ6ZKbRR.net] >>606 > assertの使い道って「ここでは必ずhogeになる!」という意志をコードに残すという意味はあるかな。 assertion の意味は主張だからむしろそれが正しいとも言えるな > 実用性は今はあまり無いと思いますね。 最初作るときはそうでも改修時に全然触ってない所のassert()に引っかかることもあるから俺は基本入れてる
619 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 07:11:07.60 ID:667Fbrpy.net] int a = 42; a = a++; ↑これがコンパイルエラーになる理由って 「左辺aに対する代入と右辺aに対するインクリメントのどちらの演算を優先して処理するか不定である為」 で合ってますか? 不定じゃなくて未定義かも……。
620 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 07:29:52.76 ID:fa3EYjvI.net] エラーになるか? 警告ではなく
621 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 09:00:51.15 ID:667Fbrpy.net] >>611 -Werrorとかにしてました
622 名前:611 mailto:sage [2018/09/02(日) 09:07:14.14 ID:667Fbrpy.net] >>611 あれ。すいません。よく分からなくなりました。 $ gcc -pedantic -std=c99 -Wall -Werror -O2 でコンパイルするとエラーになり停止しますが $ icc -std=c99 -Wall -Werror -O2 でコンパイルするとあっさり通りますね……。
623 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 09:27:27.59 ID:pzXMyV5h.net] >>610 未定義っす (>>1 C FAQ の 3 章を参照してください) 蛇足ながらシーケンスポイントの間でオブジェクトを変更できるのは高々1回だけとか、そんな感じのルール >>613 gcc の -Werror オプションは警告をエラー扱いにするっす
624 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 09:59:41.19 ID:GR8jnF/5.net] 未定義だからコンパイラは何をしてもいい
625 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 10:00:57.15 ID:667Fbrpy.net] >>614 ありがとうございます。 ちなみにicc (Intel(R) C/C++ Compiler)で-Wallおよび-Werrorオプションを設定したときは 警告もなにも出力されることなくコンパイルに成功してしまったんですが 理由とか分かりますかね。すいません。変な質問で……。
626 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 10:19:45.38 ID:667Fbrpy.net] >>614 あと,おっしゃる通り(すくなくともC99では)未定義でした。ありがとうございます。 > 直前の副作用完了点から次の副作用完了点までの間に, > 式の評価によって一つのオブジェクトに格納された値を変更する回数は,高々1回でなければならない。 > さらに,変更後の値の読取りは,格納される値を決定するためだけに行われなければならない。 (JIS X 3010:2003 p.48; 参考 https://dotup.org/uploda/dotup.org1632204.png)
627 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 11:28:11.60 ID:owKXNyzr.net] >>610 そういう文法的になことには今は拘らない方がいい。(これは他言語学習者の方が酷いが) 上達の妨げにしかならない。 プログラミング言語は、「正しく書いたときに正しく動作する」ようにしか設計されていない。 特にCはそうだ。 意味不明なことを書いたらだいたい全て「未定義」であり、 意味不明なことを書く奴が悪い、ということになっている。 そしてそれが「未定義」と覚えることも、実質的な意味はない。 そんなコードはすぐに修正され、存在しないからだ。 実際、 a = a++; なんてコードは、どのOSSにもないはずだ。 この意味で、Cは全くの素人の入門者用ではない。 例えばC#はそこら辺厳しい言語で、そういった意味不明な書き方は全てコンパイルエラーにされるはず。 (さすがにその例では知らんが、例えば「未初期化の変数を使用」とかがエラーになる) というか、マジでそのレベルならC#やった方がいい。 文法エラーなんてサジェストが出てOK押したら自動的に修正してくれる。 お前がどんな環境でやってるのかは知らんが。 ただ、こういった無駄な遠回りをしなくて済むだけでも、君にとってC#は有効だと思うよ。 つか、初心者は全ての文法を押さえないといけないと勘違いするようだが、それは間違いだ。 自分が使うだけの文法を押さえ、さっさと使うべきだ。 お前だって日本語の全ての漢字が読めるわけでもないのに日本語を使ってるだろ。 プログラミング言語も同様で、手段でしかないのだから、文法を一通り確認したら、 さっさとゲーム等何でもいいから作れ。 ネタがないのならそれはそもそも今プログラミングを学ぶ必要がないとも言えるし、 それでもやりたいのならラズパイでも買ってきてLEDチカチカでも目指せ。 文法を学ぶことが目的になってはいけない。それは完全に空回りだ。
628 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 11:39:01.45 ID:mdI4MGys.net] やりたいことはシンプルに書けよってことだな。 最終的に a にどうなってほしいのか、それってもっと端的に書けないの?ってこと。 Cオタクになるのが目的じゃなければな。
629 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 12:11:10.31 ID:owKXNyzr.net] (ちなみに補足)>>610 初心者には理解不能だと思うが、 「文法で許されていることが全て許される」環境なんて実質的に存在しない。 だから文法のコーナーケースについてはそもそも覚える必要がない。 (とはいえ、肝心のK&Rがフリーダムすぎて…ってのはあるが) これは小説→ラノベの流れと同じで、 美辞麗句の技巧に走る必要はなく、簡単な文を書き連ねて面白い筋を書け、ということ。 プログラミングにおいてはこれが徹底していて、 同じ物なら、簡単な方が『常に』いい、ということになっている。 ただ、どこからが複雑なのか?というのは議論になる。 例えば自然言語で韓国が漢字を廃止した際、 「停留所」を「ばすが とまる ところ」と書き換え、老人が「舐めとんのか!」と切れた。 実際、全員が読める漢字を「もっと簡単に」という理由で平仮名に書き換えられても困るだろ。 丁度これと同じ(だが方向は逆)で、 新しいプログラミング言語は比較的すんなり書ける文法が用意されており、 それを使うべきかどうかでは揉めたりしている。 ただ、Cは古いのでまどろっこしい文法しかなく、ベタな書き方しか出来ない。 だから比較的この論争に巻き込まれることはないはず。 (それ以前に文法セット自体が小さくて、え?これだけ?のはずだが) >>619 天然と養殖では学びのベクトルが逆なんだよな。 天然: 1を足したい → a++ と書くのか 養殖: a++と書くと → 1が足されるのか 結果、要因側をenumすると文法一覧になるのが養殖で、これが間違いの元だ。 そしてそれを馬鹿正直に一つずつ潰すから文法エリートになっていく。 そうではなく、要因側のenum結果はやりたいこと一覧になって、全部揃えばゲームが作れる!が正しい。
630 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 12:24:17.27 ID:667Fbrpy.net] >>620 ちょっと反論があります。正直Cどころかプログラミング初学者なのですが……。 要するに私は養殖≠ナあり,そのような学び方では成長しないと仰りたいわけですよね。 まあ確かに自分でも「規格厨」というか,衒学的な性格をなのは自覚してます しかしプログラミング言語というのは自然言語とは違う面が多々あると思います。 そして「文法を網羅すべきか」という点においては特に違うと思います。 プログラミング言語は少なくとも概念においては文法に正確に従えば定められた動作を確実に行ないます。 日本語の文法を遵守して話しても考えが伝わらないのとは全く異るところです。 だから私はプログラミング言語においては先に(かなり厳密に)文法を学ぶべきであり, 「文法を学ぶ」ことのなかには未定義動作に関する諸々の知識を習得することも含まれていると考えます。 偉そうにすいませんでした。まあ上手くいかなければまた考えを改めるつもりではいます。
631 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 12:32:31.40 ID:mdI4MGys.net] やりたいことを素直に書いたつもりで未定義な文法になってしまうなら、もっと論理を考えた方がいいかも。 やりたいことを行う手順を整理できてないってことだと思うよ。 a = a++; ということが結局どういう動作するのかを知ることより、何をしたくてそういう(矛盾をはらむ)書き方になったのかを自己分析した方がいい。 もちろん基本的な文法は勉強しておく前提はあるよ。 おれは養殖とか天然とかは分からんけど。
632 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 13:02:03.12 ID:gypPfsRT.net] Cは文法的にはコードのデザインをほとんど規定しないからね。 そういう意味では頑張って覚えるほどでもない。まあ量も少ないので覚えてもいい。 でも古いコードとの互換性にこだわる様なおっさんにはならんでくれやという感じ。
633 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 13:06:08.54 ID:nnaQ2akS.net] >>621 あなたの言うことにも一理ある。 でもこの板にいる人は1つの言語しか使えない人って少数派で、たいていは3、4つまたはそれ以上の言語を操るマルチリンガルな人が多いと思う。 んで、その人たちはどうやって新しい言語を使えるようになるかって言うと、1つの言語をマスターすると(Prologとか特殊な言語は除いて)他の言語も方言みたいなもので、書き方の問題だけなことが多いのね。 その際には特定言語の重箱の隅をつつくような知識が必要なわけではなく、むしろ最大公約数的な知識、もっと言うと言語に依存しない設計力のほうが大事になってくる。 なので、特定言語のあまり細かいルールにこだわり過ぎないほうが良い、という経験論での意見は間違ってはないと思うよ。
634 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 13:21:05.23 ID:mdI4MGys.net] そうそう、しいて文法を覚えるなら適切に const を指定するクセを付けてほしいな(const に限った話ではないんだが)。 文字列を引数で受ける箇所全部が char* になってるコードを見るとクラクラするw
635 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 13:50:09.03 ID:owKXNyzr.net] >>621 反論自体は自由にやればいいんだよ。それが匿名掲示板のメリットなのだから。 ただ、書かれている内容については吟味しないといけない。 その中には君にも峻別出来る内容もあるはずだから。 (というか、こっちが君にも分かる範囲で《客観的な範囲で》話せばいいのだが) 事実から言うと、C言語は『当初から』バリバリの実用言語であり、今も現役だ。 これは同世代の他言語とは全然違う。 だから、普通に書いてれば「未定義」なんてのに命中するはずがないんだよ。 そんな言語、使い物にならないだろ? 次に、歴史も長いのだから、何をどうやったら嵌るかのノウハウも溜まっている。 それの集大成がコーディングルールであり、例えば goto 禁止論だ。 これについても是非はあるが、これまでの経験をタダで享受する気なら、乗った方が得だ。 そしてそれに従っておけば大体全て「未定義」は回避出来る。 具体的に言えば、警告レベルを一番か二番目に厳しい状態で使って、警告についてはほぼ全部直し、 google等「コードを実際に書いている連中」のルールに従って書けば、そもそも未定義なんて踏まない。 それらはそのように整備されているから。 業務で「コーディングルール無し、警告も全部無視してよし」なんてのはあり得ないし、 仮に個人レベルでそうでもバグが取れなくて無駄に苦労するだけ。 だから結果的に「未定義」なんて気にする必要ないんだよ。 一般的な環境で普通に書いてれば命中しないし、知る必要もない。 一通りも書けない初心者なら特にそう。他にやることはいくらでもある。 君は休日にプログラミングをやろうとしているのだから、本来は「天然」なんだよ。 それを自分で「養殖」型のカリキュラムにして、無駄に上達しにくくなってる。 そこが勿体ない。 君が何の為にCを学ぶのかは知らないが、もっと直接的にその結果を目指すべきだ。 とりあえず学ぼう、では全く上達しないんだよ。 それは日本人の英語でもそうだろ。使わないと上達しないんだよ。
636 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 13:50:53.63 ID:667Fbrpy.net] >>624 確かにそうですね。先に述べた通りプログラム全般に暗いのですが JavaやPythonなども大まかな構造(サブルーチンとか演算体系とか)は 似ているかなと感じました(見当違いなこと言ってるかも)。 もっと抽象的な立場になったほうがいいですかね。 >>625 アドバイスありがとうございます。 ggってみたところconstはその重要性の割に実務で使われていない傾向にあるみたいですね。 しかし役割を考えると,特に保守の面で,積極的に使うべきだなと確信しました。 「ここは固定された値代入を想定している」という意図を明確にできるってことですよね?
637 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 14:03:37.00 ID:667Fbrpy.net] >>626 そうですね。 動くプログラムを作っていたらa=a++;なんていう文は登場することはないですね。 お察しの通りプログラマーでもなんでもない独学状態なので, そういう人間が犯しがちなミスを防ぎたい一心で規格や文法などを厳密に勉強すべきと思っておりました。 C#についてですが,こういう事を素人が言うのはまさに傲慢ですけど, どうせ勉強するなら万人が使ってる/種々のソフトウェアを作っている標準言語を勉強したいな と思ったのがきっかけなので,正直C#はあまり乗り気になれません。
638 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 15:19:58.46 ID:mdI4MGys.net] >>627 const の役割はその通り、その値を書き換えないことを意思表示するためのもの。 strcpy の引数なんかを見ても分かると思うけど、このように使い分けするだけで関数の入出力もよくわかる。 ケアレスミスで入出力を逆に書いてもコンパイラが指摘してくれる確率が上がるし、コンパイラにとっても最適化のヒントになってる。 でも実際、const皆無のコードも珍しくない。 そんな所に自分だけ const 付けると、余所の関数を呼ぶために意味不明なキャストをするハメになってストレスMAXになる。 ただ厳密に考え出すと、値受けの引数 int x なんかは const int x であるべきでは?なんて思うけど、個人的にはそこまで強要はしなくてもいいかな… なんて思う。 でもポインタ受けの引数 char* p なんかは const char* p にすることを強要したい。 前者について緩いのは、その const はその関数の中の実装を縛るものであり、そんなことは関数の外の世界の人にとってあまり重要ではないから、というのが理由。
639 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 15:26:12.33 ID:FVhWhkTR.net] >>628 C#にマイクロソフト性を強く見出しているのか知らんがJDKがゴタついていて.NET Coreが出てマルチプラットフォームで優位性があり、Unityでゲームも作れる コンピュータを勉強したいならCでいいけどプログラミングを勉強したいならCと比較してもC#は十分万人が使っている標準言語としての地を持つよ
640 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 15:44:37.64 ID:Q8aSECkx.net] 組み込みなどの特殊な分野を除けばC言語の方こそ万人向けとは言い難いな C言語はそれほど広範な分野で利用されるような言語ではないよ
641 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 16:20:10.20 ID:d8qknsqq.net] C言語が使えない環境は少ないけど、かと言ってC言語を積極的に使う必要のある環境も少ない、かな? でも全ての基本として、低レベルなCを理解しておくのは有意だと思う。
642 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 16:34:34.65 ID:mdI4MGys.net] C の前にアセンブラやってみるのも悪くないと思うよ。 今はお手軽なワンチップマイコンも多いし。 欲を言えば昔の 8bitパソコンくらいがメモリもそこそこあってちょうどいいし、16bit くらいになるとスタックフレームも使いやすくていいんだけど、今そういうので丁度いいのはあまり無いのが残念なところだけど。
643 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 16:48:06.49 ID:owKXNyzr.net] >>628 君が思っているほど言語間の差異はないよ。 とはいえ、本気でコンピューターについて学ぶのならCは外せない。 最初からやる必要があるとは思わないが、それも含めて自由にすればいい。 最初はスクリプト言語(Ruby/Python/JavaScript)の方が上達は速いとは思うが。 >>627 > ggってみたところconstはその重要性の割に実務で使われていない傾向にあるみたいですね。 constもある意味宗教だからね。 使われてない理由は、単に、苦労に見合う結果を得られないからだよ。 Cに関してはconstを積極的に付ける理由もないからね。 C++は参照を導入したからconstを付けないと変更されるかどうかが分かりにくくなった。 Cだとポインタなら変更される(可能性がある)、そうでないなら変更されないと文法的に確定している。 だからgoogleは参照はconst以外禁止、というルールでC相当にしている。 C#では明示的にoutと書いて分かりやすくしている。 constを付けたことによるメリットは、constに対して代入したときにコンパイルエラーになることだが、 そもそもこれがないんだよ。constなんて間違う場所に使うものではない。 (ただし俺はCでストリング操作を積極的にやったことはないので、char*に関しては分からん。 >>629 が引っかかっているのもそこだろうし。 とはいえ、世の中はstringはimmutableということでほぼ確定してしまったし、 今更mutableなstringの作法について学ぶ必要もないはずだが)
644 名前:デフォルトの名無しさん [2018/09/02(日) 17:06:32.38 ID:4Jf6YH6e.net] >>633 まず、エミュレータを作ります。
645 名前: mailto:sage [2018/09/02(日) 17:48:53.86 ID:oSO4LvdH.net] >>626 >君が何の為にCを学ぶのかは知らないが、もっと直接的にその結果を目指すべきだ。 >とりあえず学ぼう、では全く上達しないんだよ。 うーん、これは非常にいい指摘ですね 私は、これに気が付くのにずいぶんと遅くなってしまいました
646 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 18:34:07.99 ID:5WqNet32.net] 素人は技術もないのに、登山で直線的に、絶壁を登ろうとするから失敗する。 勉強のプロは、斜めに進んでいくから、登れる 素人がすぐに思いつくような、直線的な方法をやってもダメ。 全員が失敗してる。 C の授業を受けた、ほとんどの大学生が、こんな授業は無駄・役に立たないと言ってるw 彼らはなぜ、そう言うのか、理由を考えたらよい C のようなポインタのある言語を、1年勉強しても、 ポインタを追っかけるだけで時間がつぶれるから、何も作れない その時間で、Ruby/Python/JavaScript の3つの動的言語をやれば、ツールを作れる まず素人は、動的言語・静的言語・ポインタのある言語の、 位置付けや難易度をわかっていない
647 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 18:36:32.73 ID:xLyKs+8r.net] ポインタってそんなに難しいか?
648 名前: mailto:sage [2018/09/02(日) 18:46:30.43 ID:oSO4LvdH.net] >>638 難しいと思います C++ に移ってからも、T ** を T *& に書き直すとかする段階で、自分のポインタ概念の認識が浅かったことを実感させられたりしたものです
649 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 19:00:28.56 ID:zPdaUXCQ.net] Cのポインタはシンプルだからわかりやすいと思います ビット演算のほうが難しいと思います m = (m & 052525) + ((m & 0125252) >> 1); m = (m & 031463) + ((m & 0146314) >> 2); m = (m & 007417) + ((m & 0170360) >> 4); m = (m & 000377) + ((m & 0177400) >> 8);
650 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 19:30:02.62 ID:nnaQ2akS.net] >>640 8進数表記って滅多に使わないから、たまに良かれと思って桁合わせでゼロパディングすると意図せず8進数になって悩むよな。
651 名前:デフォルトの名無しさん [2018/09/02(日) 19:43:35.59 ID:4Jf6YH6e.net] >>641 あ、それ、30年ぐらい前にハマった。 幸い8や9を使っている所でコンパイルエラーになったからよかったが(それでも当初はなんでエラーになるのかと悩んだがw)、もし使ってなかったらROMに焼いてからターゲットマシンで変な動きになって悩み続けた事だろう。
652 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 22:38:57.74 ID:u9h+2eE3.net] Cが全盛だった時代
653 名前:、否が応でもプログラミングの勉強はCから始めた。 昔の人は理解できて今の人には難しいと考えるのは傲慢ではなかろうか。 ところでアンサイクロペディアのC言語の項が18禁になってるのは全部椋田のせいだな。 [] [ここ壊れてます]
654 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 23:21:32.95 ID:owKXNyzr.net] >>643 > 昔の人は理解できて今の人には難しいと考えるのは傲慢ではなかろうか。 いや事実だ。理由は単純で、つまりは裾野が広がっているだけなのだが、以下。 1. C言語の難易度自体は昔と同じだが、C言語の問題点を修正したより簡単な言語が開発された。 2. 昔プログラミングをしてたのは理系の大学生/大卒だけだった。 今は文系も含め、しかも中高生から始めようとしている。 数学で培われる論理/抽象思考能力はプログラミングに不可欠なのだが、 これらがまだ整っていない状態の中高生や文系にプログラミングを教えるってのがそもそもの間違い。 どのみち今の状況で計算機科学専攻ならCは必修だろうし、そういう連中には問題ない。 ただ、そうじゃない連中がCをやる必要はないってこと。 Pythonだけで済む世界ならそれもありだ。
655 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 00:24:24.13 ID:gEsVL0BV.net] 昔も中高生の頃からプログラミングは始めていたけどな いわゆるベーマガ世代の年齢層がBASIC やアセンブラからC言語に流入してたので平均的レベルは比較的高かったように思う
656 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 00:32:54.22 ID:4uYLlRfz.net] 処理目的の抽象度が上がっているという現実もあるからなぁ
657 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 00:35:18.97 ID:wBpew+1c.net] プログラミングの学習は、最初電卓でやってた ニーモニックが16進表示みたいなやつだったな それで、ループや分岐、サブルーチンを覚えた その後は、Z80のアセンブラに移ったっけ 高級言語やりたかったけど、 8ビットのプアなPCしか持ってなかったし 漢字モア使えないPCで漢字ROM買って取付け 漢字非対応のドットインパクトプリンタに 機械語プログラム使って漢字出力してた
658 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 01:05:18.32 ID:co6OAOoM.net] >>645 ベーマガやってた連中はごく一部なのだから一般化するのは無理がある。 そしてそれに対応する連中は、今はもっと増えている。 家にPCがあるのが当たり前の時代だし、IDEも無料、 インターネットでOSSのソース見放題、質問も出来る。 昔の大学生も、大学で初めてプログラミングした連中はCで撃沈してた。 今は昔と比べてIDE等の環境が断然良くなっているが、 大学生の割合が増えた分、大学生の平均的頭は悪くなっている。 (昔は上位1/4が大学生だったが、今は上位1/2で、東京に至っては2/3じゃなかったっけ? 昔だと当然高卒だった連中が大学に行ってるのだから、Fランでは授業が成立しないのも当然) だから今の「平均的大学生」が大学でプログラミングを始めても、当然Cでは撃沈する。 今の「上位半分の大学=国公立+有名どころ」(=昔の上位1/4の頃の大学生相当)の理系で、 昔の大学生と同様にCで撃沈するはず。 それを文系含めて全員プログラミングをやらせようってのだからかなり無理がある。 とはいえ、個人差の方が大きいし、やるのは自由だ。 ただ、もっといい言語(改良された言語)は沢山あるのだから、無理してCに拘る必要はない。 情報/計算機系はどうしても速度勝負になるから、どのみちCは外せないが。
659 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 01:20:48.33 ID:kJOKS5+S.net] 今の平均的な大学生のレベル低下はゆとり教育の弊害だと思うが
660 名前:デフォルトの名無しさん [2018/09/03(月) 01:38:17.54 ID:y7r/YW4w.net] https://ja.m.wikipedia.org/wiki/%E3%82%86%E3%81%A8%E3%82%8A%E6%95%99%E8%82%B2 ゆとり教育(ゆとりきょういく)とは、日本において、1980年度(狭義では2002年度以降)から2010年代初期まで実施されていたゆとりある学校を目指した教育のことである。 1980年度から2010年代初期 1980年度から2010年代初期 1980年度から2010年代初期 1980年度から2010年代初期 1980年度から2010年代初期
661 名前:デフォルトの名無しさん [2018/09/03(月) 01:45:48.17 ID:dM1zEtwp.net] アセンブラ(マシン語)からやったほうが イメージしやすいと思うんだけどな。ポインタ周りとか 現代はPythonやC#が潰しが利くから昔でいうCの位置かな https://cpplover.blogspot.com/2016/05/mitsicp.html
662 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 02:48:03.81 ID:WkDP4f9E.net] みなさんほんとうに色々な助言ありがとうございます。 目的はなにかといいますと,ゲームを作りたいのではなく,むしろ計算機の仕組みなどを学びたいと思っています。 やっぱり始めはPythonのほうがいいんですかね……。 (ちなみにガッツりゆとり世代です。中学あたりで土曜日通学が復活したかな?)
663 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 05:37:12.02 ID:WkDP4f9E.net] 調べただけですがRustもよさげですね。私が学びたいと思っている計算機の基礎的な部分に触れられると同時に C99では非常に複雑で非本質的な努力を要求される,安全なメモリ管理やUnicodeに対応した文字列操作が 簡単に実現できるというのは魅力的です。また,Mozilla社が主導しているというのも好印象です。 難点は,かなり新規の言語なので,Cほど開発手法が洗練されておらず, またコンパイラの実装が一つしかないことですかね。 しかし開発版ながらRust製のOSもあるようですし,私がCを通じて得たいなと思っていた知見や概念を Cほど紆余曲折を経ずに取得できそうです。(学問に王道なしとは言いますがね……) これ以上は(というか既に大分)スレチになってしまうので書き込むのはやめます 青二才に貴重な時間を割いて様々な助言を頂いたこと,ほんとうに感謝しています。
664 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 07:47:15.40 ID:Sux6qqaT.net] 別にCでいいと思うよ。 ただ何使うにしても、画面表示とかができないとモチベーション上がらないかもね。 GUIとまではいかなくてもコンソール上にテキストで簡易グラフィックくらいやらないと、動いてる様を眺める楽しみが半減だ。 エスケープシーケンスとかを一緒に勉強するといいかもな。 とりあえずライフゲームでも作って眺めてみたら。
665 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 08:01:08.87 ID:gEsVL0BV.net] まあ手っ取り早くプログラミング全般を眺めるならマルチパラダイムの言語を最初に学ぶのも悪くはないと思うよ 手続き型、オブジェクト指向、関数型のマルチパラダイムなら、他にはC#やJavaScriptなどが環境が充実してるので手軽ではあるけどね
666 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 08:20:45.29 ID:/AUwjj56.net] 計算機の仕組み、つまりコンピュータの動作原理を学ぶならアセンブラだろうけど、普通のOSのAPIはCなので、やっぱりC言語を勉強するのはベストプラクティスだろうね。 PythonだったりC#だったりはプログラミングは習得できても動作原理は深く学べない。 果たしてC#等の高級言語しか使えない人の何割が割り込みやCPU動作モードやSFRについて正確に理解してるのやら。
667 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 08:30:03.31 ID:4uYLlRfz.net] >>653 Rustの方が細かなノウハウでコケずにコンパイラが指摘してくれるというのはあるが今の目的ならCの方が素直でいいと思う 実機の動きを追える上に色々な機能が付いていて嬉しいという言語なので覚える事が滅茶苦茶多いよ
668 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 09:18:58.58 ID:co6OAOoM.net] >>652 中高生なら学校の勉強しとけ。結果的にそっちの方が近道だから。 プログラミングは抽象思考が出来て自分でサイクルを回せる奴しか上達しない。 具体的に言うと、「○○→△△って事は●●→▲▲ってことだろ。 ならここをこう改造すればこうなるはず…ビンゴだぜ!俺って頭イー」 を『自分だけ』で勝手に繰り返せる奴だ。(β) 学校の教科でこれに最も近いのは物理で、次点で数学だ。 だからこのタイプの奴は物理と数学は『本人は特に努力した覚えが無くとも』無双出来る。 逆に言えば、そうなっていない奴は本質的にプログラミングに向いてない。 その場合は、そもそもプログラミングをやるべきではないと俺は思っているが、 それでもやるのなら、まず物理と数学の『勉強の仕方』を変えて『抽象思考』を身につけるべきだ。 (単に勉強するだけなら『暗記』でも一定まではカバー出来てしまうが、それでは意味がない) プログラミングを始める前に、プログラミングが上達する基礎能力としての抽象思考を身につけないといけない。 次に、既にこれが出来ていたとすると、 教科自体の内容はプログラミングには直接は関係ないから、中高生でも出来るのは事実だ。 (ここら辺のことをわきまえず、『中高生でも出来る』とだけ見て全員に教えようとしてるから問題がある。 とはいえ、主導している馬鹿共はプログラミングが出来ない連中だから、話が通じないのも当然だが) 仮に君がここまでは到達しているとして、話を進めると、以下になる。 > むしろ計算機の仕組みなどを学びたい 現状、C以外に選択肢はない。 > Rust 止めとけ。今のRustはプログラミング初心者用には出来てない。C以上に確実に撃沈する。 > Python 海外では「関数呼び出し、ループ、条件分岐」等の基礎の基礎を学ぶのなら一番早いと言われている。 現実的にはAWK/Perl/Ruby/JavaScript等いわゆるスクリプト言語全般は全てこれに当てはまるが。 ただ、上記の「プログラミングが上達出来る奴」ならこの部分は数日〜数週間で通過してしまう為、 言うほど関係ない。「初心者ならどの言語でも同じ」とよく言われているのはこれ。
669 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 09:19:38.61 ID:co6OAOoM.net] 例えば体育、運動神経のいい奴は何をやってもそこそこ上手いし、一瞬で上達するだろ。 あれと同じで、「プログラミング神経」のいい奴はどの言語でも上手く行くし、すぐ上達するんだよ。 だから言語自体よりは「プログラミング神経」としての『抽象思考』能力の方が重要なんだよ。 そしてそれがない奴が頑張ってみたところで、 ちょっと運動神経のいいやつが遊びでやってるのを見たらスゲー上手くて萎える、みたいなことになる。 だから本当は基礎能力としての抽象思考を鍛えることが重要で、プログラミングの上達はその結果にすぎない。 そこを「プログラミングを『教えれば』上達する」と勘違いしている馬鹿が色々やろうとしてるからおかしなことになってる。 『教えれば』上達するのは暗記科目であって、 上達する状況を整えた上で『勝手にやらせる』と自然と上達するのが非暗記科目だ。 で、言っちゃ悪いが君は多分「抽象思考」型ではなく、「暗記」型だ。enumして全潰しというのがそれ。 君は本質的にプログラミングに向いてないタイプだと思うぞ。 教科の延長でプログラミングを学びたいと思ってるのなら止めとけ。 上記(β)タイプは主に一点突破で、むしろ勝手に突っ込んでいって自爆するのが多い。 最近出てきたのはGateboxだが、いい感じに突き抜けてるだろ。 https://gatebox.ai/home/ www.itmedia.co.jp/news/articles/1612/14/news092.html こういうことを平気で出来る奴じゃないと上達しない。 君にはその臭いを感じない。
670 名前:デフォルトの名無しさん [2018/09/03(月) 09:45:55.75 ID:XmaAZlOW.net] https://ja.m.wikipedia.org/wiki/%E3%82%86%E3%81%A8%E3%82%8A%E4%B8%96%E4%BB%A3 ゆとり世代 ゆとり世代(ゆとりせだい)とは、ゆとり教育(ゆとりきょういく)を受けた世代のこと。 定義・範囲 ゆとり世代については明確な定義、範囲はなく諸説ある。 ・小中学校において2002年度施行(高等学校は2003年度)の学習指導要領による教育を受けた世代(1987年4月2日 - 2004年4月1日生まれ)。 ・小中学校において1980年度以降(高等学校は1982年度以降)の学習指導要領による教育を受けた世代。1966年度生まれ以降。
671 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 09:58:26.53 ID:udP6IpNT.net] やっぱりプログラミングより数学の勉強の方が全然大事だと思うわ 無駄な時間を過ごしたおっさんの後悔からの発言だけど 若者は線形代数と物理いっぱいやった方がいいよ
672 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 11:14:17.43 ID:sjKCXLyo.net] BIOSの割り込みサービスで画面に文字表示するやつよんだらどうなりますか?
673 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 11:36:38.73 ID:CjQwreEv.net] >>653 これでも買っとけ 70年代のTRPGの生の感触がばりばり伝わってくるAD&Dの本 コンパイラ―原理・技法・ツール (Information & Computing) | A.V. エイホ, R. セシィ, J.D. ウルマン, M.S. ラム, Alfred V. Aho, Jeffery D. Ullman, Ravi Sethi, Monica S. Lam, 原田 賢一 |本 | 通販 | Amazon https://www.amazon.co.jp/dp/478191229X
674 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 13:23:16.40 ID:G6xL0gpW.net] これは表紙買いしてしまう
675 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 17:00:11.86 ID:fBv9u5Bm.net] >>618 > そういう文法的になことには今は拘らない方がいい。 臭い物に蓋してんじゃねえ 無理に気になる必要はなくても 気になったのに誤魔化せって最低なアドバイスだ 学問そのものを全否定する暴論だ
676 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 17:42:03.71 ID:kgEYN356.net] そんなに気になるならコンパイラを読めば良い コンパイラを読まずにああだこうだと言ってそれを学問と言い張るのは今更ニーチェを読んで学問と言い張っているのと似ている
677 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 18:03:25.66 ID:bm6csMD2.net] ゲームブックの訳本かしら
678 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 18:07:52.25 ID:fBv9u5Bm.net] しどろもどろの典型だな
679 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 18:26:17.33 ID:ttVcJTrG.net] 組込み開発者におくるMISRA‐C:2004―C言語利用の高信頼化ガイド、MISRA‐C研究会、2006 この本は、日本の大企業から、C の専門家が数十人集まって作った。 この100ルールまで行かないと、教えられない 汎整数拡張・副作用完了点・短絡評価・bool とか、各概念が難しい。 とても初心者に教えられない 特に学生なんて、現実を知らないから、文法があっていれば正しいと思う、 固定概念があるから成長できない 現実には、MISRA-C、100ルールに従わないと話にならない。 学生にはそういう事はわからないから、アホみたいなコードを書く コードは、正しい文法で書いても、ダメだから。 可読性・保守性・バグを起こさない、Ruby みたいなコーディングが大切 だから、Rubyでプログラミング学ぶのが大切。 学ぶのは文法規則じゃない! システムを作る・保守するためのプログラミング!
680 名前:669 mailto:sage [2018/09/03(月) 18:34:29.69 ID:ttVcJTrG.net] Ruby の女神・女優の池澤あやかも、同じことを言ってる。 慶応大学卒だけど、大学で、C の授業は無意味だって 山陰地方のRuby合宿へ行って、webアプリが作れるようになった Cの開発時間の大半が、ポインタ・バグでつぶれるから、プログラミングを学べない。 文法がわかるだけで、ものを作れないから楽しくない だから、Cの授業の評判が悪い。 無意味な授業だよなって だから初心者は、Rubyから初めて、まず動くものを作る
681 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 18:58:25.85 ID:LFbByM25.net] 最初の質問者は計算機の仕組みを知りたいのであってWebアプリを作りたいわけでもMISRA Cルールを知りたいわけでもない件
682 名前:デフォルトの名無しさん [2018/09/03(月) 20:30:15.22 ID:E2St7m4+.net] 典型的な超頭悪そうなヤツラが ひたすら長文連投してる
683 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 20:31:53.98 ID:zLYH5Np3.net] >>670 またrubyガイジかよ。Cスレにまで出張ってくるななよ
684 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 20:35:14.84 ID:i7qE7EE1.net] >>672 そのまんまお前の事だ
685 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 21:07:08.36 ID:e7RcTinN.net] >>674 ???
686 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 21:32:03.32 ID:i7qE7EE1.net] 半角バカを知らないのか
687 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 23:39:43.07 ID:e7RcTinN.net] あいつか
688 名前:デフォルトの名無しさん mailto:sage [2018/09/04(火) 00:25:08.00 ID:Ilbb7rlr.net] とりあえずPCCでも読んでみることにします。
689 名前:デフォルトの名無しさん mailto:sage [2018/09/04(火) 00:45:19.60 ID:LzYZ2uc7.net] Cのスレに不毛な喧嘩売ってくるのは大体Cで挫折して、 劣等感を何とか慰めようとするカーミング行動だから気にするな
690 名前:デフォルトの名無しさん mailto:sage [2018/09/04(火) 00:47:45.68 ID:oF8LgJEj.net] >>669 的にはコンピュータのしくみはどうでもいいってこと?
691 名前:デフォルトの名無しさん mailto:sage [2018/09/04(火) 06:21:50.26 ID:4a01gUXa.net] >>663 にある本の紹介文なのか宣伝コピーなのか、 「70年代のTRPGの生の感触がばりばり伝わってくるAD&Dの本」て部分を どう解釈したら良いのか分からないのだ。 Cや「ドラゴン・ブック」、TRPG, AD&D って言葉くらいは知ってる者に 解題してくれないか。 ひどく野暮な質問かも知れないけど、聞くは一時の恥とか言うし、敢えて頼む。
692 名前:デフォルトの名無しさん mailto:sage [2018/09/04(火) 08:45:47.28 ID:HIB3dDVe.net] >むしろ計算機の仕組みなどを学びたいと思っています。 それなら情報処理の基礎なんかをやった方が良い様な気がする 今は基本情報処理とか言うんだっけか? 資格とかのやつよ
693 名前:デフォルトの名無しさん mailto:sage [2018/09/04(火) 14:29:38.61 ID:Ilbb7rlr.net] 向いてないっすか……。正直物理や数学は得意なほうなんですがね……。
694 名前:デフォルトの名無しさん mailto:sage [2018/09/04(火) 14:48:39.41 ID:0ItemGYT.net] >>683 高齢者はマウンティングする病にかかりがちなので気にすんなよ
695 名前:デフォルトの名無しさん [2018/09/04(火) 15:15:50.63 ID:FJBPHmlL.net] >>653 武内覚さんのLinuxの仕組み片手にCやるのがおすすめ ファイルIOとかなら、システムコール、VFS、FS、Raid、デバドラ、スケジューラー、SCSiまでユーザーランドからデバイスまで一貫して、かつお手軽に触れる
696 名前:デフォルトの名無しさん [2018/09/04(火) 16:39:04.23 ID:gZnu4stV.net] cの文法で書けるだけの 無能を自覚できてない低学歴知恵遅れの高齢底辺ITどかたに多い
697 名前:デフォルトの名無しさん [2018/09/04(火) 17:30:33.56 ID:DgdW8Zal.net] お。半角文字の入ってない書き込みを久しぶりに見たような気がする。
698 名前:デフォルトの名無しさん [2018/09/04(火) 17:53:50.88 ID:gZnu4stV.net] 底辺ITドカタさんたちは 今日みたいな台風の日も自宅待機ではなく 出勤でしたか 大変でしたね