p240〜p258まで
分割コンパイル
これ知らなかったなぁ。
配列のサイズ指定などにconst定数を使っていた場合、 その値がどんな値かわからなければならないため、 const定数は自動的に内部リンケージとなる。
Cだとconst定数は外部リンケージになるらしい。確かに配列のサイズ指定できないもんね。
文字列リテラル
文字列リテラルはメモリ上のどこかに置かれた静的なデータで、 プログラムが始まってから終わるまでずっと破棄されることはありません。
ほほう。確かにデバッガで文字列リテラルに代入したポインタの値みると変な値さしてるもんね。
文字列リテラルを書き換えないように、 文字列リテラルを受けるポインタにはconstを必ずつける!
はい、つけてませんでした。今度から気をつけます><;;
配列を文字列リテラルで初期化した時、配列にはその文字列がコピーされる。
ここんところちょっと勘違いしちゃいそうだ。しっかり押さえとこう。
"This is a string."の型はconst char*ではなくconst char[18]になる。
確かにVCのコンパイルエラーでよく見るわ。
エスケープシーケンス
エスケープシーケンスの表がp254に出てきた。あんまり使わんかもしれんけど、ここにあることは覚えておこう。
ヌル文字\0は8進数を表現するエスケープシーケンスを利用している。
ほほう。これもしらなんだ。
フォルダのパス名のエスケープシーケンス忘れはあるあるw
表の中に\?なるエスケープシーケンスが出てきたけど、何のために使うのかよくわからんかったが、トリグラフシーケンス(3文字表記)ってのに使うみたい。日本には必要ない模様。
例えば、\??=とした場合、#になるらしい。そのほかにもいろいろある。
トリグラフシーケンスを使ったソースコードが載っていたがこれは面白い。すさまじく解読不能だ!
ちなみにトリグラフシーケンスを使うためにはそのためのコンパイラオプションが必要になるらしい。検索してもでてこねぇorzまぁ使わないからいっか。
今日はここまで。明日からは恐怖(?)のnew/delete。最近はリークしないようにできるだけ使わないようにしています。配列も大きめにとったりして。その方がアロケーションに時間かかんないし。