近くのドトールでもくもくとCを触る。
コンパイラ入門を2章まで読んだ。コンパイラの構成(フロントエンド、バックエンド)の解説と、例題として実装していく言語SL/0, SL/1の仕様の説明。めっちゃシンプルな仕様なので自分のような超初心者にピッタリ。まだ内容についていけている。
Head First Cも2章の途中まで進んだ。途中、配列変数がポインタへ格下げされる仕様にハマったのでメモ。
void f(char s[])
{
// 関数に配列を渡すとポインタに格下げされ、配列のサイズについての情報を失うため
// ポインタのサイズが出力される.
// -> 8 (64bitマシンの場合)
printf("%lu\n", sizeof(s));
// コンパイル時に警告してくれる
// blog.c:4:27: warning: sizeof on array function parameter will return size of 'char *' instead of 'char []' [-Wsizeof-array-argument]
}
int main()
{
char s[] = "How big is it?";
// 配列変数が配列のサイズを保持しているため
// 配列のサイズが出力される.
// -> 15 (14文字 + 改行)
printf("%lu\n", sizeof(s));
f(s);
return 0;
}