C99の規格書を読もうと思ったが有償であり1万円以上するということなのであきらめ、次のC標準のドラフトを読むことにした。
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1548.pdf
すると297ページにstdinのことが書いてあった。引用すると
which are expressions of type ‘‘pointer to FILE’’ that point to the FILE objects associated, respectively, with the standard error, input, and output streams.
であった。規格上はFILE構造体のポインタが正しいようだ。それではなぜVS2015のstdinはvoid*にしてしまったのか。理由は今のところよくわからないが、標準準拠でない部分があるということを知ってちょっとがっかりした。ランタイムを作り直したくらいだから抜群の準拠度ではないかとも思ったがそこはMS、そうやすやすと標準に屈する輩ではない。
実はこの部分についてはffmpegのメーリングリストでも少し触れられていた。
[FFmpeg-devel] Windows deprecated stdin reading method
代替実装としてstdin->_cnt部分の代わりにWaitForSingleObjectを使うという案が(正確に言うと「案も」だが)書いてあった。このスレッドはまだちゃんと読んでいない。もう少し読み込むことにする。