【初心者歓迎】C/C++室 Ver.105【環境依存OK】

■ このスレッドは過去ログ倉庫に格納されています
2019/04/25(木) 06:54:38.08ID:6xUIrXDu
エスケープシーケンスやWin32APIなどの環境依存なものもOK
そのような質問は必ず環境を書きましょう
半角空白やタブでのインデントはスレに貼ると無くなります

コードを貼れる所
http://codepad.org/
https://ideone.com/

前スレ
【初心者歓迎】C/C++室 Ver.104【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1545944692/
2019/04/25(木) 11:00:25.52ID:/tHSxicf
チンポ体操

チンポを手に持ち しごく運動から
1 2 シコシコ
2 2 シコシコ

チンポを振り回す運動
1 2 ブルンブルン
2 2 ブルンブルン
2019/04/30(火) 16:44:32.44ID:hc3e5D+8
Cを2年間やって最近大学の講義でC++をやりはじめたのですが
C++だけでなくCの勉強も継続したほうがいいのでしょうか?
2019/04/30(火) 16:51:17.25ID:iYYZTFZo
>>3
C89=K&R2 をマスターできたら、C99 など目もくれずC++に進むのがいいでしょう、私はそうしましたし C99 なんかどうでもいいと思っています
2019/04/30(火) 17:08:01.32ID:hc3e5D+8
>>4
レスありがとうございます
競技プログラミングで言うと、C言語はatcoderでA問題とB問題はすぐに書くことが出来てC問題は解けたり解けなかったりというレベルです。構造体とポインタも基本的(C言語ポインタ完全制覇という書籍にあるような難しいことは知りませんが…)な扱いならばできます。
就職のことも視野に入れて考えたいのですが、C++が出来るならばCの知識が問われる機会というのは少ないのでしょうか?
2019/04/30(火) 17:18:00.19ID:iYYZTFZo
>>5
就職の話はよくわかりません
ただ、C89=K&R2 → C99 の改定内容は、C89 の時代に試みられていた拡大解釈を規格に取り込んだ、という部類が多いと私は思いました
それに C99 は、「C++ を見た後で決めたんかい?」という謎な部分が多くいけ好かないのも事実です、あんなものは知らないほうがいい部類でしょう
それよりも日々進化し続ける C++ をフォローするほうが、いろいろな面でお得です、私も p-thread 系マルチコアなプログラムを記述するために C++11 or lator に進み、とても満足しています
2019/04/30(火) 18:05:48.04ID:arIi2u2B
>>5
C++のクラスとかテンプレートとかSTLとかをとりあえず無視して
Cと共通してる基礎的なとこから学べば、わざわざCを個別に学ぶ必要はないとおも

仕事の場合は純粋にCだけ長年使ってるような特殊な職場でなければ問題ない
2019/04/30(火) 18:11:55.63ID:hc3e5D+8
お二人方ありがとうございます
CからC++の勉強に専念する決心が半分くらいつきました
Cのscanf()の仕様(バッファオーバーフローやバッファオーバーランの危険性を回避するいくつかの方法について等)、まだはっきりと把握していないのですが、それでも、C++の勉強に専念してしまっても問題ありませんでしょうか?
2019/04/30(火) 19:25:08.89ID:YvhWBPAF
バッファオーバーランって、この辺の話?
https://ja.wikipedia.org/wiki/Scanf#%E3%83%90%E3%83%83%E3%83%95%E3%82%A1%E3%82%AA%E3%83%BC%E3%83%90%E3%83%BC%E3%83%A9%E3%83%B3
2019/04/30(火) 21:07:24.59ID:tJFiug19
C問題は使う言語の問題じゃないな
もちろんc++やJavaの方がC言語よりもスムーズに書けるがC問題はアルゴリズムを知らないと出来ない

それと現代ではC言語のscanfに習熟する意味は無い
それは後回しにした方がいい
2019/04/30(火) 21:38:58.06ID:B5WLnK8N
>>3
C を続ける必要性がゼロなら C++ に専念した方が良いかと
必要性は個々人による
大学の同級生なり、研究室等の先輩なりに相談・確認するのも良いかも知れない
2019/04/30(火) 21:41:18.36ID:B5WLnK8N
_s 系関数でも未定義な挙動を示すコードはいくらでも書けるのでキリがないんじゃね

詳細な資料はあるけれども、入門者が読むもんじゃなし
fgets + sscanf で安全になるわけでもなし
2019/05/02(木) 13:55:59.43ID:USN+R+ig
>>8
まあ他の人の意見も聴いておいたほうがいいでしょうね
個人的には何をやっても C で書けると「思える」感触ができるまで C で書きまくる経験は有用だろうと思います、時間はかかりますけれども何でも自分で実装する、という縛りを課してみる

