Справочное руководство по C++

R.16.2 Триграфные последовательности.

Прежде чем начнется какая-либо иная препроцессорная обработка, каждое вхождение триграфной последовательности заменяется на один символ в соответствии с приведенной ниже таблицей.

??= #
??/ \
??' ^
??( [
??) [
??! |

Например, строка.

??=define arraycheck(a,b) a??(b??) ??!??! b??(a??).

Преобразуется в.

#define arraycheck(a,b) a[b] || b[a].