Do not ever use the "trigraph" feature of ANSI C.
ANSI C is widespread enough now that it is ok to write new programs that use ANSI C features (and therefore will not work in non-ANSI compilers). And if a program is already written in ANSI C, there's no need to convert it to support non-ANSI compilers.
However, it is easy to support non-ANSI compilers in most programs, so you might still consider doing so when you write a program. Instead of writing function definitions in ANSI prototype form,
int foo (int x, int y) ...
write the definition in pre-ANSI style like this,
int foo (x, y) int x, y; ...
and use a separate declaration to specify the argument prototype:
int foo (int, int);
You need such a declaration anyway, in a header file, to get the benefit of ANSI C prototypes in all the files where the function is called. And once you have it, you lose nothing by writing the function definition in the pre-ANSI style.
If you don't know non-ANSI C, there's no need to learn it; just write in ANSI C.
Go to the first, previous, next, last section, table of contents.