Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C] warning: ISO C90 forbids variable length array

Ostatnio zmodyfikowano 2013-12-24 23:06
Autor Wiadomość
quatromen
Temat założony przez niniejszego użytkownika
[C] warning: ISO C90 forbids variable length array
» 2013-12-24 13:00:58
Mam problem otóż wyskakuje mi taki błąd przy kompilacji w Xterm na linuxie, wcześniej gdy korzystałem z Code Bloksa tego błędu nie było.

Błąd:

przetwarzanie2.c:6:1: warning: ISO C90 forbids variable length array ‘obraz_pgm’ [-Wvla]

Co jest przyczyną tego błędu ?

Z góry dzięki za pomoc .

Jeśli potrzeba kod to mogę go dodać chociaż nie wiem czy to coś zmieni.
P-100034
quatromen
Temat założony przez niniejszego użytkownika
» 2013-12-24 13:19:21
dzieki za wyrzucenie tematu :/
P-100037
xevuel
» 2013-12-24 13:23:47
dzieki za niestosowanie sie do zasad pisania postow na tym forum :/
  • Zły temat
  • Brak formatowania dla logów kompilacji
  • Brak pełnych logów kompilacji, tj. za pomocą jakich poleceń kompilowałeś kod
  • Brak kodu
P-100039
DejaVu
» 2013-12-24 13:24:16
Podaj linijkę w której wystąpił błąd kompilacji. Przypuszczam, że napisałeś:
C/C++
int a;
int b[ a ];
Jeżeli jest to C to powinno być:
C/C++
int a;
int * b;
a = 12345;
b = malloc( sizeof( int ) * a );
P-100041
pekfos
» 2013-12-24 13:27:50
» Porady dla użytkowników cpp0x.plZakładanie tematów na forum zalecenie
Błąd kompilacji = wklejasz kod.

Pewnie masz tam coś takiego
C/C++
int tab[ x ];
W C90 nie możesz tak zrobić. Przestaw wersję języka na C99, lub nowszą, wtedy się powinno skompilować. Najlepiej alokuj tablicę dynamicznie.
P-100042
quatromen
Temat założony przez niniejszego użytkownika
» 2013-12-24 13:29:51
Jeśli już miałbym się do tych zasad dostosować to :

dobra zły temat,mój błąd,
Kod wklejać prawie 500 linii