データ構造(線形リスト、スタックやキュー、二分木やバランス木・K-dimensionなどのデータ構造)
アルゴリズム(ヒープ/クィック/シェル各種ソート、縦横探索やダイクストラ法と枝刈り・バックトラッキング、ナップサック、シンプレックス法、シャノンファノやハフマン)

いやもう、C なら何をやってもいい経験になりますね…
2019/05/03(金) 11:34:54.23ID:Gwp1b6R4
いまどきの環境だと下部に丸投げか
2019/05/03(金) 14:13:46.95ID:xL3yQoTR
関数の引数の書き方について質問があります。
任意のオブジェクトを複数参照する関数f(A& a, B& b, ......)
において、引数の a,b,...を左辺値と右辺値の任意の組み合わせで
使用する場合、関数定義をf(const A& ac, const B& bc, ......){
A &a=const_cast<A&>(ac);
B &b=const_cast<B&>(bc);
:
}
とする方法がベストでしょうか?
2019/05/03(金) 14:32:25.70ID:qNybD7B2
だめ
2019/05/03(金) 14:34:29.48ID:xL3yQoTR
15です。
追記します。

開発系のIDEでオブジェクトのメンバー変数を表示させながら
プログラム作成をしたいので、テンプレート関数化による
ユニバーサル参照の記述は使いたくありません。
2019/05/03(金) 21:34:51.81ID:Oy2+74/H
>>15
控えめに言ってクソ。 本当に const なオブジェクトが渡されたときにエラーにならない。
const なオブジェクトに const でない操作をするのは未定義だぞ。
(const ではないオブジェクトなら途中で const を経由しても書き換えて良いらしい。)

言語の作法の範囲内でなら IDE に対する配慮は工夫として評価されるかもしれないけど、
型システムによる保護を台無しにしてまでやるのはオススメできない。

少なくともこのスレでそういう工夫を是とする人はあんまりいないと思うぞ。
2019/05/03(金) 21:43:10.16ID:16FcdCX4
Arduinoなんだけど多分C一般の話だと思うんでここで

byte counter = 0;
while (true) {
  if (Shori(counter)) { break; } // Shoriの結果によってwhileから脱出
  if (counter < 4) { counter++; }
  else { counter = 0; }
}

または
for (byte counter = 0; counter <= 4; counter++) {
  if (Shori(counter)) { break; } // Shoriの結果によってforから脱出
  if (counter == 4) { counter = 255; }
}

または
for (byte counter = 0; true; counter++) {
  if (Shori(counter % 5)) { break; } // Shoriの結果によってforから脱出
  // これだとcounterが255から0になるときcounter % 5が2回連続して0になるため
  // 0〜5を繰り返し引数にしてShoriしていることにならない
}

または
while (true) {
  for (byte counter = 0; counter <= 4; counter++) {
    if (Shori(counter)) { goto dasshutu; } // Shoriの結果によってforとwhileから脱出
  }
}
dasshutu:

みたいに一定の範囲を繰り返すカウンタを持つ無限ループってどう書くのがシンプルで一般的なんだろう?
無限ループとはいっても256回も回らずに終わる見込みだから3つ目の書き方でいい(仮にそれを越えても処理内容的に致命的な問題はない)とか、念のためwordにしとけば65536回まではいけるとか考えてもいいのかな
2019/05/03(金) 22:05:03.91ID:VZjV/dE9
for (byte counter = 0; ; counter = (counter + 1) % 5) {
 if (Shori(counter)) { break; }
}
とか?
2019/05/03(金) 22:23:08.93ID:16FcdCX4
おおそんな書き方が。ありがたい。
しかも脱出に関して言えば、forの中でifで判定してbreakするのではなく
forの条件式に書いてしまうこともできるな…
2019/05/04(土) 04:03:12.91ID:qzgt3pmZ
オブジェクト指向でなぜつくるのか
って書籍が今Kindleセールで半額だけど良さそうだな
読んだことある人どんな感想ですか?
23デフォルトの名無しさん
垢版 |
2019/05/05(日) 03:51:38.18ID:NRm/lXtt
>>22
じゃんけんゲームを2人(自分対PC)用から(PCを)何人でも増やせる設計に変える例で
構造化プログラミングだとちょっと書き換え多そう。。。オブジェクト指向プログラミングなら〜って感じ。
(そこしか覚えてないとも言う)

