$ gcc -ansi -Wall -O -c file.cOriginariamente inviato da andr3a
$ gcc -v
Reading specs from /usr/lib/gcc-lib/i386-slackware-linux/3.2.2/specs
Configured with: ../gcc-3.2.2/configure --prefix=/usr --enable-shared --enable-threads=posix --enabl
e-__cxa_atexit --disable-checking --with-gnu-ld --verbose --target=i386-slackware-linux --host=i386-
slackware-linux
Thread model: posix
gcc version 3.2.2
compila senza problemi, però...
Nel titolo riporti [ANSI C], di solito con questo termine si indica la versione ANSI C89 che non ti consente di dichiarare variabili ovunque. Cioè puoi solo dichiararle subito dopo l'inizio di un blocco.Makefile
codice:exam : exam.o gcc -ansi -Wall -O exam.o -o exam exam.o : exam.c gcc -ansi -Wall -O -c exam.c pulisci: rm -f exam.o
ecco la grammatica
Ora il tuo prof. dice che non hai incluso un makefile e quindi presumo abbia dato lui i flag di verifica ANSI C89. Tra l'altro non ho capito che compilatore abbia usato, e con che flag.codice:compound_statement : '{' '}' | '{' statement_list '}' | '{' declaration_list '}' | '{' declaration_list statement_list '}' ;
Con gcc si fa così
To select this standard in GCC, use one of the options -ansi, -std=c89 or -std=iso9899:1990; to obtain all the diagnostics required by the standard, you should also specify -pedantic (or -pedantic-errors if you want them to be errors rather than warnings). See Options Controlling C Dialect.
http://gcc.gnu.org/onlinedocs/gcc-3....html#Standards
$ gcc -ansi -Wall -O -c file.c -pedantic
file.c: In function `main':
file.c:157: warning: ISO C89 forbids mixed declarations and code
cioè proprio il problema della dichiarazione della variabile content.
Il problema della variabile input_source_file invece c'è, e per risolverlo dovevi utilizzare un buffer di appoggio locale alla funzione, ora questo non basta a garantire l'assenza di errori in fase di run. Il fatto è che devi anche imporre un limite alla lunghezza della stringa letta da scanf. Se hai un buffer di 256 byte, scrivi scanf("%255s", stringa), 255 perchè ti serve un carattere finale per il NULL.
Se ti serve una stringa di lunghezza non predefinita, scanf non va più bene, devi crearti una funzione apposita basata su getchar(), malloc() e realloc().