[C] extern syntax error?

Pagina: 1
Acties:

  • VyperX
  • Registratie: Juni 2001
  • Laatst online: 24-07 15:57
Hallo,

Ik probeer op dit moment een programmatje te compilen, maar hij geeft een syntax fout in een van de bijgeleverde header files.
Kan iemand mij vertellen wat er mis is met het volgende?
C:
1
 extern BCG_TYPE_NATURAL BCG_PARSEOPTION BCG_ARG_3 (int, *char[], BCG_TYPE_OPTION_SET);

De (relevante) foutmelding die ik krijg:
In file included from bcg_min.c:29:
/home/ijperen/CADP/incl/bcg_options.h:57: syntax error before `*';

Compiler die ik gebruik is gcc, versie 2.95.4
Werkt het misschien om een andere compiler te gebruiken?

My Dwarf Fortress ASCII Reward: ~~@~~####,.".D",.B""


  • whoami
  • Registratie: December 2000
  • Laatst online: 09:56
IMHO staat dat sterretje voor die char[] daar niet goed...
Een pointer declareer je nl als volgt:
C++:
1
2
char*
int*

en niet
code:
1
*char


Misschien neem je best eens contact op met de maker van die libs/headers.

https://fgheysels.github.io/


  • JeroenB
  • Registratie: November 1999
  • Laatst online: 10-07 20:20
*char[] is hetzelfde als char** en kan dus wel. Het is slechts een pointer naar (veelal) een lijst met char arrays (strings).

Dat de foutmelding over een * zeurt wil niet zeggen dat het met de *char[] te maken heeft, aangezien al die in hoofdletters geschreven identifiers waarschijnlijk #defines zijn en na preprocessing allerlei sterretjes kunnen bevatten.

Het kan zijn dat je een #include niet of niet compleet hebt waarin 1 van die #defines of type staat gedefineerd, dat kan tot gevolg hebben dat er na preprocessing iets overblijft waar de compiler niks mee kan. Dus doe even een search op je sourcefiles naar al die woorden in hoofdletters om te zien of ze netjes gedefined/gedeclareerd zijn.

[ Voor 33% gewijzigd door JeroenB op 10-12-2002 14:21 . Reden: Laatste alinea toegevoegd ]


Verwijderd

JeroenB: klopt niet wat je beweert, dit is gewoon geen correcte C(++) syntax.
C:
1
2
void blah(*char[]);
void blih(char*[]);

Output compiler:
blah.c:1: parse error before `*'
Nu jij weer... (functie blih() geeft aan hoe die typespec wel moet).

  • VyperX
  • Registratie: Juni 2001
  • Laatst online: 24-07 15:57
Ok, ik heb alles gecontroleerd... Was allemaal goed.
Ook heb ik het volgende geprobeerd:

C:
1
  extern BCG_TYPE_NATURAL BCG_PARSE_BLAAT1 BCG_ARG_3 (int, int, BCG_TYPE_OPTION_SET); 

Welke geen syntax error gaf, en ook

C:
1
  extern int BCG_PARSE_BLAAT1 BCG_ARG_3 (int, *char[], int); 

Welke wél een syntax error gaf.

Volgens mij ligt het toch wel aan die *char[]...

My Dwarf Fortress ASCII Reward: ~~@~~####,.".D",.B""


  • JeroenB
  • Registratie: November 1999
  • Laatst online: 10-07 20:20
Oei, je hebt gelijk, het is natuurlijk,

C:
1
void blah(char *naam[]);

waar ik mee in de war was :) In dat geval heeft de oorspronkelijke topicstarter ongeteste headers te pakken denk ik. Misschien dan vervangen door:

C:
1
extern BCG_TYPE_NATURAL BCG_PARSEOPTION BCG_ARG_3 (int dummyint, char *dummychar[], BCG_TYPE_OPTION_SET dummydef);

[ Voor 1% gewijzigd door JeroenB op 10-12-2002 14:44 . Reden: formatting ]


  • VyperX
  • Registratie: Juni 2001
  • Laatst online: 24-07 15:57
JeroenB schreef op 10 december 2002 @ 14:43:
Oei, je hebt gelijk, het is natuurlijk,

C:
1
void blah(char *naam[]);

waar ik mee in de war was :) In dat geval heeft de oorspronkelijke topicstarter ongeteste headers te pakken denk ik. Misschien dan vervangen door:

C:
1
extern BCG_TYPE_NATURAL BCG_PARSEOPTION BCG_ARG_3 (int dummyint, char *dummychar[], BCG_TYPE_OPTION_SET dummydef);
Mja, maar het zijn externe functies... (die dus in een library file staan, en worden "toegevoegd". Tenminste, zo is het mij uitgelegd)
En ten tweede... Er staan ook andere functies in die header file (zonder *), waarbij ook geen argumenten namen zijn meegegeven.

[ Voor 11% gewijzigd door VyperX op 10-12-2002 14:51 ]

My Dwarf Fortress ASCII Reward: ~~@~~####,.".D",.B""


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

