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. |
|
quatromen Temat założony przez niniejszego użytkownika |
» 2013-12-24 13:19:21 dzieki za wyrzucenie tematu :/ |
|
xevuel |
» 2013-12-24 13:23:47 dzieki za niestosowanie sie do zasad pisania postow na tym forum :/ |
|
DejaVu |
» 2013-12-24 13:24:16 Podaj linijkę w której wystąpił błąd kompilacji. Przypuszczam, że napisałeś:
Jeżeli jest to C to powinno być:
int a; int * b; a = 12345; b = malloc( sizeof( int ) * a );
|
|
pekfos |
» 2013-12-24 13:27:50 Zakładanie tematów na forumBłąd kompilacji = wklejasz kod. Pewnie masz tam coś takiego W C90 nie możesz tak zrobić. Przestaw wersję języka na C99, lub nowszą, wtedy się powinno skompilować. Najlepiej alokuj tablicę dynamicznie. |
|
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: #include<stdio.h> #include<string.h> #include<stdlib.h>
#define DL_LINII 200
typedef struct { int wymx; int wymy; int szarosci; void * obraz_p; } obraz;
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; } } }
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; } } }
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 ]; } } }
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 ); }
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; } } }
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 ]; } } }
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 ] ); } } }
int czytaj( FILE * p, obraz * wobr ) { char s[ DL_LINII ]; int znak, koniec = 0, i, j; if( p == NULL ) { fprintf( stderr, "Blad: Nie podano uchwytu do pliku\n" ); return( 0 ); } if( fgets( s, DL_LINII, p ) == NULL ) koniec = 1; if(( s[ 0 ] != 'P' ) ||( s[ 1 ] != '2' ) || koniec ) { fprintf( stderr, "Blad: To nie jest plik PGM\n" ); return( 0 ); } do { if(( znak = fgetc( p ) ) == '#' ) { if( fgets( s, DL_LINII, p ) == NULL ) koniec = 1; } else { ungetc( znak, p ); } } while( !koniec && znak == '#' ); 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 ); } wobr->obraz_p = malloc( wobr->wymx * wobr->wymy * sizeof( int ) ); int( * obraz_pgm )[ wobr->wymx ]; obraz_pgm =( int( * )[ wobr->wymx ] ) wobr->obraz_p; 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 ) { 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 ) 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; }
|
|
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). |
|
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 ? |
|
« 1 » 2 3 |