A chodziło mi jedynie przez co może wystąpić ten błęd
/* Wczytywanie obrazprzetwarzanie2.c: In function ‘rozmywaniepionowe’:
przetwarzanie2.c:25:1: warning: ISO C90 forbids variable length array ‘obraz_pgm’ [-Wvla]
przetwarzanie2.c:26:1: warning: ISO C90 forbids variable length array [-Wvla]
przetwarzanie2.c:28:1: warning: ISO C90 forbids mixed declarations and code [-pedantic]
przetwarzanie2.c: In function ‘rozmywaniepoziome’:
przetwarzanie2.c:42:1: warning: ISO C90 forbids variable length array ‘obraz_pgm’ [-Wvla]
przetwarzanie2.c:43:1: warning: ISO C90 forbids variable length array [-Wvla]
przetwarzanie2.c:45:1: warning: ISO C90 forbids mixed declarations and code [-pedantic]
przetwarzanie2.c: In function ‘progowanie’:
przetwarzanie2.c:59:1: warning: ISO C90 forbids variable length array ‘obraz_pgm’ [-Wvla]
przetwarzanie2.c:60:1: warning: ISO C90 forbids variable length array [-Wvla]
przetwarzanie2.c:61:1: warning: ISO C90 forbids mixed declarations and code [-pedantic]
przetwarzanie2.c: In function ‘wartosc’:
przetwarzanie2.c:79:1: warning: ISO C90 forbids variable length array ‘obraz_pgm’ [-Wvla]
przetwarzanie2.c:80:1: warning: ISO C90 forbids variable length array [-Wvla]
przetwarzanie2.c:82:1: warning: ISO C90 forbids mixed declarations and code [-pedantic]
przetwarzanie2.c: In function ‘histogram’:
przetwarzanie2.c:103:1: warning: ISO C90 forbids variable length array ‘obraz_pgm’ [-Wvla]
przetwarzanie2.c:104:1: warning: ISO C90 forbids variable length array [-Wvla]
przetwarzanie2.c:106:5: warning: ISO C90 forbids mixed declarations and code [-pedantic]
przetwarzanie2.c: In function ‘zmianapoziomow’:
przetwarzanie2.c:138:1: warning: ISO C90 forbids variable length array ‘obraz_pgm’ [-Wvla]
przetwarzanie2.c:139:1: warning: ISO C90 forbids variable length array [-Wvla]
przetwarzanie2.c:141:4: warning: ISO C90 forbids mixed declarations and code [-pedantic]
przetwarzanie2.c: In function ‘negacja’:
przetwarzanie2.c:164:1: warning: ISO C90 forbids variable length array ‘obraz_pgm’ [-Wvla]
przetwarzanie2.c:165:1: warning: ISO C90 forbids variable length array [-Wvla]
przetwarzanie2.c:167:1: warning: ISO C90 forbids mixed declarations and code [-pedantic]
przetwarzanie2.c: In function ‘konturowanie’:
przetwarzanie2.c:180:1: warning: ISO C90 forbids variable length array ‘obraz_pgm’ [-Wvla]
przetwarzanie2.c:181:1: warning: ISO C90 forbids variable length array [-Wvla]
przetwarzanie2.c:183:5: warning: ISO C90 forbids mixed declarations and code [-pedantic]
przetwarzanie2.c: In function ‘czytaj’:
przetwarzanie2.c:227:1: warning: ISO C90 forbids variable length array ‘obraz_pgm’ [-Wvla]
przetwarzanie2.c:227:1: warning: ISO C90 forbids mixed declarations and code [-pedantic]
przetwarzanie2.c:228:1: warning: ISO C90 forbids variable length array [-Wvla]
przetwarzanie2.c: In function ‘main’:
przetwarzanie2.c:363:5: warning: implicit declaration of function ‘zapisz’ [-Wimplicit-function-declaration]
przetwarzanie2.c:365:10: error: ‘obraz’ has no member named ‘obraz_pgm’
przetwarzanie2.c: In function ‘czytaj’:
przetwarzanie2.c:243:1: warning: control reaches end of non-void function [-Wreturn-type]
A tu kod:
C/C++
#include<stdio.h>
#include<string.h>
#include<stdlib.h>


#define DL_LINII 200

/* Deklaracja struktury ZROBIONE*/
typedef struct {
    int wymx;
    int wymy;
    int szarosci;
    void * obraz_p;
} obraz;




/* Rozmywanie pionowe */
void rozmywaniepionowe( obraz * wobr, int R )
{
    int( * obraz_pgm )[ wobr->wymx ];
    obraz_pgm =( int( * )[ wobr->wymx ] ) wobr->obraz_p;
   
    int i, j;
    for( i = 0; i < wobr->wymy; i++ )
    {
        for( j = 0; j < wobr->wymx; j++ )
        {
            obraz_pgm[ i ][ j ] =( obraz_pgm[ i - R ][ j ] + obraz_pgm[ i ][ j ] + obraz_pgm[ i + R ][ j ] ) / 3;
        }
    }
}


/* Rozmywanie poziome*/
void rozmywaniepoziome( obraz * wobr, int R )
{
    int( * obraz_pgm )[ wobr->wymx ];
    obraz_pgm =( int( * )[ wobr->wymx ] ) wobr->obraz_p;
   
    int i, j;
    for( i = 0; i < wobr->wymy; i++ )
    {
        for( j = 0; j < wobr->wymx; j++ )
        {
            obraz_pgm[ i ][ j ] =( obraz_pgm[ i ][ j - R ] + obraz_pgm[ i ][ j ] + obraz_pgm[ i ][ j + R ] ) / 3;
        }
    }
}


