戻り値も大事

先日id:ichirin2501さんから、readは読み込んだバイト数を返す事を教えていただいた。
いちいち関数呼んで文字数を消費するより、戻り値を利用できるのならそうする方が文字数節約できるんだなと学習。
ちなみにreadはシステムコールだった。
関数じゃなかったのか・・・これも学習である。うん。

Dancing Kids

教えてもらったからには早速実践あるのみ。
ただ教えてもらったことをするだけでは芸が無いので、若干変更を加えてみた。早速戻り値を利用する。
後は第1ビットがlとrで上手いこと0と1になってたので、2でANDを取って判別することに。
4B縮んで107B。

c[9];

main()
{
  puts(read(0, c, 11) - 5 ? *c & 2 ? "\\('-')/\n  |_|" : " ('-')/\n /|_|" : "\\('-')\n  |_|\\");
  puts("  | |");
}

ちなみにWindowsとMinGW5.1.4(GCC3.4.5)の環境では、readの戻り値が+1されて返ってきました。
改行コードか終端文字?もカウントしているのかな?
システムコールのようだから環境によって違うんだろう。
手元で通ったのに提出したら通らなかったから軽くあせった。


追記(またまたid:ichirin2501さんよりご指摘いただきました。ありがたやー)
readの戻り値が+1されてたのはシステムコールとか関係なかった。
readが標準入力から入力を受け取る場合、キーボードから入力すると改行コードまで取得するそう。
ファイルから読んでも改行があれば読み込まれて加算される。やりかたがまずかった。
改行コードが異なる環境では、加算されるのが1だったり2だったりするとのこと。