Io'sto supponendo che tu stia chiedendo perché l'uso di una direttiva #include in un sorgente C++ che viene compilato con un compilatore moderno e conforme agli standard produce un errore.
This happens because, since C++ was first standardized in 1998, the correct directive is
- #include
Now, keep in mind that the first C++ compilers (the venerable cfront) were actually programs that parsed the C++ source code after passing it through the C preprocessor, and then transformed it into C code which was then compiled as a regular C program.
I file header in C (e questo include anche gli header di sistema) venivano nominati con un .h (per esempio: stdio.h), quindi era abbastanza ovvio usarlo anche per gli header C++. Così i primi compilatori C++ avevano effettivamente un file header iostream.h e si includeva semplicemente usando il suo nome.
Poi, se ricordo bene, la prima standardizzazione del C++ nel 1998 disse che gli header standard C++ non avevano .h nel loro nome. Questo fu un piccolo cambiamento che tuttavia ruppe la compatibilità all'indietro a livello di sorgente: per facilitare la transizione, i compilatori e i preprocessori C++ accettarono entrambi i nomi (cioè sia iostream.h che iostream), anche se il nome conforme allo standard era iostream. All'incirca in quel periodo (forse prima), avevamo anche i primi compilatori C++ che non usavano il C come passo intermedio, quindi nominare gli header di sistema con un suffisso .h stava diventando sempre più inutile e confuso.
Poi, alcuni anni dopo, i compilatori C++ iniziarono ad accettare solo i nomi conformi allo standard, perché la gente aveva ormai tutto il tempo di sistemare il proprio codice C++. Sfortunatamente, ci sono ancora alcuni libri di programmazione obsoleti ed esempi di codice che usano la sintassi non standard (o solo alcuni libri ed esempi semplicemente cattivi).