Semicolon no final das instruções if e funções em C

Acabei de encontrar um código que use ponto-e-vírgula ou use ponto-e-vírgula para propósitos diferentes dos quais não conheç

Encontrei ponto e vírgula no final das instruções if e no final das funções. Por exemplo

int main (int argc, char * argv[]) {
    // some code

    if (x == NULL) {
        // some code
    };  <-----

    // more code

    return 0;
}; <---

Está compilando com cc, não com o gcc. O que esses pontos e vírgulas fazem? Estou assumindo que não há diferença, porque o compilador consideraria isso como uma declaração vazi

questionAnswers(7)

yourAnswerToTheQuestion