Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    1

    [C] Errore dichiarazione array multidimensionale

    Salve sono nuovo del forum e anche di C.
    Vi chiedo un aiuto per questo errore che mi da nella riga 7:
    codice:
    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.

    codice:
    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!

  2. #2

    Re: [C] Errore dichiarazione array multidimensionale

    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:
    codice:
    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.

    codice:
    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

    Il codice corretto è così:
    codice:
      
    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

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    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).
    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.
    every day above ground is a good one

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.