Newsgroup: it.comp.lang.c
Titolo: dichiarazione vettore

Salve,
ho il dev c++ e win98.
Nei miei recenti post mi è stato fatto notare che io non so dichiarare un
vettore.
Non me ne ero mai accorto.
Ebbene, ora io vi espongo 3 semplici programmini dove dichiaro il vettore in
3 modi diversi, e
poi lo impiego alla stessa maniera.
Eccoli:
//////////////////////////////////////////////////////////////////////////
#include <stdlib.h>
#include <stdio.h>
//qui il vettore è dichiarato così: int N=6; int v[N];
main()
{
int N=6;
int i;
int v[N];
for (i=0; i<N; i++)
{
 v[i]=i;
 printf("v[%d]=%d", i, i); getchar();
}
}
//////////////////////////////////////////////////////////////////////////
#include <stdlib.h>
#include <stdio.h>
//qui il vettore è dichiarato così: const int N=6; int v[N];
main()
{
const int N=6;
int i;
int v[N];
for (i=0; i<N; i++)
{
 v[i]=i;
 printf("v[%d]=%d", i, i); getchar();
}
}
//////////////////////////////////////////////////////////////////////////
#include <stdlib.h>
#include <stdio.h>
//qui il vettore è dichiarato così: int v[6];
main()
{
int i;
int v[6];
for (i=0; i<6; i++)
{
 v[i]=i;
 printf("v[%d]=%d", i, i); getchar();
}
}
//////////////////////////////////////////////////////////////////////////
Ebbene, il dev c++ mi compila, e mi esegue correttamente, tutti e tre i
programmini.
Eppure, mi pare di capire che, secondo qualcuno, i primi due non dovrebbero
funzionare.
Provate ad eseguirli con il vostro compilatore.
Forse è il dev c++ che è anomalo rispetto agli altri compilatori?
Forse funzionano in C++ ma non in C?
Forse in alcuni compilatori C funziona, ma in altri no?
grazie,
adriano

  int v[N];
Questo è ammissibile soltanto in C99. Non lo è in C++, né nel C "classico"
(C89). Alcuni compilatori ammettono questa forma anche in modalità C++.
Max

 wrote in message
_5adnTTUWui88_LV...@kpnqwest.it...

Invece la 2° e la 3° versione della dichiarazione che ho scritto nel post
iniziale, funzionano in tutte le tipologie di C: sia C89 che C99 che C++?
adriano

ciao, secondo me non ti dovresti basare sulle possibili reazioni del
devc o simili per scrivere il tuo codice in modo corretto.
questo perché ci sono troppe variabili; un esempio su tutti: a seconda
dell'ambiente di sviluppo che utilizzi, i warning possono essere
disattivati ecc.
quindi potresti non ricevere le segnalazioni anche nel caso in cui il
tuo programma non fosse corretto.
per quanto riguarda il vettore, ti posso suggerire di utilizzare la
direttiva define. mi pare che tu non la abbia mai usata.
nel tuo caso potresti scrivere ad esempio:
  #include <stdlib.h>
  #include <stdio.h>
  #define N 6 /* nota che è senza punteggiatura */
  main()
  {
    int i;
    int v[N];
nella fattispecie questa fa in modo che, prima della compilazione vera
e propria, la lettera N venga sostituita con il valore 6 in tutto il
sorgente ( ma non all'interno di apici o doppi apici ).
sarebbe come se tu prima di compilare andassi a sostituire a mano ogni
occorrenza della N con il valore 6.
la praticità sta ovviamente nel fatto che, se usi N per cento volte
nel sorgente, basterà sostituire il valore nel define per cambiarli
tutti.
un dettaglio. probabilmente ne hai già tenuto conto, ma in ogni caso
ti faccio notare che
nel for metti:
printf("v[%d]=%d", i, i);
nel caso specifico va bene perché poni alla riga precedente v[i]=i; e
quindi stampare 2 volte il valore di i invece che il contenuto di v[i]
ti da lo stesso risultato,
ma a livello logico dovresti mettere
printf("v[%d]=%d", i, v[i]);
saluti selene :)