Newsgroup: it.comp.lang.c++
Titolo: Problemi con versioni differenti

Ho notato da poco tempo una cosa che mi lascia alquanto perplesso :
    Lavorando su un sistema Sun OS (che ritengo abbia un Borland C++
installato di sicuro non marcio)
    scrivendo del codice posso inizializzare un intero vettore cosi' :
                    int a[c];
    avendo ovviamente già definito l'intero c a qualche valore.
    Riportando tutti i miei bei programmini fatti con tanto amore sul Visual
C++ che ho a casa per W9X
    nella compilazione mi da errore e mi dice che il valore tra [] deve
essere PER FORZA una costante,
    cioe' del tipo :
                    int a[2]; oppure int a[COSTANTE]; sempre che sia stato
effettuato il define appropriato.
Dal momento che mi sembra assurdo che debba essere cosi' vorrei sapere se
c'e' un modo per impedire
questa cosa, anche perche' l'ho notata adesso quando di programmi simili col
VC++ ne ho fatti tanti un'anno
fa, ma non mi ricordavo una simile costrizione.
Spero di essermi spiegato e di trovare qualcuno che sappia come risolvere il
problema, altrimenti non posso
fare un bel niente di programmazione.



Lo Standard prevede che tu possa farlo; se il tuo compilatore non
accetta
const size_t c=2; // Nota il const; non lo avevi mica dimenticato, vero?
int a[c];
e' bacato e va cambiato o upgradato.
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Univ. of Padova, Dept. of Physics - Padova, Italy            
lor...@pd.infn.it
Murphy's law: "Anything that can go wr
/bin/fortune: segmentation fault - core dumped

     avendo ovviamente già definito l'intero c a qualche valore.
Che intendi per "inizializzare" ?
Porre tutti gli elementi uguali a c ?
Non mi risulta sia possibile...
Se invece intendi creare il vettore, con quella sintassi, in C e C++ si
creano solo vettori statici, quindi di dimensione fissa che dev'essere nota
a tempo di compilazione... altrimenti ci vuole new!
Massimo

 wrote in message 90raf5$qb$1...@news.mclink.it...

Ho capito, pero' resta il fatto che questi programmi funzionano con il
Borland c++, diversamente che nel VC++6
Non credo sia giusto che VC++ mi imponga questo visto che il c++ stesso
prevede di sicuro una scrittura del
genere , visto che l'ho fatto milioni di volte senza alcun problema.

essere PER FORZA una costante,
Lo standard C++ richiede che sia una costante mentre ho sentito
che l'ultimo standard C permette che sia una variabile o una
espressione non costante.
Probabilmente questa estensione (che alcuni compilatori C++ hanno
gia' iniziato a implementare) diventera' standard fra qualche tempo.
HTH
Andrea
--
Andrea Griffini, Programmer
http://www.netservers.com/~agriff

 essere PER FORZA una costante,
Alcuni compilatori accettano come estensione la dichiarazione di array 
dinamico;
ghigo@sphera:/tmp$ gcc -Wall -o tt t.c
ghigo@sphera:/tmp$ cat t.c                                                  
 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
int main( int argc, char **argv ){
 
        int     c=atoi(argv[1]);
        int     aa[c];
        int     dd;
 
        printf("&c=%p; &(aa[0])=%p; &(aa[c-1])=%p; &dd=%p\n",
                &c,aa,aa+c-1,&dd );
 
        return 0;
 
}
ghigo@sphera:/tmp$ ./tt 1000
&c=0xbffffbf8; &(aa[0])=0xbfffec34; &(aa[c-1])=0xbffffbd0; &dd=0xbffffbf4
ghigo@sphera:/tmp$ gcc -v
Reading specs from /usr/lib/gcc-lib/i386-linux/2.95.2/specs
gcc version 2.95.2 20000220 (Debian GNU/Linux)                              
ghigo@sphera:/tmp$
 
Il gcc e' uno di questi ( e mentre mi sembra strano un borland c++ su una 
SunOS, mi sembra piu' normale un gcc )