PDA

Visualizza la versione completa : [C] Errore dichiarazione array multidimensionale


smark91
03-12-2010, 04:10
Salve sono nuovo del forum e anche di C.
Vi chiedo un aiuto per questo errore che mi da nella riga 7:

variable-size type declared outside of any function
Come compilatore uso Dev-C++

Contando che se a posto di n e m metto direttamente i valori l'errore non me lo da.



1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <conio.h>
4
5 int n = 10;
6 int m = 12;
7 int matrice[n][m];
8 int i;
9 int j;
10
11 main()
12 {
13 for (i=0; i<m; i++);
14 {
15 for (j=0; j<n; j++);
16 {
17 printf("%d", matrice[i][j]);
18 }
19 printf("n");
20 }
21 getch();
22 }


Grazie delle risposte!

MdE2005
03-12-2010, 07:37
Originariamente inviato da smark91
Salve sono nuovo del forum e anche di C.
Vi chiedo un aiuto per questo errore che mi da nella riga 7:

variable-size type declared outside of any function
Come compilatore uso Dev-C++

Contando che se a posto di n e m metto direttamente i valori l'errore non me lo da.



1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <conio.h>
4
5 int n = 10;
6 int m = 12;
7 int matrice[n][m];
8 int i;
9 int j;
10
11 main()
12 {
13 for (i=0; i<m; i++);
14 {
15 for (j=0; j<n; j++);
16 {
17 printf("%d", matrice[j]);
18 }
19 printf("n");
20 }
21 getch();
22 }


Grazie delle risposte!

Ah, la guida di HTML.it :facepalm:

Il codice corretto è così:


const int n = 10;
const int m = 12;

int i;
int j;

main()
{
int matrice[n][m];
for (i=0; i<m; i++);
{
for (j=0; j<n; j++);
{
printf("%d", matrice[i][j]);
}
printf("n");
}
getch();
}


Le dimensioni di una matrice devono essere valori costanti, non variabili, e comunque la dichiarazione deve essere fatta all'interno di una procedura se non usi direttamente numeri.


Ciao :)

YuYevon
03-12-2010, 09:59
Innanzitutto tieni presente che gli array a size variabile sono una caratteristica introdotta nello standard C99, non in quello originario (C89). Tale standard è implementato da diversi compilatori, ma comunque non sempre (anzi quasi mai) in maniera completa (leggi qui (http://en.wikipedia.org/wiki/C99#Implementations)).
Ora il mingw (il compilatore del Dev), derivando dal gcc, consente di dichiarare array (e matrici quindi) a lunghezza variabile, quindi in teoria quello che fai sarebbe anche corretto (a limite fai strumenti -> opzioni di compilazione e aggiungi il flag -std=c99 alla fase di compilazione); il punto è che il gcc (e presumibilmente anche il mingw quindi) implementa la caratteristica degli array a size variabile allocandoli nello stack della memoria del processo, non nel data segment, quindi in conclusione *puoi* dichiarare array a size variabili ma *non puoi* dichiararli globali, devono necessariamente essere dichiarati in una funzione.

Ovviamente però, poiché il C99 non è implementato da tutti i compilatori (o almeno non in maniera completa), è meglio starvi lontani il più possibile, senza contare che poi forse il mondo non aveva bisogno degli array a size variabile.

Loading