/* Progowanie bieli */
void progowanie( obraz * wobr, int P )
{
    int( * obraz_pgm )[ wobr->wymx ];
    obraz_pgm =( int( * )[ wobr->wymx ] ) wobr->obraz_p;
    int i, j;
    for( i = 0; i < wobr->wymy; i++ )
    {
        for( j = 0; j < wobr->wymx; j++ )
        {
           
            if( obraz_pgm[ i ][ j ] <= P )
                 obraz_pgm[ i ][ j ] = obraz_pgm[ i ][ j ];
           
            if( obraz_pgm[ i ][ j ] > P )
                 obraz_pgm[ i ][ j ] = wobr->szarosci;
           
        }
    }
}

void wartosc( obraz * wobr, int * lmin, int * lmax )
{
    int( * obraz_pgm )[ wobr->wymx ];
    obraz_pgm =( int( * )[ wobr->wymx ] ) wobr->obraz_p;
   
    int i, j;
   
    * lmin = obraz_pgm[ 0 ][ 0 ];
    * lmax = obraz_pgm[ 0 ][ 0 ];
    for( i = 1; i < wobr->wymy; i++ )
    {
        for( j = 0; j < wobr->wymx; j++ )
        {
           
            if( obraz_pgm[ i ][ j ] >* lmax )
                 * lmax = obraz_pgm[ i ][ j ];
           
            if( obraz_pgm[ i ][ j ] <* lmin )
                 * lmin = obraz_pgm[ i ][ j ];
           
        }
    }
}
/* Rozciagniecie histogramu ZROBIONE*/
void histogram( obraz * wobr )
{
    int( * obraz_pgm )[ wobr->wymx ];
    obraz_pgm =( int( * )[ wobr->wymx ] ) wobr->obraz_p;
   
    int i, j;
    int lmin, lmax;
   
    lmin = obraz_pgm[ 0 ][ 0 ];
    lmax = obraz_pgm[ 0 ][ 0 ];
    for( i = 1; i < wobr->wymy; i++ )
    {
        for( j = 0; j < wobr->wymx; j++ )
        {
           
            if( obraz_pgm[ i ][ j ] > lmax )
                 lmax = obraz_pgm[ i ][ j ];
           
            if( obraz_pgm[ i ][ j ] < lmin )
                 lmin = obraz_pgm[ i ][ j ];
           
        }
    }
    for( i = 1; i < wobr->wymy; i++ )
    {
        for( j = 0; j < wobr->wymx; j++ )
        {
            obraz_pgm[ i ][ j ] =( obraz_pgm[ i ][ j ] - lmin ) *( wobr->szarosci ) /( lmax - lmin );
        }
    }
    printf( " najmniejsza wartosc to : %d ", lmin );
    printf( " najwieksza wartosc to : %d ", lmax );
}

/* Zmiana poziomow */
void zmianapoziomow( obraz * wobr, int biel, int czern )
{
    int( * obraz_pgm )[ wobr->wymx ];
    obraz_pgm =( int( * )[ wobr->wymx ] ) wobr->obraz_p;
   
    int i, j;
    for( j = 0; j < wobr->wymx; j++ )
    {
        for( i = 0; i < wobr->wymy; i++ )
        {
           
            if( obraz_pgm[ i ][ j ] <= czern )
                 obraz_pgm[ i ][ j ] = 0;
           
            if(( czern < obraz_pgm[ i ][ j ] ) &&( obraz_pgm[ i ][ j ] < biel ) )
                 obraz_pgm[ i ][ j ] =( obraz_pgm[ i ][ j ] - czern ) *( wobr->szarosci ) /( biel - czern );
           
            if( obraz_pgm[ i ][ j ] >= biel )
                 obraz_pgm[ i ][ j ] = wobr->szarosci;
           
        }
       
    }
}

