Originariamente inviato da YuYevon
Per quanto riguarda il Visual C++ di casa Microsoft, sarà pure un ottimo ambienete di sviluppo ma il compilatore segue praticamente uno standard tutto suo... certe volte nel lab dell'università i miei compagni che lo utilizzano si ritrovano con warning ed errori che il gcc di Linux nemmeno si sognerebbe di segnalarti, non perché sia meno efficiente ma perché aderisce allo standard.
Per favore, per favore stiamo attenti a cosa diciamo.
In primis il compilatore Microsoft non ha uno standard tutto suo, ma ha delle estensioni (che puoi benissimo non usare) per ottimizzare la scrittura e altre cose del software. Alcune di queste sono utilissime (il #pragma region per me è quasi fondamentale).
Warning ed errori bisognerebbe analizzare il caso. Sicuramente i warning sono dovuti alle falle di sicurezza della C Runtime Library e sono semplicemente suggerimenti ad usare la versione sicura delle funzioni (printf_s al posto di printf, ad esempio). Possono essere disabilitati facilmente con un #define.
Sugli errori anche c'è un discorso a parte. Il gcc per esempio permette l'allocazione dinamica senza usare le funzioni
codice:
int n;
float array[n];
Che anzi, sarebbe da segnalare come errore (quindi se c'è qualcuno che non rispetta lo standard, è proprio il gcc).
Anche VisualC non rispetta lo standard, c'è proprio un documento Microsoft che riporta tutte le sue "mancanze" (piccolezze, comunque).

E comunque gli errori che riporta MinGW certe volte sono esagerati.
Ti posso fare un semplice esempio che mi è capitato.
Bla bla bla bla compilo...Error: Multiple definition of NomeDiFunzione.

30 minuti a cercare la seconda definizione. Niente da fare.
Stesso codice in Visual C...compilo... Error: Missing ; in void NomeDiFunzione(int,int)