「<% %>」をCで使う

C99のCommittee Draft(N1124)を読んでいて、また目から鱗。以下のスクリプトがコンパイルできるという話。

#include <stdio.h>
main()
{
    <% puts("Hello world!"); %>
}

なんと、JSPスクリプトが記述できる…のではなく、これは次の仕様によるものでした。P64、PDF 上の P75に該当箇所があります。

In all aspects of the language, the six tokens


<: :> <% %> %: %:%:

behave,respectively,the same as the six tokens

[ ] { } # ##

except for their spelling.

C89ではどうなのかと思って -std=c89 でコンパイルしてみたらちゃんと文法エラーになりました。