第2版は最終章でオブジェクト指向プログラミングの次世代は関数型プログラミングだとか言ってHaskellの紹介が追加された。
2019/05/05(日) 11:14:43.13ID:P7bsB8ff
皆さんが一番勉強になった本を教えてほしいです。
これならわかるC++と、C言語ポインタ完全制覇は持ってるので、基本的なことはわかります。
これ読んで実力がバズった!というのがあればぜひとも。
2019/05/05(日) 11:28:24.38ID:3EWrT4Pn
>>24
C++ ならハーバート・シルトの独習C++ ですね
その真ん中くらいにある「std::string を自分で実装する」というお題が非常によく、OO の教科書でそういうお題を配置しているのも本質を明示している意味でよく、この本より優れている初級C++教科書がみあたりません
2019/05/05(日) 11:43:07.96ID:qZTOu8es
C言語を256倍使うための本
ttps://www.amazon.co.jp/dp/4756100430
2019/05/05(日) 19:46:41.25ID:P7bsB8ff
>>25-26
ありがとうございます。参考にします。
2019/05/05(日) 20:24:31.00ID:TxpPZKKr
>>24
私が学んだのは「詳説 C++ 第2版」だな。
https://www.amazon.co.jp/dp/479732743X
この本の内容は C++03 の時代のものなので C++11 以降のトピックはウェブで学んだ。

Twitter で C++ に強い人が独習C++の間違いを強く批判しているのを見ることがちょいちょいあるので、
自分では読んだことが無いけど独習C++には良い印象がない。
まあ不正確でもわかりやすいことは有りうるのでとりあえずおおざっぱな概略を把握する分には
どれでも割となんとかなる気がしている。
2019/05/05(日) 20:35:10.90ID:3EWrT4Pn
>>28
>独習C++の間違いを強く批判している

話を簡単にするために、一時的に紛らわしいことを言っている=どこを切っていも正しいというわけではない=文脈依存なところがある、という批判はアマゾンレビューにありましたね
しかし強く批判されるほどの欠点があるかどうかは、私にはよくわかりません

よろしければポインタをください
2019/05/05(日) 21:21:05.73ID:TxpPZKKr
>>29
良い評価も悪い評価もあるので単純には言えないけど、批判している代表的な意見としてはこれかな。
https://twitter.com/yumetodo/status/1020966071702966273
ただ、全体として入門書として本当に妥当な本があまりないので、どれが比較的マシなのかというレベルの話だと思う。

私が読んだことがない中で評判を評価するとたぶん江添氏の出している本が (少なくとも日本語の本の中では)
だいぶん良さそうでは有る。
速度のある分野では、単純に古いものはそれだけで価値が低いので、
逆に言えば最新に追い付こうとしているものは高く評価できる。
https://twitter.com/5chan_nel (5ch newer account)
2019/05/05(日) 22:04:35.25ID:vipN53in
俺「競プロ飽きたしC++の勉強でもするか」
isocpp.org「まずはTourofC++で概要をつかむといいよ〜」
ビャーネ「Tourはプログラミングに習熟した人を想定している」
俺「短くて面白いけど難しいな。プログラミング初心者向けのはないかな?」
isocpp「じゃあこれ つ原則と実践(1248ページ)」
俺「ファッ!?」
isocpp「あと勉強するときは少なくとも3冊持っといたほうがいいよ〜」
俺「ウーン…」
2019/05/05(日) 22:17:13.40ID:3EWrT4Pn
>>30
毒臭を有害ゴミと判断した理由が知りたいですね…

個人的には、C++ の中の Java に似た部分を抽出して、初心者(最近は C++ に直接参入する人が多いとか…なんか時代を感じます)にやさしい、できれば分厚くない本がいいなあ
以前は accelerated C++ を薦めたりしたのですが、最近 accelerated c++ の決定的に駄目なところを見つけてしまったので、もう私が薦める本は独習しかないのでした
2019/05/05(日) 22:37:15.85ID:RPhfdkos
>>32
有害ゴミなどど、相手が使ってない言葉に勝手に置き換えて、さも相手が感情的で非論理的な
2019/05/05(日) 22:39:39.67ID:RPhfdkos
途中だった。

有害ゴミなどど、相手が使ってない言葉に勝手に置き換えて、さも相手が感情的で非論理的な発言をしてきたかのような印象操作は卑怯だとは思わないか?
2019/05/05(日) 22:39:39.95ID:3EWrT4Pn
>>33
https://twitter.com/yumetodo/status/1020966071702966273
>言うまでもなく独習C++は時代遅れの化石で有害ゴミ行き。
使っていますが…
https://twitter.com/5chan_nel (5ch newer account)
2019/05/05(日) 22:41:08.48ID:3EWrT4Pn
>>34
https://twitter.com/yumetodo/status/1020966071702966273
>言うまでもなく独習C++は時代遅れの化石で有害ゴミ行き。

印象操作などではありえず、ずばり「有害ゴミ」指定されちゃってますが…
https://twitter.com/5chan_nel (5ch newer account)
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況