C uses the preprocessor to substitute trigraphs for certain characters that did not appear on all keyboards in the 70s.
Trigraph | Equivalent |
---|---|
??= |
# |
??/ |
\ |
??' |
^ |
??( |
[ |
??) |
] |
??! |
\| |
??< |
{ |
??> |
} |
??- |
~ |
The can accidentally be triggered causing strange behaviour.
// Will the next line be executed????????????????/
a++;
??/
gets converted to \
so the comment gets extended to the second line when trigraphs are applied.
This can be used to check if trigraphs are available:
int trigraphsavailable() // returns 0 or 1; language standard C99 or later
{
// are trigraphs available??/
return 0;
return 1;
}
C99 added some digraphs that were more readable than the original trigraphs.
Digraph | Equivalent |
---|---|
<: |
[ |
:> |
] |
<% |
{ |
%> |
} |
%: |
# |
Trigraphs were removed in C23.