Just nu i M3-nätverket
Gå till innehåll

Kompileringsfel


slowgrammer

Rekommendera Poster

Hejsan!

Jag försöker sparka igång ett mkt gammalt program som behövs som en del till ett större projekt.

 

Programmet är från 1993!! och var skrivet för gcc på unix sägs det. Det närmaste jag kommer är att jag sitter på UNIX solaris 2.5.1 och gcc 2.76(tror jag)

 

Mitt kompilerings fel ser ut så här:

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

p2c.h:126: parse error before `}'

p2c.h:126: warning: data definition has no type or storage class

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

 

Koden ser så här från raden 116:

/* row 116 */

typedef struct __p2c_jmp_buf {

struct __p2c_jmp_buf *next;

jmp_buf jbuf;

} __p2c_jmp_buf;

 

 

/* Warning: The following will not work if setjmp is used simultaneously.

This also violates the ANSI restriction about using vars after longjmp,

but a typical implementation of longjmp will get it right anyway. */

 

#ifndef FAKE_TRY

# define TRY(x) do { __p2c_jmp_buf __try_jb; __try_jb.next = __top_jb; if (!setjmp((__top_jb = &__try_jb)->jbuf)) {

# define RECOVER(x) __top_jb = __try_jb.next; } else {

# define RECOVER2(x,L) __top_jb = __try_jb.next; } else { if (0) { L: __top_jb = __try_jb.next; }

# define ENDTRY(x) } } while (0) //rad 126 +-1

#else

# define TRY(x) if (1) {

# define RECOVER(x) } else do {

# define RECOVER2(x,L) } else do { L: ;

# define ENDTRY(x) } while (0)

#endif

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

 

Någon grymm rackare som kan lista ut vad det är den gnäller på? Själv är jag helt lost...

Länk till kommentar
Dela på andra webbplatser

Usch ;)

 

Prova att sätta en

#define FAKE_TRY 1

innan p2c.h inkluderas eller i p2c.h och se om det fungerar...

Det kanske också står beskrivet i någon .h -fil vad som avses med FAKE_TRY

 

/TN

 

Länk till kommentar
Dela på andra webbplatser

Usch, som sagt...

 

En grej som är lite skum är att det inte finns något ';' efter while-villkoren i makrona. Det måste vara där om jag inte minns fel.

 

En annan sak: om koden i din fil är formatterad exakt som på webbsidan så måste raderna

 

# define TRY(x) do { __p2c_jmp_buf __try_jb; __try_jb.next = __top_jb; if (!

 

och

 

# define RECOVER2(x,L) __top_jb = __try_jb.next; } else { if (0) { L:

 

avslutas med ett '\' för att skarva ihop dem med raderna under. Om inte dessa finns med kommer det att stå:

 

setjmp((__top_jb = &__try_jb)->jbuf)) {

__top_jb = __try_jb.next; }

 

när filen kompileras. Eftersom __try_jb är deklarerad inne i ett makro kommer inte kompilatorn att känna igen denna variabel och generera felet 'data definition has no type or storage class'. Kanske... :)

 

Lycka till.

 

Länk till kommentar
Dela på andra webbplatser

Som sagt ingen rolig kod är det :), jag skall testa med era tips när jag kommer till jobbet i morgon.

 

Tack tipsen killar!

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...