Some relevant parts from the gcc man page are:
-trigraphs
Process trigraph sequences. These are three-character
sequences, all starting with ??, that are defined by
ISO C to stand for single characters. For example,
??/ stands for \, so '??/n' is a character constant
for a newline. By default, GCC ignores trigraphs, but
in standard-conforming modes it converts them. See
the -std and -ansi options.
The nine trigraphs and their replacements are
Trigraph: ??( ??) ??< ??> ??= ??/ ??' ??! ??-
Replacement: [ ] { } # \ ^ | ~
-Wtrigraphs
Warn if any trigraphs are encountered. This option
used to take effect only if -trigraphs was also speci-
fied, but now works independently. Warnings are not
given for trigraphs within comments, as they do not
affect the meaning of the program.
-ansi
In C mode, support all ISO C89 programs. In C++ mode,
remove GNU extensions that conflict with ISO C++.
This turns off certain features of GCC that are incom-
patible with ISO C89 (when compiling C code), or of
standard C++ (when compiling C++ code), such as the
"asm" and "typeof" keywords, and predefined macros
such as "unix" and "vax" that identify the type of
system you are using. It also enables the undesirable
and rarely used ISO trigraph feature. For the C com-
piler, it disables recognition of C++ style // com-
ments as well as the "inline" keyword.
In summary, if you have -ansi mode on the compiler will process trigraphs, however
whether or not you have that option set, you will be warned about them if the -Wtrigraphs warning is active.
You could suppress that by using the -Wno-trigraphs command-line option.