/* Negacja (zamiana czarnego na biale) ZROBIONE */
void negacja( obraz * wobr )
{
    int( * obraz_pgm )[ wobr->wymx ];
    obraz_pgm =( int( * )[ wobr->wymx ] ) wobr->obraz_p;
   
    int i, j;
    for( j = 0; j < wobr->wymx; j++ )
    {
        for( i = 0; i < wobr->wymy; i++ )
        {
            obraz_pgm[ i ][ j ] = wobr->szarosci - obraz_pgm[ i ][ j ];
        }
    }
}

/*Konturowanie */
void konturowanie( obraz * wobr )
{
    int( * obraz_pgm )[ wobr->wymx ];
    obraz_pgm =( int( * )[ wobr->wymx ] ) wobr->obraz_p;
   
    int i, j;
    for( j = 0; j < wobr->wymx - 1; j++ )
    {
        for( i = 0; i < wobr->wymy - 1; i++ )
        {
            obraz_pgm[ i ][ j ] = abs( obraz_pgm[ i + 1 ][ j ] - obraz_pgm[ i ][ j ] ) + abs( obraz_pgm[ i ][ j + 1 ] - obraz_pgm[ i ][ j ] );
        }
    }
}

/* Wczytywanie obrazu ZROBIONE */
int czytaj( FILE * p, obraz * wobr )
{
    char s[ DL_LINII ];
    int znak, koniec = 0, i, j;
   
    /*sprawdzenie czy podano prawid³owy uchwyt pliku */
    if( p == NULL ) {
        fprintf( stderr, "Blad: Nie podano uchwytu do pliku\n" );
        return( 0 );
    }
    if( fgets( s, DL_LINII, p ) == NULL ) koniec = 1;
    /* Sprawdzenie "numeru magicznego - powinien byæ P2 */
    if(( s[ 0 ] != 'P' ) ||( s[ 1 ] != '2' ) || koniec ) {
        fprintf( stderr, "Blad: To nie jest plik PGM\n" );
        return( 0 );
    }
    /* Pominiecie komentarzy */
    do {
        if(( znak = fgetc( p ) ) == '#' ) {
            if( fgets( s, DL_LINII, p ) == NULL ) koniec = 1;
           
        } else {
            ungetc( znak, p );
        }
    } while( !koniec && znak == '#' );
   
    /* Pobranie wymiarow obrazu i liczby odcieni szarosci */
    if( fscanf( p, "%d %d %d", & wobr->wymx, & wobr->wymy, & wobr->szarosci ) != 3 ) {
        fprintf( stderr, "Blad: Brak wymiarow obrazu lub liczby stopni szarosci\n" );
        return( 0 );
    }
   
    /* Tworzymy dynamiczna tablice dwuwymiarowa */
    wobr->obraz_p = malloc( wobr->wymx * wobr->wymy * sizeof( int ) );
    int( * obraz_pgm )[ wobr->wymx ];
    obraz_pgm =( int( * )[ wobr->wymx ] ) wobr->obraz_p;
   
    /* Pobranie obrazu i zapisanie w tablicy obraz_pgm*/
    for( i = 0; i < wobr->wymy; i++ )
    {
        for( j = 0; j < wobr->wymx; j++ )
        {
            if( fscanf( p, "%d", &( obraz_pgm[ i ][ j ] ) ) != 1 ) {
                fprintf( stderr, "Blad: Niewlasciwe wymiary obrazu\n" );
                return( 0 );
            }
        }
    }
   
   
}

void wyswietl( char * n_pliku )
{
    /* Wyswietlenie obrazu o zadanej nazwie
         za pomoca programu "display"   */
    char polecenie[ 1024 ];
    strcpy( polecenie, "display " );
    strcat( polecenie, n_pliku );
    strcat( polecenie, " &" );
    printf( "%s\n", polecenie );
    system( polecenie );
}


