C言語本格入門を読んで

読んだ本

読んだ背景

業務で使うため。経験者だがブランクが結構あるので、勉強し直そうと思った。

感想

  • C言語の勉強し直しに良かった
    • 過去の実務でもC言語を使っていたが、割とあさーい理解のままやっていたのと、ブランクがかなりあるのでちょうど良かった。
  • 「先に知っておくべきこと」をざっと学べた
    • C言語は、低レイヤーな部分を触れるので、あらかじめ知っておかなければ、安全に使えないネタが多い。
  • 勉強の次のポインタが得られた
    • BSD, Linuxなどのソースコードを読んでみる(strtok, printf, headなどを読んでみる)

印象に残った点

  • char text[14] = “hello, world\n”;の時、”hello〜”は、静的領域におかれる。そしてtextの定義時に配列に値がコピーされる
  • aとbのswapはa^=b; b^=a; a^=b;でできる(tmp変数要らず)
  • -Wallオプションがないと、プロトタイプ宣言なし→引数の型不一致でも動いてしまう(暗黙の型変換せず。)
  • (感想)標準ライブラリで、スレッドセーフではないものが多い理由。C#のようにインスタンスに紐づかないので、ライブラリ側でstaticに変数を保持しているからか。インスタンスに状態をもてない。
  • (感想)標準入出力の”標準”って何やねん、と思ってたが、Unix系ではデバイスをファイルとして抽象化する文化であり、それらとの入出力の”標準”だという意味っぽい。
  • 「Javaであれば環境も含めてJava」でもCはそうでない。だから、自分の使っている環境について理解を深める必要がある、と言う話がしっくりきた。
  • malloc, calloc, realloc。callocはサイズかける要素数かつ初期化あり。reallocは取れたかどうかチェックしてから、ポインタを差し替えること
  • double num_array[20];の時、num_array[2]は2[num_array]と書いても同じ動作になる(ポインタ演算して中身を読むののシンタックスシュガーだから)と言うのは知らなかった。
  • memset, バイト単位なので注意。
  • パディングについて。処理系, 32bitOS/64bitOSによって、4byte, 8byte単位でアクセスする。そのため、この二度アクセスしないと行けない状態を避けるため、パディングが入る。
  • memcmpは構造体の比較に使うと、パディング領域も比較されてしまう。(メンバごとに比較することを勧めているように読めた)
スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

%d人のブロガーが「いいね」をつけました。