digraph と trigraph を学習していますが、理解できないコードがあります。(はい、非常に醜いことは認めます。)
このコードは次のようにコンパイルできます。
#define _(s) s%:%:s
main(_(_))
<%
__;
%>t
このコードもコンパイルできます。
#define _(s) s??=??=s
main(_(_))
<%
__;
%>
ただし、次の 2 つのコードはどちらもコンパイルできません。
#define _(s) s%:??=s
main(_(_))
<%
__;
%>
と
#define _(s) s??=%:s
main(_(_))
<%
__;
%>
これは私を混乱させます: コードの最初の 2 つの部分はコンパイルできるので、digraph と trigraph の両方の展開はマクロ展開の前に行われると思います。では、digraph と trigraph を一緒に使用するとコンパイルできないのはなぜですか?