int main()
{
    obraz obr;
   
   
    int P, R;
    int lmin, lmax;
    int biel, czern;
    int number1, number2;
    int odczytano = 0;
    FILE * plik;
    FILE * zapis;
    char nazwa[ 100 ];
    char nazwazapis[ 100 ];
   
    while( number1 != 4 )
    {
        number2 = 0;
        printf( "PRZETWARZANIE OBRAZU \n 1 - Wczytaj obraz \n 2 - Edycja obrazu \n 3 - Zapisz obraz \n 4 - Koniec \n " );
        scanf( "%d", & number1 );
       
        switch( number1 )
        {
        case 1:
            printf( "Podaj nazwe pliku:\n" );
            scanf( "%s", nazwa );
            plik = fopen( nazwa, "r" );
           
            if( plik != NULL ) /* co spowoduje zakomentowanie tego warunku */
                 odczytano = czytaj( plik, & obr );
           
           
           
            break;
           
        case 2:
            while( number2 != 10 )
            {
                printf( "EDYCJA OBRAZU \n 1 - Dane o obrazie \n 2 - Negacja (zamiana czarnego na biale) \n 3 - Zmiana poziomow \n 4 - Konturowanie \n 5 - Rozciagniecie histogramu \n 6 - Progowanie bieli \n 7 - Rozmywanie pionowe \n 8 - Rozmywanie poziome \n 9 - Wyswietl obraz \n 10 - Cofnij do poprzedniego menu \n" );
                scanf( "%d", & number2 );
                switch( number2 )
                {
                case 1:
                    printf( "Format : PGM \n Wysokosc : %d ", obr.wymy );
                    printf( "\n Szerokosc : %d", obr.wymx );
                    printf( "\n Szarosc : %d", obr.szarosci );
                    wartosc( & obr, & lmin, & lmax );
                    printf( "\n Najmniejsza jasnosc wystepujaca w obrazie wejsciowym : %d ", lmin );
                    printf( "\n Najwieksza jasnosc wystepujaca w obrazie wejsciowym : %d ", lmax );
                    printf( "\n" );
                    break;
                   
                case 2:
                    negacja( & obr );
                    break;
                   
                case 3:
                    printf( "Podaj wartosc biel, przedzial 0-255 : " );
                    scanf( "%d", & biel );
                    printf( " \n Podaj wartosc czern, przedzial 0-255 : " );
                    scanf( "%d", & czern );
                    zmianapoziomow( & obr, biel, czern );
                   
                    break;
                   
                case 4:
                    konturowanie( & obr );
                    break;
                   
                case 5:
                    histogram( & obr );
                    break;
                   
                case 6:
                    printf( "podaj wartosc progu (przedzial : 0-255) " );
                    scanf( "%d", & P );
                    progowanie( & obr, P );
                    break;
                   
                case 7:
                    printf( "podaj promien rozmycia" );
                    scanf( "%d", & R );
                    rozmywaniepionowe( & obr, R );
                    break;
                   
                case 8:
                    printf( "podaj promien rozmycia" );
                    scanf( "%d", & R );
                    rozmywaniepoziome( & obr, R );
                    break;
                   
                case 9:
                    if( odczytano != 0 )
                         wyswietl( nazwa );
                   
                    break;
                   
                   
                }
            }
            break;
           
        case 3:
            printf( " podaj nazwe pliku do zapisania : \n " );
            scanf( "%s", nazwazapis );
            zapis = fopen( nazwazapis, "w" );
            zapisz( zapis, & obr );
           
            free( obr.obraz_pgm );
            break;
        }
       
    }
    return odczytano;
}
P-100044
pekfos
» 2013-12-24 13:33:28
Kod wklejać prawie 500 linii
370. Poza tym wystarczy podać kod, którego dotyczy błąd kompilacji (kilka linii).
P-100047
quatromen
Temat założony przez niniejszego użytkownika
» 2013-12-24 13:34:30
ale tu wszedzie jest blad

A jaką komenda się robi tło na czarno podczas kompilacji ?
P-100049
« 1 » 2 3
  Strona 1 z 3 Następna strona