独習Cの第三版で不明点があったので質問させていただきます。

以下引用ソースコードです。引用に問題などありましたらご指摘ください。

#include <stdio.h>

int main(void)
{
    printf("このプログラムはコンパイルできません");
    int i; /* これを先に書くこと */
    i = 10;
    printf("%d", i);

    return 0;
}

出力と同じく本文中でも「以下の例は誤りですから、コンパイルエラーとなります。」とあったのですが、手元のgccとclangでコンパイルが通り実行も可能でした。

題目としてはローカル変数を扱う内容の部分で、ブロック内で変数宣言をする際はそのブロックの先頭にしなければならないとあり、私は「宣言よりもprintfがあるとダメなのか」と思いながら書き試してみたのですが動いてしまい、よくわからなくなりました。

これはどういったことなのでしょう…読みやすさを重視して変数宣言の前の出力はするべきでないといった意味なのか、それとも昔はダメでいつからか上記のようなものがエラーを起こさなくなったのか、またはwin版のコンパイラと何か違うのか…問題ないなら無視したいのですが気になってしまいました。

回答よろしくお願いします。