Newsgroup: it.comp.lang.c
Titolo: Niubbo allo sbaraglio

Sto scrivendo il mio primo programmillo in C e durante una
compilazione il MinGW riporta l'errore:
parse error before `int'
Quindi dopo vari tentativi decido di riscrivere il programma(senza
copia&incolla) ma il problema persiste.
Mi potete dare una mano?
Copio&incollo il codice (rozzo)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main (int argc, char *argv[])
{
	printf ("Benvenuti nel programma Croce, per la protezione dei
dati\n");
	printf ("by Timendum\n");
	if (argc < 3 || argc > 4)
	{
		printf ("*** Errore nella sintassi!\n");
		printf ("Consultare la guida readme.txt\n");
	}
	int fattore = 5;
	if (argc == 4)
	{
		fattore = atoi (argv[3]);
	}
 
	EXIT (EXIT_SUCCESS);
}
l'errore è sulla riga "int fattore = 5;"
Grazie
ave atque vale
Timendum
-- 
Ho timore di una sola cosa: me stesso (Alexander)
ICQ UNI : 74167092

l'errore è sulla riga "int fattore = 5;"
In C, contrariamente al C++, non puoi definire variabili in
qualsiasi punto del codice. 
Sposta quella riga in alto, insieme alle altre
dichiarazioni/inizializzazioni di variabili.
-- 
Andrea Laforgia - walkietalkie(at)
libero.it
"Meglio cieco che negro" (Stevie Wonder)

 qualsiasi punto del codice. 
Ehum... il C99 lo permette. Ma non sei tu il fan dell'ISO-C? ;)
Fabio Alemagna

Ehum... il C99 lo permette. Ma non sei tu il fan dell'ISO-C? ;)
Peccato che il MingW, il compilatore usato dal nostro amico,
ancora non supporti il nuovo standard.


 ancora non supporti il nuovo standard.
Be', a dire il vero dipende dalla versione: il MingW è un semplice 
porting del gcc. Ti do atto, cmq, che non so quale sia la sua corrente 
versione. In ogni caso tu hai detto "il C non supporta", non "il MingW 
non supporta". Era solo per puntualizzare e non fargli credere cose che 
non sono vere...
Fabio Alemagna

non sono vere...
Se vuoi puntualizzare, fallo con stile.
Non prenderti di tali preoccupazioni, comunque, non ce n'e
bisogno.  Quando parlo di C, parlo di C allo stato attuale,
ovvero del C supportato dai diversi compilatori.  Il nostro
amico ottiene un errore che dipende dal fatto che il suo
compilatore supporta il C definito nel penultimo standard e
non le nuove caratteristiche del C99.
Punto.


C'è per caso un libro sul C99?
In Italiano sarebbe il massimo. Oppure qualche risorsa di rete (che spieghi 
le innovazioni apportate) da affiancare al K&R 2° edizione.
Grazie
-- 
Luigi
Web Site: 
http://web.tiscali.it/luigi_web
E-mail: 
byte...@hotmail.com
ICQ #46240443

 Punto.
Nient'affatto... Tu hai detto "il C non supporta", ed è una 
affermazione, per dire poco, scorretta. Punto.
Non aspettarti ulteriori repliche in proposito.
Fabio Alemagna

non sono vere...
Come ti ha gia' detto Marco d'Itri ti stai rendendo ridicolo oltre
ogni limite.
Tu non sai neanche che esista lo standard C e vieni a dire ad altri
che non ne sono dei Fan? Piu' ti addentri negli argomenti piu' dai una
bella impressione della tua "IMMENSA" conoscenza.
Ma tu sai cosa sia il c99 e dove (inteso come: su quali compilatori)
viene implementato? Direi di no.
Il MinGW e' un porting del GCC daccordo, peccato che tutti (tranne te)
sppiano che allo stato attuale i porting del GCC per windows (in
particolare per questo thread il MinGW) usino il GCC 2.95.2... qualche
versione il 2.95.3.
Stesso discorso per vari altri compilatori o ambienti di sviluppo
integrati (DEV-C, DJGPP).
Hai notato un leggero tono da flame? Se si avvertimi, non doveva
essere leggero.
Ciascuno e' libero di vivere nell'ignoranza, ma sarebbe gradito se
evitasse di farne partecipe il resto del mondo.
Mox

Non aspettarti ulteriori repliche in proposito.
Lo so che Oscar Wilde ha detto che "Quando la gente e' d'accorco con
me, mi sembra sempre di avere torto", ma ci sono delle eccezioni...
come nel tuo caso: se tutti ti stanno dando contro (non solo su questo
NG per quelli che non avessero seguito it.comp.os.dibattiti almeno in
occasione del crosspost) forse ha ragione il resto del mondo.
Mox

 evitasse di farne partecipe il resto del mondo.
Ma tu sentilo... ignoranza di che? ROTFL ;)
Fabio Alemagna

 occasione del crosspost) forse ha ragione il resto del mondo.
Tutti contro? Non sai neanche contare? In questo stesso NG c'è Capitan 
Uncino che la pensa come me, di là c'è Zezza che pure la pensa come 
me... il resto? Ignoranti in materia che mai hanno sentito parlare di 
cose come "linguistica" e di studiosi come "Chomsky". Poi c'è sempre la 
storia delle mosche sulla merda... se vuoi te la racconto ;)
Fabio Alemagna

 le innovazioni apportate) da affiancare al K&R 2° edizione.
   Per soli 18 USD ti compri dal sito dell'ANSI (
http://www.ansi.org
) i 
diritti del nuovo standard e sei in una botte di ferro.
-- 
Veri pirati noi siamo       Ma cosa c'e` di male?
Contro il sistema lottiamo  Ma cosa c'e` di strano?
Ci esercitiamo a scuola     Facciamo un gran casino
A far la faccia dura        Ma in fondo lavoriamo
Per fare piu` paura         Per capitan Uncino

che "non è un fan"? Capiscio l'italiano?
Nono, avevo capito benissimo.. sono IO che ho detto che tu non sai
cosa sia lo standard C, mica tu :P
Comunque io ho detto cosa pensavo a proposito delle tue risposte, per
il resto non ho altro da aggiungere... tranne che MD sara' pure
scontroso, ma non e' certo incompemente: magari non credi a me, credi
a lui pero'.
Mox

 a lui pero'.
Io credo a ME, se permetti, essendo a conoscenza delle mie conoscenze. 
In altre parole, se uno dice una stronzata, non sono tenuto a credergli 
solo perchè si chiama Marco D'Itri. E poi, scusa, di che competenze vai 
parlando? ;)
Fabio Alemagna

 affermazione, per dire poco, scorretta. Punto.
Hai capito benissimo che cosa volevo dire, ma 
ti piace creare degli inutili flame, non saro'
di certo io ad alimentarli.  Ciao.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 supporta". Affermazione scorrettissima.
Hai problemi di pronuncia del mio cognome ?
Il mio "Il C non supporta" era finalizzato a spiegare
l'errore che il nostro amico ottiene, perche' per "C",
l'ho gia' detto, io intendo la versione C89, ovvero
quella implementata su tutti i compilatori odierni.
Stabilito questo, non capisco, onestamente, a cosa 
stai ribattendo.  La frase "e, no il C99 supporta questo
aspetto" che cosa implica ? che io debba dire al nostro
amico "ehi ! e' stranissimo che tu ottenga un errore
del genere, il C (che e' il C99) supporta eccome questo
aspetto !".  Parlare di C99 e delle sue caratteristiche,
a poco senso, se non ci sono ancora compilatori che le 
possano implementare.  Visto che ti aggrappi al gcc, ti
ricordo che neanche questo, nella versione 3.x, supporta
pienamente il C99 e, comunque, ci sono molti altri
compilatori usati a livello professionale (leggi BCB, VC)
ecc... che, come subset C, sono fermi ancora al C89.
Come ho gia' detto, evidentemente ti piace creare flame e
quindi invito coloro che seguono il gruppo a non darti
corda.  Chiudo qui.


qualsiasi punto del codice. 
ok, grazie.
ma mi sorge spontanea una domanda(citaz):
e se devo definire un array tipo:
arrayA[variabile]
non posso ?


non posso ?
In C89 no.
In C99, si'.


In C99, si'.
Quindi o aspetto una nuova versione del MinGW o mi attacco... :_-(


Quindi o aspetto una nuova versione del MinGW o mi attacco... :_-(
Per quanto riguarda il DJGPP, la dichiarazione di un array
con indice variabile, e' gia' supportata come estensione.
Hai gia' provato a farlo con MinGW ?


 non posso ?
Anche questo tipo di operazione è stata standardizzata nel c99, ma il 
gcc la supporta praticamente da sempre, e quindi anche il MingW. C'è da 
notare, però, che il gcc non è pienamente conforme allo standard.
Fabio Alemagna

 Quindi o aspetto una nuova versione del MinGW o mi attacco... :_-(
Puoi usare alloca() per ottenere un effetto simile. Ad esempio:
     int *array = alloca(len);
è equivalente (tranne per alcuni comportamenti secondari) a:
     int array[len];
dove "len" è una variabile, ovviamente.
Fabio Alemagna

dove "len" è una variabile, ovviamente.
http://www.tac.eu.org/cgi-bin/man-cgi?alloca+3
http://www.mkssoftware.com/docs/man3/alloca.3.asp
http://www.delorie.com/djgpp/doc/libc-2.02/
L'alloca() per quando funzionante non e' molto portabile. Una
soluzione miglioredal punto di vista della portabilita' e' la malloc()
che ti permette di ottenere un effetto simile.
<CODE target="allocare un array di 10 interi">
	int * array = malloc(10*sizeof(int));
</CODE>
Dopo tu puoi usare l'array con l'usuale sintassi array[posizione].
Nota: l'alloca pare implementare l'allocazione in modo particolare,
ovvero alloca spazio sullo stack al momento della chiamata (anzi, lo
fa' fare al compilatore direttamente), pero' questo spazio pare vada
perso alla fine della chiamata. Con la malloc lo spazio va' perso (su
alcuni sistemi, su altro rimane fino al riavvio) solo con la
terminazione del programma, non della funzione che l'ha chiamata.
Se mi sbaglio sulla alloca correggetemi, ma tutti i link che ho
trovato parlana in tal senso.
Mox

Dopo tu puoi usare l'array con l'usuale sintassi array[posizione].
alloca() sicuramente non e' ISO, quindi se proprio bisogna
ricorrere alla allocazione dinamica, e' meglio farlo con
malloc().  Se si prevede di tradurre il codice C in codice
C++, poi, l'uso di alloca() e' assolutamente da
sconsigliare.  In ogni caso e' fondamentalmente sbagliato
pensare che l'uso di un array e di un puntatore sia
intercambiale.  Dichiarare un vettore, per esempio, esclude
l'utilizzo di variabili aggiuntive in cui conservare la
lunghezza del vettore.  Questo non vale per un puntatore.


 trovato parlana in tal senso.
bastava un man alloca :)
Fabio Alemagna

bastava un man alloca :)
Beh, quei 3 link che ho postato praticamente erano la versione html di
"man -s3 alloca" o "man 3 alloca".
Mox :)