You can represent unavailable characters in a source program by using a combination of two keystrokes that are called a digraph character. The preprocessor reads digraphs as tokens during the preprocessor phase.
%: or %% | # | number sign |
<: | [ | left bracket |
:> | ] | right bracket |
<% | { | left brace |
%> | } | right brace |
%:%: or %%%% | ## | preprocessor macro concatenation operator |
char *s = "<%%>; // stays "<%%>"
switch (c) {
case '<%' : { /* ... */ } // stays '<%'
case '%>' : { /* ... */ } // stays '%>'
}