ctrigraphs

Use of '??=', '??<' and '??>' in c


I was going through few interview questions and I came across example as below. I tried the example for simple input/output and also for some logic and it works without any problems.

??=include <stdio.h>

int main(void) 
??<
    printf("Hello");
    // Other code lines here
    return 0;
??>

To my surprise, this worked without any compilation issue and output was as required.

What is the significance of '??=', '??<' and '??>' here ?


Solution

  • What is the significance of '??=', '??<' and '??>' here ?

    ??= will be replaced with #,

    ??< will be replaced with {,

    ??> will be replaced with },

    by the preprocessor. These are called trigraphs. There are 9 trigraphs in total; the others are:

    ??( will be replaced with [,

    ??) will be replaced with ],

    ??/ will be replaced with \,

    ??' will be replaced with ^,

    ??! will be replaced with |,

    ??- will be replaced with ~.

    Trigraphs are processed very early in the translation process, before the source code is tokenized. They can affect comments and strings and character literals.