a prime number

a prime numberが終了し公開になった。分からなかったCの37B (http://golf.shinh.org/reveal.rb?a+prime+number/inaniwa_1267268383&c) は、printf の %d の precision だった。

"%.d"

は、

"%.0d"

と同じで、precision として 0 を指定したことになる。%d に対する precision の指定は最小桁数であるが、0 の時だけ特別な扱いがあるようだ。JIS X3010(ISO/IEC 9899)をみると (http://www.jisc.go.jp/app/JPS/JPSO0020.htmlから"X3010"を入力し検索する。直接GETで検索できないのは使いにくいページだな)、『値0を精度0で変換した結果の文字数は、0とする。』の記述があった。便利かもしれないけど、0は『数』じゃないというのか? 0だって一桁ではないのか?ちょっと気持ち悪い仕様だな。
因みに、mawk もこの仕様だった。C printf() の実装に依存しているということかな。手持ちの cygwin(ちょっと古い)の awk は、0 が表示された。こちらは、自分で printf() を実装しているのか?また、java/groovyは、そもそも、"%d" で、precision を受け付けない仕様だった。

printf("%.d\n",0)

とやると例外があがる。
(また)因みに、

printf(">%.0d<\n",0);   // -> "><"
printf(">%.0f<\n",0.);  // -> ">0<"

だった。こういったところも consistent じゃないな。
いずれにせよ、”printf を制するものが C Golf を制する”という感じがあるな。