VyperX schreef op 10 december 2002 @ 14:50:
En ten tweede... Er staan ook andere functies in die header file (zonder *), waarbij ook geen argumenten namen zijn meegegeven.
Argumentnamen in declaraties zijn optioneel, en worden zelfs strak genegeerd (je mag in implementatie en declaratie andere namen gebruiken, die van implementatie wordt gebruikt). Je fout zat 'm enkel in de verkeerde plaats van het sterretje.

Professionele website nodig?


  • VyperX
  • Registratie: Juni 2001
  • Laatst online: 24-07 15:57
Hmmmm... Ok..

Anyway, ik heb het nu omgeschreven naar een char** en hij klaaagt er niet meer over. Toch vaag, want *char[] lijkt mij wel een correcte definitie.... Maar goed :)
Nu de volgende errors zien op te lossen :)

My Dwarf Fortress ASCII Reward: ~~@~~####,.".D",.B""


  • JeroenB
  • Registratie: November 1999
  • Laatst online: 10-07 20:20
Ik probeerde slechts snapbaar te maken wat de wijziging was.

Ik begrijp niet helemaal dat iemand eerst iets komt vragen en dan bij een duidelijke uitleg gaat zeiken over een non-issue (want het maakt niks uit of die namen er staan, alleen het geeft aan waarop het slaat tov een normale declaratie.)
Toch vaag, want *char[] lijkt mij wel een correcte definitie.... Maar goed :)
Zie dan alsnog mijn voorbeeld met namen en zoek de verschillen. Daarom dus die namen, zodat je het zou snappen :*)

[ Voor 26% gewijzigd door JeroenB op 10-12-2002 15:05 . Reden: quote+reactie toegevoegd ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 09:56
VyperX schreef op 10 December 2002 @ 15:01:
Hmmmm... Ok..

Anyway, ik heb het nu omgeschreven naar een char** en hij klaaagt er niet meer over. Toch vaag, want *char[] lijkt mij wel een correcte definitie.... Maar goed :)
Nu de volgende errors zien op te lossen :)


Zoals reeds gezegd is *char[] geen correcte definitie. ;)

char*[] is dat wel. Het *-tje moet nl. achter het datatype staan , en niet ervoor.

https://fgheysels.github.io/


  • VyperX
  • Registratie: Juni 2001
  • Laatst online: 24-07 15:57
whoami schreef op 10 december 2002 @ 15:04:

[...]


Zoals reeds gezegd is *char[] geen correcte definitie. ;)

char*[] is dat wel. Het *-tje moet nl. achter het datatype staan , en niet ervoor.
:Z
Je hebt gelijk. My mistake.

My Dwarf Fortress ASCII Reward: ~~@~~####,.".D",.B""


  • Mini-me
  • Registratie: November 1999
  • Niet online
VyperX schreef op 10 december 2002 @ 15:01:
Hmmmm... Ok..

Anyway, ik heb het nu omgeschreven naar een char** en hij klaaagt er niet meer over. Toch vaag, want *char[] lijkt mij wel een correcte definitie.... Maar goed :)
Nu de volgende errors zien op te lossen :)
Ook al zou de syntax wel goed zijn, zou dit nooit kunnen aangezien char een reserved keyword is ;)

  • whoami
  • Registratie: December 2000
  • Laatst online: 09:56
* whoami snapt totaal niet wat je daarmee bedoelt.

Hij gebruikt hier toch geen char als variable naam?

https://fgheysels.github.io/


  • Mini-me
  • Registratie: November 1999
  • Niet online
whoami schreef op 10 december 2002 @ 15:26:
* whoami snapt totaal niet wat je daarmee bedoelt.

Hij gebruikt hier toch geen char als variable naam?
Niet in zijn code, wel in de tekst die ik quote :P

  • whoami
  • Registratie: December 2000
  • Laatst online: 09:56
:? Ik zie het niet.

https://fgheysels.github.io/


  • D2k
  • Registratie: Januari 2001
  • Laatst online: 09-01 11:25

D2k

sjees neem jij ff een zijstap ;)
niet echt relevant vind ik dat hoor

Doet iets met Cloud (MS/IBM)


  • whoami
  • Registratie: December 2000
  • Laatst online: 09:56
Ik wil het nu wel weten. :( :P

char** is ok.
char*[] is ok
char[][] is ok
*char[] is niet ok (zoals in de gequote text staat). Ik zie nergens in de door Mini-me ge-quote text wat staan dat - al mocht de syntax goed zijn - problemen kan geven omdat char een reserved word is.

https://fgheysels.github.io/


  • JeroenB
  • Registratie: November 1999
  • Laatst online: 10-07 20:20
whoami: Hij doelt er denk ik op dat als je een naam gebruikt dat die notatie wel kan.

C:
1
void bla(char *name[]);


Wat er dus misging zou goed kunnen gaan met een typedefinitie ervoor. Echter, dan zou het alsnog misgaan omdat char een keyword is en dus niet een variabelenaam mag zijn.

  • whoami
  • Registratie: December 2000
  • Laatst online: 09:56
Hmm, ja, idd... Dan is het idd wel een probleem. Wel ver gezocht imho, maar goed....

https://fgheysels.github.io/

Pagina: 1