そのまま
ではうまくいかない. まず, H の直前の二重引用符で文字列が閉じてしまって その先がエラーになるし, 「\n」もこう書くと単なる改行になってしまう.printf(""Hello, world\n"\n");
このように, 特別な意味を持つ文字(ここでの二重引用符やバックスラッシュ)があるとき, その特別さを打ち消して普通の文字として扱わせる必要があるわけだ.
そのためには, 問題となる文字の直前にバックスラッシュをつけてやればいい. 二重引用符は「\"」となり, バックスラッシュは「\\」となる. (バックスラッシュには「あとに続く特別な文字の特別さを打ち消す」はたらきがあって, こういうものを「エスケープ文字」と呼んだりする.)
というわけで, 正解は
でした. ややこしいけれど, 納得したかな?printf("\"Hello, world\\n\"\n");
まず簡単な方から. -o は, 「-o hello」で組になっていて, コンパイルした結果として出来上がる実行ファイルの 名前を指定するものです. 別に hello.c をコンパイルしたから実行ファイルの 名前が自動的に hello になったわけではなくて, -o hello という指定があった というのが真相です.
-g のほうは説明が難しい. 「デバッグのための情報を実行ファイルに含める」っていわれても 今の段階ではわからなくて当然ですねぇ. 実際, 今の段階ではこれを指定しないでも不都合はありません. もう少し先で必要になるので, 今のうちから慣れておいてもらおうと思ってこうしました.