Newsgroup: it.comp.lang.c
Titolo: dimensioni array

Nel dichiarare un array in una funzione C posso usare uno dei parametri 
della funzione stessa per specificarne la dimensione?
esempio:
void funzione(int parametro, ....)
{
int nomeArray[parametro];
...
}
	è corretto?

	č corretto?
Ni. In C89 non puoi, in C99 invece sě.
Se non sai la differenza probabilmente significa che stai usando il
C89.
Puoi risolvere il prblema anche per il C89 con:
void funzione(int parametro, ....)
{
    int * nomeArray = malloc(sizeof(int) * parametro);
    ...
    free(nomeArray);
}
E nella funzione puoi usare l'array normalmente.
-- 
Marco Barisione (ICQ 84277092)

 
Che cosa sono C89 e C99?
Se sono due standar allora il compilatore che sto usando (gcc 2.96) deve 
rispettare il secondo perchè non mi segnala nessun errore con la forma da 
me proposta.
Grazie comunque per il tuo suggerimento che può sempre tornarmi utile.

 me proposta.
gcc ha un sacco di estensioni allo standard (tra cui quella citata
da te). Queste non lo rendono automaticamente C99 compliant.
Con gcc puoi scrivere
case 'A' ... 'Z':
non credo che una simile istruzione sia contemplata da qualche
standard del "C".
gcc ha uno splendido manuale: Darci un'occhiata non e' una perdita
di tempo :-) 
Per le restanti estensioni
http://gcc.gnu.org/onlinedocs/gcc-2.95.3/gcc_4.html#SEC61
C:\>iao Angelo
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

me proposta.
2.96? Una RedHat?
Il GCC 2.95.3 e' se non sbaglio l'ultima versione stabile e
ultratestata che supporta il c89 (anche se non mi pare sia ancora
sonsigliata per compilare il kernel)... dalla versione 3.0
/ufficialmente/ diventa un compilatore aderente allo standard c99 (per
l'esattezza sta cercando con grandi sforzi di allinearsi al nuovo
standard).
A tutti gli effetti oggi l'unico compilatore che supporta il c99 al
100% dovrebbe essere il Dikumware, pero' e' a pagamento.
Il GCC comunque ha sempre supportato delle feature che sono proprie
del c99 (per es supportava la possibilita' di avere macro con un
numero variabile di argomenti), quindi potresti avere un supporto
parziale su molti aspetti.
Se non sbaglio per scoprire se supporta o no il c99 il GCC definisce
una macro, di cui ora mi sfugge il nome.
-- 
Mox
"Trust the programmer."
"Don't prevent the programmer from doing what needs to be done."
"Keep the language small and simple."
"Provide only one way to do an operation."

standard).
Cosa non supporta ancora del C99? (Un link ovviamente va benissimo)



Mi hai dato una vera chicca con il suggerimento al link del manuale gcc!
Iniziando a usare le varie opzioni di compilazione del gcc (gcc 
-pedantic ... ) ho ottenuto la conferma che il mio modo di allocare un 
vettore non č conforme allo standard ISO C89.

Cosa non supporta ancora del C99? (Un link ovviamente va benissimo)
La mancanza di supporto e' solo su alcuni aspetti, non su tutto lo
standard, che come gia' detto veniva supportato non ufficialmente gia'
da qualche versione.
Qui trovi spiegato cosa devono ancora fare:
http://gcc.gnu.org/onlinedocs/gcc-3.1/gcc/Standards.html#Standards
http://gcc.gnu.org/gcc-3.1/c99status.html
Se vuoi un confronto con un'implementazione completa del C99:
http://www.dinkumware.com/htm_cl/index.html
(attenzione: navigare in questo sito e' parecchio snervante... non so
perche', sara quella pagina che ti compare una volta ogni 2 click per
ricordarti che il tutto lo puoi comodamente comprare?)


Qui trovi spiegato cosa devono ancora fare:
Grazie, ci sono alcune cose che non ho esattamente capito cosa possano
essere, probabilmente so già cosa sono visto che ho letto qualcosa
(troppo poco però) sul C99, ma dal nome non riesco a capirlo:
"more precise aliasing rules via effective type"
"reliable integer division"
"extended identifiers"
"integer constant type rules" e "integer promotion rules"
"new struct type compatibility rules (tag compatibility)"
