Ho recentemente installato un ambiente MinGW + MSYS sul mio laptop per verificare come stanno le cose con il supporto di Netbeans C/C++. Tutto sembra funzionare bene, tuttavia, durante i miei test ho notato una differenza tra GCC e il compilatore cl.exe di Microsoft.GCC - non dovrebbe essere emesso un avviso?
Ecco un esempio di programma:
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
int main(void) {
int i_max = INT_MAX;
char c_max = CHAR_MAX, c;
c = i_max;
printf("i_max: %d, c_max: %d, c: %d\n", i_max, c_max, c);
return EXIT_SUCCESS;
}
L'output è:
i_max: 2147483647, c_max: 127, c: -1
Come si può vedere nel codice di cui sopra, ho assegnare un int a un char. Non dovrebbe questo produrre un avvertimento che potrebbe verificarsi una possibile perdita di dati? Il compilatore di Microsoft (che ho configurato per essere molto severo) emette l'avviso mentre GCC non lo fa.
Qui ci sono le opzioni di GCC che uso:
-g -Werror -ansi -pedantic -Wall -Wextra
Mi manca qualche opzione GCC per rendere i controlli orari di compilazione ancora più severe?
http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html Questo collegamento mostra cosa è incluso in Wall e Wextra. Perché wconversion non è un completo bug/bug. – Pod
La mia opinione è che quegli avvertimenti sono un dolore nella retroguardia molto più spesso di quanto non capiscano qualcosa, e il mio senso delle decisioni politiche di GCC è che tendono a pensare anche in questo modo. Sarebbe una buona idea avere un'opzione -W che significava "controllare tutto, non importa quanto noioso", naturalmente. –
non funziona per me. usando "gcc -g -Werror -ansi -pedantic -Wall -Wextra -Wconversion foo.c" con il codice sopra in foo.c non si ottiene alcun avviso con gcc 4.1.2 – Glen